Redis的主从复制与故障切换

redis简介:

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。
它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,
可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

安装包:

redis-5.0.3.tar.gz

点击此处即可下载redis

实验环境:

server1  172.25.66.1    master
server2  172.25.66.2    slave
server3  172.25.66.3    slave

1.redis主从复制

配置主结点:(server1)

1.下载redis并解压

#1.在官网上下载redis
[root@server1 ~]# ls
redis-5.0.3.tar.gz
#2.解压
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz 
[root@server1 ~]# ls
redis-5.0.3  redis-5.0.3.tar.gz

2.源码编译

[root@server1 ~]# cd redis-5.0.3
#1.安装依赖包
[root@server1 redis-5.0.3]# yum install -y gcc
#2.编译与安装
[root@server1 redis-5.0.3]# make && make install

在这里插入图片描述
3.执行脚本启动redis

[root@server1 redis-5.0.3]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-5.0.3]# cd utils/
#直接回车即可
[root@server1 utils]# ./install_server.sh 

在这里插入图片描述

#查看端口
[root@server1 utils]# netstat -antlp

在这里插入图片描述
4.更改配置文件

[root@server1 utils]# vim /etc/redis/6379.conf 
#####################
bind 0.0.0.0                #监听所有地址

为了避免数据丢失,一般将以下两个参数开启:
min-replics-to-write 1      #至少1个slave可写
min-replicas-max-lag 10     #slave最长响应时间为10秒;即在从服务器的数量少于1个,或者从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令

在这里插入图片描述
在这里插入图片描述

5.重启redis

[root@server1 ~]# systemctl restart redis_6379

配置从结点:

在server2上:

1.下载并解压redis

[root@server2 ~]# ls
redis-5.0.3.tar.gz
[root@server2 ~]# tar zxf redis-5.0.3.tar.gz 
[root@server2 ~]# ls
redis-5.0.3  redis-5.0.3.tar.gz

2.源码编译

[root@server2 ~]# cd redis-5.0.3
[root@server2 redis-5.0.3]# yum install -y gcc
[root@server2 redis-5.0.3]# make && make install

在这里插入图片描述
3.执行脚本启动redis

[root@server2 redis-5.0.3]# cd utils/
[root@server2 utils]# ./install_server.sh 

在这里插入图片描述

#查看端口
[root@server2 utils]#  netstat -antlp

在这里插入图片描述
4.更改配置文件

[root@server2 utils]#  vim /etc/redis/6379.conf 
#####################
bind 0.0.0.0                  #监听所有地址
slaveof 172.25.66.1 6379      #指向master的6379端口(redis的端口为6379)

min-replics-to-write 1      
min-replicas-max-lag 10 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.重启redis

[root@server2~]# systemctl restart redis_6379

在server3上:(操作完全同server2结点)

1.下载并解压redis

[root@server3 ~]# ls
redis-5.0.3.tar.gz
[root@server3 ~]# tar zxf redis-5.0.3.tar.gz 
[root@server3 ~]# ls
redis-5.0.3  redis-5.0.3.tar.gz

2.源码编译

[root@server3 ~]# cd redis-5.0.3
[root@server3 redis-5.0.3]# yum install -y gcc
[root@server3 redis-5.0.3]# make && make install

在这里插入图片描述
3.执行脚本启动redis

[root@server3 utils]# ./install_server.sh 

在这里插入图片描述
4.更改配置文件

[root@server3 utils]# vim /etc/redis/6379.conf 
#####################
bind 0.0.0.0               #监听所有地址
slaveof 172.25.66.1 6379   #指向master的6379端口(写在哪一行均可)

min-replics-to-write 1      
min-replicas-max-lag 10 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.重启redis

[root@server3 ~]# systemctl restart redis_6379

测试:

在master端插入数据

[root@server1 ~]# redis-cli 
127.0.0.1:6379> set name westos
OK

在这里插入图片描述
在slave端查看数据,发现数据同步

[root@server2 ~]# redis-cli 
127.0.0.1:6379> get name
"westos"

在这里插入图片描述

[root@server3 ~]# redis-cli 
127.0.0.1:6379> get name
"westos"

在这里插入图片描述
redis的slave默认只读:

[root@server1 ~]# redis-cli 
127.0.0.1:6379> set name redhat
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> exit

在这里插入图片描述

2.redis的自动故障切换

1.更改配置文件

[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf  sentinel.conf
[root@server1 redis]# vim sentinel.conf 
#####################
protected-mode no                                  #开启该参数后,redis只会本地进行访问,拒绝外部访问。最好关闭,即设置为no。
sentinel monitor mymaster 172.25.66.1 6379 2       #指示Sentinel去监视一个名为mymaster的主服务器,这个主服务器的 IP 地址为 172.25.66.1 ,端口号为 6379 ,而将这个主服务器判断为失效至少需要2个Sentinel同意(只要同意 Sentinel的数量不达标,自动故障迁移就不会执行)。
sentinel down-after-milliseconds mymaster 10000    #指定了Sentinel认为服务器已经断线所需的毫秒数;默认为30秒,如果你想快速切换,可以设小一点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@server1 redis]# scp sentinel.conf server2:/etc/redis
[root@server1 redis]# scp sentinel.conf server3:/etc/redis

2.启动sentinel

#启动sentinel,一直连接不断开
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述
在这里插入图片描述

#启动sentinel,一直连接不断开
[root@server2 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述

#启动sentinel,一直连接不断开
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述
测试:

再连接一个server1结点,查看结点信息

[root@server1 ~]# redis-cli 
#查看信息;发现此时master是server1结点,slave是server2和server3结点
127.0.0.1:6379> info

在这里插入图片描述
模拟server1结点(master)宕机:

[root@server1 ~]# redis-cli
127.0.0.1:6379> shutdown

监控发现,当server1结点(master)宕机后,server3接管master

[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述
远程连接server3结点,查看结点信息,发现确实是server3结点切换为master,此时只有一个slave,即server2结点。

[root@server1 ~]# redis-cli -h 172.25.66.3
#查看信息
127.0.0.1:6379> info

在这里插入图片描述重新启动server1结点的redis:

[root@server1 ~]# systemctl start redis_6379
[root@server1 ~]# systemctl restart redis_6379
#状态必须为running视为开启成功
[root@server1 ~]# systemctl status redis_6379

在这里插入图片描述
发现此时server1结点切换为slave

[root@server1 ~]# redis-cli 
127.0.0.1:6379> info

在这里插入图片描述
此时查看配置文件,发现文件内容发生了变更

[root@server1 redis]# vim sentinel.conf 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值