一、 redids主从模式(master,slave)
1.1 作用
- 防止单点故障(一台redis宕机,整个redis不能用)
- 可以进行读写分离(一台redis主机进行写操作,其他机子进行读操作),提高使用效率
1.2 实现
1.2.1 规划图
1.2.2 原理
- 从服务器连接主服务器,发送 PSYNC(同步) 命令;
- 主服务器接收到 PSYNC 命名后,开始fork子进程执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
- 主服务器 BGSAVE 执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
- 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
- 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
- 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
1.2.3 主从模式的优缺点
优点:1、master /slave 角色
2、master/slave 数据是同步
3、降低了master读压力 由从机分担
缺点: 无法真正高可用(master一旦宕机,整个集群就无法进行写操作),所有的写操作都 是master进行,写操作无法负载均衡。
1.2.4 具体配置
1、在redis01的基础上克隆redis2,redis3,修改IP,修改主机名称,使用xshell连接
2、修改网卡:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
: 15 修改IP地址 192.168.XXX.XXX
3、修改主机名称:
vim /etc/hostname
4、重新启动:
reboot
5、使用xshell进行连接
1.2.5 主从配置:
1、在 redis1操作: 主
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/master.conf
vim /usr/redis/bin/master.conf
:69 bind 192.168.140.41 绑定IP
:92 port 6666 实例端口号
:136 daemonize yes 守护方式运行
2、在 redis2操作: 从
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/slave1.conf
vim /usr/redis/bin/slave1.conf
:69 bind 192.168.140.42 绑定IP
:92 port 7777 实例端口号
:136 daemonize yes 守护方式运行
G slaveof 192.168.140.41 6666 在文件末尾配置当前实例是谁的从节点
3、在 redis3操作: 从
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/slave2.conf
vim /usr/redis/bin/slave2.conf
:69 bind 192.168.140.43 绑定IP
:92 port 8888 实例端口号
:136 daemonize yes 守护方式运行
slaveof 192.168.140.41 6666 在文件末尾配置当前实例是谁的从节点
4、启动测试:
redis1启动: 主
/usr/redis/bin/redis-server /usr/redis/bin/master.conf
/usr/redis/bin/redis-cli -h 192.168.140.41 -p 6666
set bbb 222 成功
redis2启动: 从
/usr/redis/bin/redis-server /usr/redis/bin/slave1.conf
/usr/redis/bin/redis-cli -h 192.168.140.42 -p 7777
set bbb 222 错误 slave不可以写
redis3启动: 从
/usr/redis/bin/redis-server /usr/redis/bin/slave2.conf
/usr/redis/bin/redis-cli -h 192.168.140.43 -p 8888
set bbb 222 错误 slave不可以写
在 all session 输入 keys * 发现 三台 redis上都有bbb 说明主从同步成功
info 显示当前redis实例运行情况
info replication 显示主从角色信息
二、 哨兵模式
2.1 作用
哨兵模式主要用来解决主从模式的无法高可用的缺点,当主机master宕机时,没有写节点的问题。当master宕机后,会从slave中选举一台做主节点,从而达到高可用的目的。
2.2 实现
前提以主从为基础
2.2.1 规划图
2.2.2 原理图
2.2.3 哨兵模式的优缺点
优点: 1、保证高可用(除了切换主从的一瞬间,集群是高可用)
2、哨兵监控各个节点
3、自动故障迁移
缺点:主从模式,切换需要时间,切换期间,不能对外提供服务,没有解决 master 写的压力
2.2.4 具体配置
在3台redis 分别操作:
cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel.conf
分别修改
vim /usr/redis/bin/sentinel.conf
#关闭保护模式 当开启保护模式的时候默认只能本机连
:17 protected-mode no
#哨兵端口
:21 port 26666 port 27777 port 28888
#添加守护进程模式
:26 daemonize yes
#添加指明日志文件名
:36 logfile "./temp.log"
#修改工作目录
:65 dir "/tmp"
#哨兵监控的master名称可以随便起,ip和端口固定 quorum 当哨兵是集群时,有多少个哨兵认为master失效(客观下线),master才算失效。 防止脑裂 配置计算最好是 哨兵总数量/2+1
:84 sentinel monitor mymaster 192.168.140.41 6666 2
#设置master和slaves验证密码
:103 sentinel auth-pass mymaster 123passw0rd
#master(默认30秒)不能使用后标记为主观down状态。
:113 sentinel down-after-milliseconds mymaster 30000
2.2.5 启动哨兵,测试
哨兵是以主从为基础,主从一定要先启动,并且保证主从正常!!!
1、分别在3台服务器上运行
/usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel.conf
2、查看哨兵进程:
在allsession中输入:
ps -ef |grep redis|grep -v grep
3、演示自动故障切换:
a.使用客户端连接3台服务器:
/usr/redis/bin/redis-cli -h 192.168.170.31 -p 6666
/usr/redis/bin/redis-cli -h 192.168.170.32 -p 7777
/usr/redis/bin/redis-cli -h 192.168.170.33 -p 8888
b.在allsession中输入:
info replication 显示3台主机的主从状态 发现redis1是master 2和3是slave
c.让redis1的实例宕机:
shutdown 关闭服务器并保存数据
ps -ef |grep redis|grep -v grep
等大约30秒 其中两个哨兵都在30连不上,分别认为是主观下线,当3个哨兵相互沟通后,就确定客观下线。
d. 在allsession中输入:
info replication redis1宕机 发现redis3变为master redis2变为slave (master宕机后,在2、3随机选取一个作为master)
在新的master 执行写命令:
mset aaa 111 bbb 222 ccc 333
e. 让redis1恢复正常:
/usr/redis/bin/redis-server /usr/redis/bin/master.conf
/usr/redis/bin/redis-cli -h 192.168.140.41 -p 6666
在allsession中输入:
info replication 发现redis1 自动变为redis3从节点
keys * 发现redis1在宕机期间 redis3的写入内容,依然可以同步(遵循了主从同步原理)
宕机后从新启动的redis1由原来的master转变为slave redis3由之前的一个slave变为两个
重新启动的redis1 同步了redis3(master)书写的数据
停止哨兵可以使用kill -9 命令
先在allsession中输入:quit 退出 在执行 ps -ef |grep redis|grep -v grep
分别在redis1、redis2、redis3 使用 kill -9 xxx 杀死一个进程号
在让redis3 宕机,等待30秒 发现redis1或redis2不会转变为master 在让redis3启动 redis3依旧为master