Redis主从复制和哨兵机制
程序员文章站
2022-05-07 15:48:01
...
Redis主从复制原理:
同步过程步骤如下:
从服务器向主服务器发送SYNC命令。
收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令。
当主服务器的BGSAVE命令执行完毕,主服务器将生成的RDB文件发送给从服务器,从服务器接收并加载这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令是的数据库状态。
主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器当前所处的状态。
部分重同步的实现
主服务器和从服务器都会维护一个复制偏移量,主要是用户对比复制的执行结果。例如主从服务器的复制偏移量均为1000,当主服务器完成了3个写命令后,主服务器偏移量为1003,这时候将3个命令给从服务器执行,从服务器执行完毕,复制偏移量也为1003。
如果主从服务器的数据是一致的,那么他们的偏移量也是一致的。
配置主从复制:
安装redis
[aaa@qq.com ~]# ls
4.0 anaconda-ks.cfg redis-5.0.3.tar.gz
[aaa@qq.com ~]# tar zxf redis-5.0.3.tar.gz
[aaa@qq.com ~]# cd redis-5.0.3
[aaa@qq.com redis-5.0.3]# ls
00-RELEASENOTES deps README.md runtest-sentinel utils
BUGS INSTALL redis.conf sentinel.conf
CONTRIBUTING Makefile runtest src
COPYING MANIFESTO runtest-cluster tests
[aaa@qq.com redis-5.0.3]# yum install gcc -y
[aaa@qq.com redis-5.0.3]# make && make install
[aaa@qq.com redis-5.0.3]# cd utils/
[aaa@qq.com utils]# ls
build-static-symbols.tcl hashtable redis_init_script.tpl
cluster_fail_time.tcl hyperloglog redis-sha1.rb
corrupt_rdb.c install_server.sh releasetools
create-cluster lru speed-regression.tcl
generate-command-help.rb redis-copy.rb whatisdoing.sh
graphs redis_init_script
[aaa@qq.com utils]# ./install_server.sh
配置redis:
server1
[aaa@qq.com utils]# vim /etc/redis/6379.conf
70 bind 0.0.0.0
server2
[aaa@qq.com utils]# cd /etc/redis/
[aaa@qq.com redis]# vim 6379.conf
70 bind 0.0.0.0
288 slaveof 172.25.76.1 6379
server3
[aaa@qq.com utils]# vim /etc/redis/6379.conf
70 bind 0.0.0.0
288 slaveof 172.25.76.1 6379
重启redis服务
[aaa@qq.com utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[aaa@qq.com redis]# /etc/init.d/redis_6379 restart
[aaa@qq.com utils]# /etc/init.d/redis_6379 restart
在server1中建立一个字符串
[aaa@qq.com utils]# redis-cli
127.0.0.1:6379> set name chen
OK
在server2中查看
[aaa@qq.com redis]# redis-cli
127.0.0.1:6379> get name
"chen"
哨兵机制
Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
配置哨兵机制
[aaa@qq.com redis-5.0.3]# cp sentinel.conf /etc/redis/
[aaa@qq.com redis]# vim sentinel.conf
17 protected-mode no ##关闭保护模式
84 sentinel monitor mymaster 172.25.76.1 6379 2 ##指定要监控的master 设定需要的sentinel票数
113 sentinel down-after-milliseconds mymaster 10000 ##设定主服务器连接不上多久后认为其宕机
[aaa@qq.com redis]# scp sentinel.conf aaa@qq.com:/etc/redis/
[aaa@qq.com redis]# scp sentinel.conf aaa@qq.com:/etc/redis/
[aaa@qq.com redis]# redis-cli
127.0.0.1:6379> info
[aaa@qq.com redis]# redis-cli
127.0.0.1:6379> info
在server1 到3 都开启哨兵
[aaa@qq.com redis-5.0.3]# redis-server /etc/redis/sentinel.conf --sentinel
关闭server1 redis
[aaa@qq.com redis]# redis-cli
127.0.0.1:6379> shutdown
在监控主机查看
在server2上查看
info