配置redis读写分离
- 3台虚拟机
创建目录用于挂载
mkdir -p /root/redis/{conf,data,logs}
#master配置文件
bind 0.0.0.0 //任何ip都能访问
port 6379 //redis端口号
logfile "/data/redis.log" //日志文件存放位置,启动redis之前设置为空,在启动后进入容器内部创建并赋权限,否则会报错
requirepass 123456 //redis密码
appendonly yes //开启持久化
#node1从库配置文件
bind 0.0.0.0
port 6379
logfile "/data/redis.log"
requirepass 123456
appendonly yes
replicaof 192.168.152.201 6379
masterauth 123456
#node2从库配置文件
bind 0.0.0.0
port 6379
logfile "/data/redis.log"
requirepass 123456
appendonly yes
replicaof 192.168.152.201 6379
masterauth 123456
- 启动redis,主从服务器启动命令相同
26379 为哨兵模式端口号
--privileged=true 使redis内部用户有root权限,没设置则为普通用户
docker run -p 6379:6379 -p 26379:26379 --privileged=true --name redis -v /root/redis/conf/redis.conf:/etc/redis/redis.conf -v /root/redis/data:/data -d --restart=always redis:6.2.4 redis-server /etc/redis/redis.conf
- 查看主节点以及从节点相关信息
#进入redis内部
docker exec -it redis /bin/bash
#创建日志文件
touch redis.log
chmod 777 /data/redis.log
#查看主从信息
info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.152.134,port=6379,state=online,offset=112,lag=0
slave1:ip=192.168.152.135,port=6379,state=online,offset=112,lag=0
master_failover_state:no-failover
master_replid:1cb742f2e951c5f584a925b2524a93ba394ee31e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112
- master界面设值查看从节点是否同步
配置redis的哨兵模式
- 配置sentinel.conf配置文件
#关闭保护模式,允许外部访问
protected-mode no
#不限制外部访问客户端的IP
bind 0.0.0.0
#日志文件路径
logfile "/data/sentinel.log"
#要监视的主机
#格式:sentinel monitor <主机组名> <主机ip> <端口> <判断主机失效的最少哨兵数量>
#------------填写实际<主机ip>、<端口>------------
sentinel monitor mymaster 192.168.152.201 6379 2
#访问redis密码
#------------填写实际密码------------
sentinel auth-pass mymaster 123456
#判断主机失效所需的毫秒数
sentinel down-after-milliseconds mymaster 30000
#故障转移每个阶段执行超时毫秒数
sentinel failover-timeout mymaster 180000
#故障转移时同时对新主机执行同步的从机数量
sentinel parallel-syncs mymaster 1
- docker启动sentinel容器
docker run -d --privileged=true --name sentinel -v /root/redis/sentinel/sentinel.conf/:/usr/local/etc/redis/sentinel.conf -p 26379:26379 redis:6.2.4 redis-sentinel /usr/local/etc/redis/sentinel.conf
- 查看配置是否成功
docker exec -it sentinel /bin/bash
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=192.168.152.201:6379,slaves=2,sentinels=4