概念
环境配置
基本配置
- slaveof 主库ip 主库端口 # 配置主从
- Info replication # 查看信息
修改配置文件!
1、拷贝多个redis.conf 文件
上面都配置完毕后,3个服务通过3个不同的配置文件开启,我们的准备环境就OK 了!
一主二从
一主二仆
清理容器(可选)docker rm -f $(docker ps -aq)
启动主服务器
# --net=host 容器直接使用宿主机的端口,不需要做端口映射
docker run -d --name redis6379 --net=host --restart=always redis# 进入容器,运行redis客户端
docker exec -it redis6379 redis-cli# 查看集群信息,默认是主服务器
> info replication
启动两个从服务器# 启动redis6380容器,作为 redis6379 的从服务器启动
# --port 和 --slaveof 是 redis-server 命令的参数
docker run -d --name redis6380 --net=host --restart=always redis \
redis-server --port 6380 --slaveof 192.168.64.150 6379# 启动redis6381容器,作为 redis6379 的从服务器启动
docker run -d --name redis6381 --net=host --restart=always redis \
redis-server --port 6381 --slaveof 192.168.64.150 6379# 查看三个 redis 服务的角色
docker exec -it redis6379 redis-cli
> info replicationdocker exec -it redis6380 redis-cli -p 6380
> info replicationdocker exec -it redis6381 redis-cli -p 6381
> info replication
1、环境初始化
默认三个都是Master 主节点
2、配置为一个Master 两个Slave
3、在主机设置值,在从机都可以取到!从机不能写值!
层层链路
测试:6379 设置值以后 6380 和 6381 都可以获取到!OK!
谋朝篡位
主机再回来,也只是一个光杆司令了,从机为了正常使用跑到了新的主机上!
复制原理
哨兵模式
概述
- 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
- 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
配置测试
- sentinel monitor 被监控主机名字 127.0.0.1 6379 1
- 上面最后一个数字1,表示主机挂掉后slave投票看让谁接替成为主机,得票数多少后成为主机
- Redis-sentinel /myredis/sentinel.conf
- 上述目录依照各自的实际情况配置,可能目录不同
哨兵模式的优缺点
- 哨兵集群模式是基于主从模式的,所有主从的优点,哨兵模式同样具有。
- 主从可以切换,故障可以转移,系统可用性更好。
- 哨兵模式是主从模式的升级,系统更健壮,可用性更高。
- Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
- 实现哨兵模式的配置也不简单,甚至可以说有些繁琐
哨兵配置说明
# Example sentinel.conf# 哨兵 sentinel 实例运行的端口 默认 26379port 26379# 哨兵 sentinel 的工作目录dir /tmp# 哨兵 sentinel 监控的 redis 主节点的 ip port# master-name 可以自己命名的主节点名字 只能由字母 A-z 、数字 0-9 、这三个字符 ".-_" 组成。# quorum 配置多少个 sentinel 哨兵统一认为 master 主节点失联 那么这时客观上认为主节点失联了# sentinel monitor <master-name> <ip> <redis-port> <quorum>sentinel monitor mymaster 127 .0.0.1 6379 2# 当在 Redis 实例中开启了 requirepass foobared 授权密码 这样所有连接 Redis 实例的客户端都要提供密码# 设置哨兵 sentinel 连接主从的密码 注意必须为主从设置一样的验证密码# sentinel auth-pass <master-name> <password>sentinel auth-pass mymaster MySUPER--secret-0123passw0rd# 指定多少毫秒之后 主节点没有应答哨兵 sentinel 此时 哨兵主观上认为主节点下线 默认 30 秒# sentinel down-after-milliseconds <master-name> <milliseconds>sentinel down-after-milliseconds mymaster 30000# 这个配置项指定了在发生 failover 主备切换时最多可以有多少个 slave 同时对新的 master 进行 同步,这个数字越小,完成 failover 所需的时间就越长,但是如果这个数字越大,就意味着越 多的 slave 因为 replication 而不可用。可以通过将这个值设为 1 来保证每次只有一个 slave 处于不能处理命令请求的状态。# sentinel parallel-syncs <master-name> <numslaves>sentinel parallel-syncs mymaster 1# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:#1. 同一个 sentinel 对同一个 master 两次 failover 之间的间隔时间。#2. 当一个 slave 从一个错误的 master 那里同步数据开始计算时间。直到 slave 被纠正为向正确的master 那里同步数据时。#3. 当想要取消一个正在进行的 failover 所需要的时间。#4. 当进行 failover 时,配置所有 slaves 指向新的 master 所需的最大时间。不过,即使过了这个超时, slaves 依然会被正确配置为指向 master ,但是就不按 parallel-syncs 所配置的规则来了# 默认三分钟# sentinel failover-timeout <master-name> <milliseconds>sentinel failover-timeout mymaster 180000# SCRIPTS EXECUTION# 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。# 对于脚本的运行结果有以下规则:# 若脚本执行后返回 1 ,那么该脚本稍后将会被再次执行,重复次数目前默认为 10# 若脚本执行后返回 2 ,或者比 2 更高的一个返回值,脚本将不会重复执行。# 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为 1 时的行为相同。# 一个脚本的最大执行时间为 60s ,如果超过这个时间,脚本将会被一个 SIGKILL 信号终止,之后重新执行。# 通知型脚本 : 当 sentinel 有任何警告级别的事件发生时(比如说 redis 实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件, SMS 等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentinel.conf 配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则 sentinel 无法正常启动成功。# 通知脚本# sentinel notification-script <master-name> <script-path>sentinel notification-script mymaster /var/redis/notify.sh# 客户端重新配置主节点参数脚本# 当一个 master 由于 failover 而发生改变时,这个脚本将会被调用,通知相关的客户端关于 master地址已经发生改变的信息。# 以下参数将会在调用脚本时传给脚本 :# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port># 目前 <state> 总是 “failover”,# <role> 是 “leader” 或者 “observer” 中的一个。# 参数 from-ip, from-port, to-ip, to-port 是用来和旧的 master 和新的 master( 即旧的slave) 通信的# 这个脚本应该是通用的,能被多次调用,不是针对性的。# sentinel client-reconfig-script <master-name> <script-path>sentinel client-reconfig-script mymaster /var/redis/reconfig.sh