1.作用
1)防止单点故障(一台redis宕机,整个redis不能用)
2)可以进行读写分离(一台redis主机进行写操作,其他机子进行读操作),提高使用效率
1.2实现
1)规划图
克隆redis,修改IP,修改主机名称,使用xshell连接
修改主机名称:
vim /etc/hostname
修改网卡:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
:15 修改IP地址 192.168.XXX.31 (第15行)
重新启动:
reboot
使用xshell进行连接
主从配置
在redis操作
拷贝:cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/master.conf
vim /usr/redis/bin/master.conf
:69 bind 192.168.206.41 绑定自己的IP
:92 port 6666 实例端口号
:136 daemonize yes 守护方式运行
在 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.206.42 绑定自己的IP
:92 port 7777 实例端口号
:136 daemonize yes 守护方式运行
slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点
在 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.206.43 绑定自己的IP
:92 port 8888 实例端口号
:136 daemonize yes 守护方式运行
slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点
3)启动测试:
redis1启动:
/usr/redis/bin/redis-server /usr/redis/bin/master.conf
/usr/redis/bin/redis-cli -h 192.168.206.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.206.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.206.43 -p 8888
set bbb 222 错误 slave不可以写
在 all session 输入 keys * 发现 三台 redis上都有bbb 说明主从同步成功
info 显示当前redis实例运行情况
info replication 显示主从角色信息
info keyspace 显示key分布情况
1.2.1 特点
master /slave 角色
master/slave 数据是同步
降低了master读压力 由从机分担
1.2.2 缺点
无法真正高可用(master一旦宕机,整个集群就无法进行写操作)
所有的写操作都是master进行,写操作无法负载均衡
2.1 作用
哨兵模式主要用来解决主从模式的无法高可用的缺点,当主机master宕机时,没有写节点的问题。当master宕机后,会从slave中选举一台做主节点,从而达到高可用的目的。
2.2 实现
以主从为基础
2) 具体配置:
在3台redis 操作:
cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel1.conf
cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel2.conf
cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel3.conf
修改:
vim /usr/redis/bin/sentinel1.conf
vim /usr/redis/bin/sentinel2.conf
vim /usr/redis/bin/sentinel3.conf
#关闭保护模式 当开启保护模式的时候默认只能本机连
protected-mode no #17
#哨兵端口
port 26666 #21 port 27777 port 28888 三个分别是 26666 27777 28888
#添加守护进程模式
daemonize yes #26
#添加指明日志文件名
logfile "./temp.log" #36
#修改工作目录
dir "/tmp" #65
#哨兵监控的master名称可以随便起,ip和端口固定 quorum 当哨兵是集群时,有多少个哨兵认为master失效(客观下线),master才算失效。 防止脑裂 配置计算最好是 哨兵总数量/2+1
sentinel monitor mymaster 192.168.206.41 6666 2 #84
#设置master和slaves验证密码
sentinel auth-pass mymaster 123456 #103
#master(默认30秒)不能使用后标记为主观down状态。
sentinel down-after-milliseconds mymaster 30000 #113
哨兵是以主从为基础,主从一定要先启动,并且保证主从正常
分别在3台服务器上运行
/usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel1.conf
/usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel2.conf
/usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel3.conf
查看哨兵进程:
在allsession中输入:
ps -ef |grep redis|grep -v grep
演示自动故障切换:
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 执行写命令:
192.168.206.43:8888> set aaa 111
OK
192.168.206.43:8888> set bbb 222
OK
192.168.206.43:8888> set ccc 333
e. 让redis1恢复正常:
/usr/redis/bin/redis-server /usr/redis/bin/master.conf
/usr/redis/bin/redis-cli -h 192.168.206.41 -p 6666
在allsession中输入:
info replication 发现redis1 自动变为redis3从节点
keys * 发现redis1在宕机期间 redis3的写入内容,依然可以同步(遵循了主从同步原理)
停止哨兵可以使用kill -9 命令
1、保证高可用(除了切换主从的一瞬间,集群是高可用)
2、哨兵监控各个节点
3、自动故障迁移
主从模式,切换需要时间,切换期间,不能对外提供服务
没有解决 master 写的压力