欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

Redis主从复制和哨兵机制

[aaa@qq.com redis]# redis-cli 
127.0.0.1:6379> info

Redis主从复制和哨兵机制

在server1 到3 都开启哨兵

[aaa@qq.com redis-5.0.3]# redis-server  /etc/redis/sentinel.conf  --sentinel 

Redis主从复制和哨兵机制
Redis主从复制和哨兵机制

关闭server1 redis

[aaa@qq.com redis]# redis-cli 
127.0.0.1:6379> shutdown

在监控主机查看
Redis主从复制和哨兵机制

在server2上查看
info
Redis主从复制和哨兵机制