配置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