Redis主从复制+哨兵集群搭建(Docker部署)
先搭主从,再建哨兵,三个实例,一主二从三哨兵
本次搭建使用两台服务器,主节点一台
10.0.0.1
,两个从节点一台10.0.0.2
,两个实例master:6379/26379
slave1:6379/26379
slave2:6380/26380
一、构建主从复制
1. 前置准备
- 到官网下载对应版本的配置文件
http://download.redis.io/redis-stable/redis.conf
- pull docker镜像(此处选择redis:6.2.4)
此版本验证时不需要指定用户名
docker pull redis:6.2.4
- 创建文件夹
master
mkdir /data/redis/{conf,logs,data}
slave
mkdir /data/redis/{conf,data}
mkdir /data/redis/data/{slave1,slave2}
- 修改三节点配置文件
主从哨兵模式
cluster-enabled
配置必须为no
,不然会导致replicaof
配置无法使用,启动报错(集群模式启动,添加从节点需要redis-cli
的--cluster add-node
命令,并指定从节点应复制的主节点)主节点配置
requirepass
后,从节点必须配置masterauth
,配置值必须相同(主节点auth访问)
docker run
启动项使用-d
时,配置文件中daemonize
必须是no
,不然无法启动,会冲突(以守护线程启动)
master
bind 0.0.0.0
port 6379
logfile "/data/logs/redis.log"
requirepass 123456
appendonly yes
slave-1
bind 0.0.0.0
port 6379
logfile "/data/logs/redis.log"
replicaof 10.0.0.1 6379
masterauth 123456
requirepass 123456
appendonly yes
slave-2
bind 0.0.0.0
port 6380
logfile "/data/logs/redis.log"
replicaof 10.0.0.1 6379
masterauth 123456
requirepass 123456
appendonly yes
2. docker启动运行
--privileged=true
:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-p
第一个是redis的连接端口 第二个是哨兵的连接端口,程序使用哨兵集群时需要连接哨兵的端口
redis-server /etc/redis/redis.conf
使用配置文件启动
master
docker run -p 6379:6379 -p 26379:26379 --privileged=true --name redis-master -v /data/redis/conf/redis_master.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d --restart=always redis:6.2.4 redis-server /etc/redis/redis.conf
slave1
docker run -p 6379:6379 -p 26379:26379 --privileged=true --name redis-slave1 -v /data/redis/conf/redis_slave1.conf:/etc/redis/redis.conf -v /data/redis/data/slave1:/data -d --restart=always redis:6.2.4 redis-server /etc/redis/redis.conf
slave2
docker run -p 6380:6380 -p 26380:26380 --privileged=true --name redis-slave2 -v /data/redis/conf/redis_slave2.conf:/etc/redis/redis.conf -v /data/redis/data/slave2:/data -d --restart=always redis:6.2.4 redis-server /etc/redis/redis.conf
3. 验证主从
进入master
docker exec -it redis-master bash
使用redis-cli
客户端
redis-cli -a "123456"
查看主从节点状态
info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.0.2,port=6380,state=online,offset=19452,lag=1
slave1:ip=10.0.0.2,port=6379,state=online,offset=19452,lag=1
master_failover_state:no-failover
master_replid:4b69bd3973852fdd62dceb2423edfd26bbba0c0d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:19589
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:19589
主从构建成功
二、构建哨兵集群
1. 哨兵配置文件
配置文件解释
#哨兵端口号 一定要和启动命令映射第二个端口号一致
port 26379
#以守护线程后台启动
daemonize yes
#2为法定人数限制(quorum) 即3/2=1.5,取值为2
sentinel monitor mymaster 10.0.0.1 6379 2
#mymaster集群中master的密码,注意此行要在上面行的下面
sentinel auth-pass mymaster "123456"
master
port 26379
daemonize yes
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel auth-pass mymaster 123456
slave1
port 26379
daemonize yes
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel auth-pass mymaster 123456
slave2
port 26380
daemonize yes
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel auth-pass mymaster 123456
2. 启动哨兵
依次三台在sentinel.conf 配置文件同一级目录执行
redis-sentinel sentinel.conf
3. 验证哨兵
进入master哨兵节点
redis-cli -p 26379 -a 123456
查看哨兵状态
info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.1:6379,slaves=2,sentinels=4