- 订阅/发布消息图
- 测试
- 主从复制
- 环境配置
- 哨兵模式 自动选举老大的模式
- Example sentinel.conf
- 哨兵sentinel实例运行的端口 默认26379 如果有哨兵集群,还需要配置哨兵端口
- 哨兵sentinel的工作目录
- 哨兵sentinel监控的redis主节点的 ip port
- master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符”.-_”组成。
- quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
- sentinel monitor
- 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
- 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
- sentinel auth-pass
- 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
- sentinel down-after-milliseconds
- 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
- sentinel parallel-syncs
- 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
- 1. 同一个sentinel对同一个master两次failover之间的间隔时间。
- 2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
- 3.当想要取消一个正在进行的failover所需要的时间。
- 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
- 默认三分钟
- sentinel failover-timeout
- SCRIPTS EXECUTION
- 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
- 对于脚本的运行结果有以下规则:
- 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
- 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
- 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
- 一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
- 通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
- 通知脚本
- sentinel notification-script
- 客户端重新配置主节点参数脚本
- 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
- 以下参数将会在调用脚本时传给脚本:
- 目前
总是“failover”, 是“leader”或者“observer”中的一个。 - 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
- 这个脚本应该是通用的,能被多次调用,不是针对性的。
- sentinel client-reconfig-script
Redis 发布订阅 pub/sub 是一种消息通信模式:
发送者 pub 发送消息,订阅者 sub 接收消息
Redis 客户端可以订阅任意数量的频道
订阅/发布消息图
- 三个part
- 消息发送者
- 频道
- 消息订阅者
测试
127.0.0.1:6379> SUBSCRIBE addicated # 订阅一个频道 Reading messages… (press Ctrl-C to quit) 1) “subscribe” # 等待msg 2) “addicated” 3) (integer) 1 1) “message” 2) “addicated” 3) “hello” 1) “message” 2) “addicated” 3) “hello redis” —-上为进程1 ,订阅chnale addicted — 下为进程2 向 addicated chnale发送消息 127.0.0.1:6379> ping PONG 127.0.0.1:6379> PUBLISH addicated “hello” # 发布者向addicated频道发送消息 (integer) 1 127.0.0.1:6379> PUBLISH addicated hello redis (error) ERR wrong number of arguments for ‘publish’ command 127.0.0.1:6379> PUBLISH addicated “hello redis” (integer) 1 127.0.0.1:6379>
主从复制
- 概念,是指将一台redis服务器的数据,复制到其他的redis服务器,前者为主节点 master/leader,后者称为从节点 slave/follower
- 数据的复制是单向的,只能从主节点到从节点,master以写为主,slave以都为主
默认情况下每台redis服务器都是主节点,且一个主节点可以有多个从节点或者没有从节点,但是一个从节点只有一个主节点
作用
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据荣誉放手
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障修复,实际上是一种服务上的荣誉
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写redis数据时应用链接主节点,读redis数据时应用链接从节点)分担服务器负载,尤其是在写少读多的场景下,通过多个从急诶单分担读负载,可以大大提高redis服务器的并发亮
- 高可用基石:除了上述作用,主从复制还是烧饼和集群能够实施的基础,因此说主从复制是redis高可用的基础。
一般来说,redis用于工程项目中,只使用一台redis是万不可行的,原因如下:
- 从解构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大
- 从容量上,单个redis服务器内容容量优先,就算一台redis服务器内存容量为256g,也不能将所有内存都用于redis存储内存,一般来说单台redis最大使用内存不应该超过20g
- 电商网站上的商品,一般都是一次上传,无数次浏览,也是 多读少写
-
环境配置
info replication 查看当前配置信息
复制三个配置文件,分别修改对应信息
从机使用命令
- `slaveof host port # 进行认爸爸
最终配置结果。
真实的主从配置应该是在配置文件中就配置好的,这样是永久进行的
配置爸爸,还有密码
细节
主机可写,从机不可。主机中所有的信息和数据都会被从机保存
- 主机写入的数据在从机中可以查到,但是从机不能写入
- 没有设置哨兵的时候,主机断掉不会进行话重新选举master。且没有master节点的话相当于集群没有写操作只能都
- 上述情况如果主机恢复了,集群依然成立。
如果是使用命令行配置的主从,这时如果重启,
master接到命令,启动后台的存盘进程同时手机所有接收到的用于修改数据集命令,在后台执行进程完毕之后,==master将传送整个数据文件到slave,并完成一次完全同步
上一个M链接下一个S 此时依然可以完成主从复制
-
如果老大无了呢?
命令航模式 `slaveof no one
- 如果主机断开了链接,可以使用这个命令自己当爸爸,其他s可以手动连到新爸爸。
- 如果主机断开之后恢复了,但是已经有s当了爸爸,只能通过手动配置的方式重新配属 sm
哨兵模式 自动选举老大的模式
- redis从2.8版本开始提供了哨兵模式来进行选举。
- 可以后台监控主机是否故障,故障就根据投票数自动将一个主机从s转换成m
- 哨兵模式是一种特殊的模式,首先redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程会独立运行,其原理是通过发送命令
- 等待redis服务器相应,从监听运行的多个redis实例
- 但是哨兵down掉了呢?所以引出哨兵集群。
- 测试
- 当前情况是1M2S,之后进行哨兵添加
配置文件就是 sentinel.conf sentinel monitor myredis 127.0.0.1 8000 1 # 配置哨兵进程监听的m # 数字1 代表主机挂了slave投票让谁接替m票数最多的称为m 启动命令就是 redis-sentinel conf文件
- 架设M 崩了,然后观察 哨兵的进程log
- 可以看到将8002拉成了m,投票算法是随机的。
如果之前死掉的m回来了,服务重启恢复,在哨兵的监控之下,也只能当小弟
优点
哨兵集群 基于主从复制模式,所有的主从配置优点,哨兵模式都有
- 主从可以切换,故障可以转义,系统的可用性就更好
-
缺点
redis不好在线扩容,集群容量一旦到达上线,在线扩容就会十分麻烦
- 实现哨兵模式的配置其实很麻烦,里面有很多options
哨兵模式全配置
```javaExample sentinel.conf
哨兵sentinel实例运行的端口 默认26379 如果有哨兵集群,还需要配置哨兵端口
port 26379
哨兵sentinel的工作目录
dir /tmp
哨兵sentinel监控的redis主节点的 ip port
master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符”.-_”组成。
quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
sentinel auth-pass
sentinel auth-pass mymaster MySUPER—secret-0123passw0rd
指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds
sentinel down-after-milliseconds mymaster 30000
这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长, 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs
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
sentinel failover-timeout mymaster 180000
SCRIPTS EXECUTION
配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
对于脚本的运行结果有以下规则:
若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数, 一个是事件的类型, 一个是事件的描述。 如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
通知脚本
sentinel notification-script
sentinel notification-script mymaster /var/redis/notify.sh
客户端重新配置主节点参数脚本
当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
以下参数将会在调用脚本时传给脚本:
目前总是“failover”,
是“leader”或者“observer”中的一个。
参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
这个脚本应该是通用的,能被多次调用,不是针对性的。
sentinel client-reconfig-script
```