前情提要
真实部署环境是机房环境,不能携带手机,所以需要进行提前演练,我使用的docker镜像的方式进行构建。docker的环境搭建详见:两台服务器搭建三个节点-CSDN博客
核心逻辑:
构建不同的配置文件,
指定不同的目录信息。
创建不同的启动脚本,---> 指向配置文件。
不同的脚本启动不同的服务。
redis的安装
加载指定的依赖文件
docker stop demo-container
docker rm demo-container
#使用镜像启动容器
docker run -itd --name demo-container --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro kylin-with-systemd:v10-sp3 /usr/lib/systemd/systemd
mongodb
docker cp redis-6.2.6.tar.gz demo-container:/home
docker cp redis-bin-6.2.6-aarch64.tar.gz demo-container:/home
进入容器
docker exec -it demo-container bash
源码的编译及安装
cd /home
解压源码
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
安装make编译工具
sudo yum install -y make gcc gcc-c++
编译
make -j 128
验证(出现All tests passed without errors!表示成功)
make test
我计划安装三个redis, 分别为redis1/redis2/redis3
make install PREFIX=/home/hussar/redis1
make install PREFIX=/home/hussar/redis2
make install PREFIX=/home/hussar/redis3
安装的前置动作
创建需要的文件夹
mkdir -p /home/hussar/redis1/server-6382/data
mkdir -p /home/hussar/redis1/sentinel-26382
mkdir -p /home/hussar/redis2/server-6381/data
mkdir -p /home/hussar/redis2/sentinel-26381
mkdir -p /home/hussar/redis3/server-6380/data
mkdir -p /home/hussar/redis3/sentinel-26380
期望的目录结构:
/home/hussar/redis*/
├──server-638*/
│ ├── data/
│ └── redis.conf
├──sentinel-2638*/
│ └── sentinel.conf
└──bin
├── redis-benchmark
├── redis-check-aof -> redis-server
├── redis-check-rdb -> redis-server
├── redis-cli
├── redis-sentinel -> redis-server
└── redis-server
配置填充
本处给出了redis3: 6380的配置文件,其它配置文件参考该配置,更改红色加粗信息。
redis服务的配置文件
vim /home/hussar/redis3/server-6380/redis.conf
6380作为主节点,从节点节点需要指定当前节点信息replicaof 127.0.0.1 6380
port 6380
bind 0.0.0.0
daemonize yes
protected-mode no
timeout 0
requirepass hussarRedis@xxx
masterauth hussarRedis@xxx
dir "/home/hussar/redis3/server-6380/data/"
save 900 1
save 300 10
save 60 10000
rdbcompress yes
appendonly yes
appendfsync everysec
pidfile "/var/run/redis-server-6380.pid"
logfile "/var/log/redis-server-6380.log"
# replicaof 127.0.0.1 6380
redis的systemd启动文件制作
vim /usr/lib/systemd/system/redis-server-6380.service
Unit
Description=Redis3Server
After=network.target
Service
Type=forking
ExecStart=/home/hussar/redis3/bin/redis-server /home/hussar/redis3/server-6380/redis.conf
ExecStop=/home/hussar/redis3/bin/redis-cli -p 6380-a hussarRedis@xxx shutdown
Restart=always
Install
WantedBy=multi-user.target
redis哨兵的配置文件
vim /home/hussar/redis3/sentinel-26380/sentinel.conf
26380作为主节点,其他节点设置不要变更,sentinel monitor hussarmaster 127.0.0.1 6380 2
port 26380
daemonize yes
protected-mode no
logfile "/var/log/redis-sentinel-26380.log"
sentinel monitor hussarmaster 127.0.0.1 6380 2
sentinel auth-pass hussarmaster hussarRedis@xxx
sentinel down-after-milliseconds hussarmaster 5000
sentinel failover-timeout hussarmaster 10000
redis哨兵systemd启动文件制作
vim /usr/lib/systemd/system/redis-sentinel-26380.service
Unit
Description=Redis3 Sentinel
After=network.target
Service
Type=forking
ExecStart=/home/hussar/redis3/bin/redis-sentinel /home/hussar/redis3/sentinel-26380/sentinel.conf
Restart=always
Install
WantedBy=multi-user.target
启动命令
设置开启自启动
systemctl enable --now redis-server-6380.service
systemctl enable --now redis-server-6381.service
systemctl enable --now redis-server-6382.service
systemctl enable --now redis-sentinel-26380.service
systemctl enable --now redis-sentinel-26381.service
systemctl enable --now redis-sentinel-26382.service
验证启动状态
查看主从状态
/home/hussar/redis3/bin/redis-cli -p 6380 -a hussarRedis@xxx INFO Replication
查看选举结果
/home/hussar/redis3/bin/redis-cli -p 26380 SENTINEL get-master-addr-by-name hussarmaster
/home/hussar/redis2/bin/redis-cli -p 26381 SENTINEL get-master-addr-by-name hussarmaster
/home/hussar/redis1/bin/redis-cli -p 26382 SENTINEL get-master-addr-by-name hussarmaster
手动停止主节点,验证是否重新选取新节点
验证主从的读写,查看主从信息 INFO Replication
systemctl stop redis-server-6380.service
进入从节点,验证读写和主从信息。
/home/hussar/redis2/bin/redis-cli -p 6381 -a hussarRedis@xxx
验证主从的读写,查看主从信息 INFO Replication
启动停止的节点,验证主动信息。
systemctl start redis-server-6380.service