第三阶段基础
时 间:2023年6月15日
参加人:全班人员
内 容:
Redis高可用集群
目录
一、redis主从复制原理介绍
主从复制特点:
主从复制实现原理:
二、主从复制实现操作(多机实例实现)
前提配置:
主库操作:
从库一操作:
从库二操作:
主库变化:
验 证:
三、redis哨兵操作
主 库:
从库一:
从库二:
验证结果:
一、redis主从复制原理介绍
主从模式下,Redis 分为主库(master)和从库(slaver)。主库负责读写,从库只负责读。当主库发生写事件后会将数据同步至从库。主库挂了不会重新选举主库,需等主库重启之后才能继续提供写服务,此间从库仍可提供读服务。
初始化阶段:从库启动后,向主库发送 Sync 命令,主库收到 Sync 命令后,生成 RDB 快照,并缓存生成快照期间的写命令,快照生成完后,发送至从库。从库收到后根据快照和缓存的写命令初始化数据库。
同步阶段:此阶段主库每次收到写命令都会将写命令发送至从库,从库执行写命令,保证数据一致性。
主从复制特点:
一个master可以有多个slave
一个slave只能有一个master
数据流向是单向的,master到slave
主从复制实现原理:
1.从库通过slaveof 192.168.1.107 6379命令连接主库,并发送sync给主库;
2.主库收到sync,立刻触发bgsave,后台保存RDB,发送给从库;
3.从库接受后会应用rdb快照;
4.主库会陆续将中间产生的新的操作,保存并发送给从库;
5.到此,我们主从复制就正常工作了;
6.之后,主库所有新的操作,都会以命令传播的方式自动发送给从库;
7.如果发生主从断开,从库数据没有任何破坏,重新连接后,从库发送psync给主库;
8.主库会将从库缺失的部分数据同步给从库应用,达到快速恢复主从的目的。
二、主从复制实现操作(多机实例实现)
在此演示的是yum安装方式,且对redis进行无密码设置
前提配置:
1、关闭防火墙
systemctl stop firewalld
iptables -F
setenforce 0
2、yum安装了redis
3、虚拟机网络模式为桥接模式
ip地址自动获取
主库操作:
步骤一:基础操作
ip地址为192.168.1.107
安装了redis
步骤二:配置redis主配置文件/etc/redis.conf
bind 0.0.0.0
daemonize yes
port 6379
pidfile /var/run/redis_6379.pid
步骤三:启动redis服务
redis-cli进入,查看当前主从复制信息
info replication
从库一操作:
步骤一:基础操作
ip地址为192.168.1.108
安装了redis
步骤二:配置redis主配置文件/etc/redis.conf
bind 0.0.0.0
daemonize yes
port 6379
pidfile /var/run/redis_6379.pid
步骤三:启动redis服务
redis-cli -p 6379 进入,查看当前主从复制信息
操作slaveof 192.168.1.107 6379请看变化!!!
从库二操作:
步骤一:基础操作
ip地址为192.168.1.14
安装了redis
步骤二:配置redis主配置文件/etc/redis.conf
bind 0.0.0.0
daemonize yes
port 6379
pidfile /var/run/redis_6379.pid
步骤三:启动redis服务
redis-cli -p 6379进入,查看当前主从复制信息
操作slaveof 192.168.1.107 6379请看变化!!!
主库变化:
验 证:
主库操作:有创建功能
set k1 HUYANG
get k1
从库一:无创建功能
get k1
从库二:无创建功能
get k1
三、redis哨兵操作
此处演示三台服务器都创建哨兵,均监视当前服务
步骤一:分别对主库、从库一、从库二的哨兵模式配置文件/etc/redis-sentinel.conf修改
主 库:
port 26379
daemonize yes
sentinel monitor mymaster 192.168.1.107 6379 2
其他操作默认不进行修改
从库一:
port 26379
daemonize yes
sentinel monitor mymaster 192.168.1.107 6379 2
其他操作默认不进行修改
从库二:
port 26379
daemonize yes
sentinel monitor mymaster 192.168.1.107 6379 2
其他操作默认不进行修改
步骤二:分别启动主库、从库一、从库二的哨兵模式
systemctl start redis-sentinel
或者
systemctl restart redis-sentinel
步骤三:停止主库的redis服务查看变化
sysrenctl stop redis
验证结果:
步骤一:停止主库的redis服务查看变化
sysrenctl stop redis
步骤二:查看从库一的变化
从库一最终结果:
从库二变化:
从库二最终结果:
总 结:
开启redis哨兵模式之后;
主库的redis服务停止;
从库一:原本是1.107的从库,模式时间(30秒)到了之后,复制信息发生变化,主从复制过程停止,哨兵模式随机选择一台主机为服务器,最终选择了1.108这台服务器,也就是原本的从库一变成了主库;
从库二:原本是1.107从库,模式时间(30秒)到了之后,复制信息发生变化,主从复制过程停止,待哨兵模式选择完谁当服务器之后,变成了1.108的从库。