主从复制
主从复制:这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。
主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从,从节点只能读不能写。read only。
不能做高可用的切换,主节点出现故障,没有替换的主节点,所有的写入操作都将失败。
主从复制工作模式
- 当配置完整之后,从节点启动,会向主节点发送一个sync command,请求同步连接
- master都会开启一个后台的进程将主节点的数据保存到数据文件中
- 主节点把数据同步给从节点从节点先把数据保存到硬盘,再加载到内存
主从复制实操
我们先定义主从复制架构如下
主服务器:mysql1,192.168.254.31
从服务器:tomcat1,192.168.254.21
从服务器:zw4,192.168.254.14
1、配置主服务器的主配置文件 /etc/redis/redis.conf,修改如下配置
- #关闭监听地址,表示同意任何
- #关闭保护模式
- #启用后台运行
- #启用AOF二进制日志文件
2、配置两台从服务器的主配置文件 /etc/redis/redis.conf,修改如下配置
- #指定从节点复制主节点192.168.254.31的数据
3、在主服务器上打开redis的日志文件,发现两台从服务器已经关联上了我们主服务器
这时候我们主从复制模式就成功了,两台从服务器会变成只读模式。
哨兵模式
在主从模式的基础之上,引入了故障的切换模式,一般涉及高可用模式的服务器的数量是奇数。
哨兵也是一个分布式的集群结构,对主从结构当中的每台服务器进行监控,当出现故障时,通过投
票的机制选择一个新的master。被选举出的新的master会将所有的主从节点重新连接到自己,从节
点会自动同步到主,自动变成只读模式。
哨兵模式工作模式
1、主从之间,互相有一个心跳的检测
2、当主节点宕机,从节点都会收到主的宕机的信息
3、两个从节点,自动进行投票,选择一个新的主
4、从节点会自动加入新主的主从模式。
哨兵模式实操
哨兵模式是在主从复制基础上,我们这边配置哨兵模式在上面主从复制的基础上进行。
首先在配置哨兵模式的第一次的时候,我们是人工的定义好主。这里定mysql1为主。
1、下载redis哨兵软件,apt -y install redis-sentinel
2、三台服务器都配置redis哨兵的主配置文件,/etc/redis/sentinel.conf,具体修改如下
- 人工定义主的服务器。2的含义:当主节点发送故障,必须要有两个从节点同意才能进行主节点的故障切换。
- 判断服务器服务器宕机的时间周期30000毫秒,30秒
- 故障节点的最大超时时间18000毫秒,18秒
3、重启服务后,在主服务器上打开redis哨兵的日志文件,发现两台从服务器已经关联上了我们主服务器
systemctl restart redis-sentinel.service
tail -f /var/log/redis/redis-sentinel.log
4、这时候我们关闭掉主服务器的redis服务,显示哨兵模式的主推过选举移到了从1上
我们进入到原来主的redis主配置文件里,发现在最下面添加了一行,显示192.168.254.21从1现在是主
这时候我们哨兵+主从模式就成功了,192.168.254.21变成了主服务器,另外两台服务器变成了只读模式。
集群
redis-cluster,集群是由多个节点组成,redis的数据分布在节点中,集群的当中每个节点又分主和从。主负责写,从负责读。
集群工作模式和槽位
0-16383个hash的槽位:
A:0-5460槽位
B:5461-10922槽位
C:10923-16383槽位
集群实操
我们先定义主从复制架构如下,集群需要至少6台服务器
服务器1:mysql1,192.168.254.31
服务器2:mysql2,192.168.254.32
服务器3:mysql3,192.168.254.33
服务器4:zw4,192.168.254.14
服务器5:zw5,192.168.254.15
服务器6:zw6,192.168.254.16
1、6台服务器都要配置redis主配置文件,具体修改如下
- #开启集群功能
- #集群的配置文件名称
- #设置集群的超时时间
改完配置后,重启redis服务
2、配置主从节点,具体操作如下,这里我们在192.168.254.31上面打的命令,后面6台服务器顺序无所谓,并不是谁在前就是主,随机的。
redis-cli -h 192.168.254.31 --cluster create 192.168.254.31:6379 192.168.254.32:6379 192.168.254.33:6379 192.168.254.14:6379 192.168.254.15:6379 192.168.254.16:6379 --cluster-replicas 1
- cluster-replicas 1:表示每个主节点对于一个从节点
这里显示,31、32、33是主节点,14、15、16是从节点;并且16384个hash槽位全部分配完成。
3、当我们发现在192.168.254.31上创建key键值会报错,注意这里并不是报错,还是提示
- 表示客户端尝试将这个数值保存到槽位号10357的位置,实际槽位在32这个主机
我们在31上创建的键,主从复制到15上面,证明主机31和15是主从关系。与其他两个主从互补影响。
可见:redis的集群模式,只是满足高可用,不能实现数据同步。
对数据同步要求很高的场景,选择redis的主从和哨兵模式。