redis主从复制原理
从库向主库发送同步请求,主库接受同步请求,主库使用bgsave生成rdb文件,生成后保存到磁盘并发送给从库
从库接收rdb文件并载入内存中
从库同步主库时候 会把库中数据清空 所以做redis主从尽量选择没有数据的
哨兵模式原理
通过发送命令,等待redis服务器响应,以达到监控运行多个redis目的
以监控方式获取主库工作状态是否正常,主库发生故障它会自动进行故障转移,然后将监控的从库提升为主库
redis版本 采用一主两从模型
[root@centos01 ~]# redis-server --version
Redis server v=3.2.9 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=5a2874c237acbcfc
命令行启用主从
[root@centos02 ~]# redis-cli -h 192.168.100.20 -p 6379 -a 123
192.168.100.20:6379> slaveof 192.168.100.10 6379
OK
[root@centos01 ~]# redis-cli -h 192.168.100.10 -p 6379 -a 123
192.168.100.10:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.100.20,port=6379,state=online,offset=673,lag=0
slave1:ip=192.168.100.30,port=6379,state=online,offset=673,lag=0
master_repl_offset:673
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:672
192.168.100.10:6379> set aa aa
OK
192.168.100.20:6379> keys *
1) "aa"
取消从节点
[root@centos02 ~]# redis-cli -h 192.168.100.20 -p 6379 -a 123
192.168.100.20:6379> slaveof no one
OK
[root@centos01 ~]# redis-cli -h 192.168.100.10 -p 6379 -a 123
192.168.100.10:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:295
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:294
通过修改配置文件实现
[root@centos02 ~]# vim /etc/redis/6379.conf
# slaveof 主节点的IP地址 端口号
slaveof 192.168.100.10 6379
重启生效
[root@centos01 ~]# redis-cli -h 192.168.100.10 -p 6379 -a 123
192.168.100.10:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.100.20,port=6379,state=online,offset=673,lag=0
slave1:ip=192.168.100.30,port=6379,state=online,offset=673,lag=0
master_repl_offset:673
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:672
哨兵模式故障自动切换
[root@centos04 ~]# vim /usr/local/redis/sentinel.conf
sentinel monitor mymaster 192.168.100.10 6379 1 IP地址:192.168.100.10:6379 后面几台主就写几
sentinel auth-pass mymaster 123
启动并查看日志
[root@centos04 ~]# redis-sentinel /usr/local/redis/sentinel.conf &> /var/log/redis_6379.log &
[1] 44813
[root@centos04 ~]# tail -f /var/log/redis_6379.log
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
44813:X 02 Jul 15:19:45.695 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net
/core/somaxconn is set to the lower value of 128.44813:X 02 Jul 15:19:45.695 # Sentinel ID is e5272cbd003ba58557ae54c3ec9f26ec0191358c
44813:X 02 Jul 15:19:45.695 # +monitor master mymaster 192.168.100.10 6379 quorum 1
44813:X 02 Jul 15:19:45.696 * +slave slave 192.168.100.20:6379 192.168.100.20 6379 @ mymaster 192.168.100.10 6
37944813:X 02 Jul 15:19:45.697 * +slave slave 192.168.100.30:6379 192.168.100.30 6379 @ mymaster 192.168.100.10 6
379
模拟现有Master故障
[root@centos01 ~]# redis-cli -h 192.168.100.10 -p 6379 -a 123
192.168.100.10:6379> shutdown
not connected>
自动切换到另一台机器
[root@centos02 ~]# redis-cli -h 192.168.100.20 -p 6379 -a 123
192.168.100.20:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.100.30,port=6379,state=online,offset=753,lag=0
master_repl_offset:753
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:752
常见主从复制故障
1.master密码不对 配置文件中这值得requirepass部分 从节点在执行主从复制命令或配置文件未修改正确 导致
无法正确建立主从同步关系
2.redis大版本不一致 不同的大版本会存在兼容问题 所以主从节点之间版本要一致
3.无法远程连接 主机之间无法通信或没有设置配置文件中的bind地址
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com