跳至主要內容

Redis高并发应用

知识库集成配置缓存ReidsRedis大约 3 分钟

主从配置

vi redis.conf
# 设置端口
port 6380
# replicaof <masterip> <masterport>
# 表示当前【从服务器】对应的【主服务器】的IP是192.168.10.135,端口是6379。
# 4.0之前只能slaveof 4.0之后默认replicaof,slaveof都起作用
slaveof 127.0.0.1 6379
replicaof 127.0.0.1 6379
# 主节点挂掉,选举主节点的权重,0标识不选择,越大权重越大
replica-priority 100

查看节点主从信息

[root@192 bin]# ./redis-cli -p 6379 info|grep role
role:master
[root@192 bin]# ./redis-cli -p 6380 info|grep role
role:slave

哨兵

中文官网open in new windowhttp://www.redis.cn/topics/sentinel.htmlopen in new window

vi sentinel.conf
# 设置端口
port 26379
# 是否守护进程启动
daemonize yes
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 只配置主节点,通过主节点来获取从节点的信息。
# ip:最好是客户端可以访问到的ip
# quorum:至少多少个哨兵要一致同意,master进程挂掉了,或者slave进程挂掉了,或者要启动一个故障转移操作。
sentinel monitor mymaster 127.0.0.1 6379 2
# sentinel down-after-milliseconds <master-name> <milliseconds>
# 超过多少毫秒跟一个redis实例断了连接(ping不通),哨兵就可能认为这个redis实例挂了
sentinel down-after-milliseconds mymaster 30000
# sentinel parallel-syncs <master-name> <numreplicas>
# 主节点故障迁移以后,从节点一批几个开始迁移
sentinel parallel-syncs mymaster 1
# sentinel failover-timeout <master-name> <milliseconds>
# 故障迁移,超时时间,超过换一个节点。
sentinel failover-timeout mymaster 180000
sentinel monitor <master-name> <ip> <redis-port> <quorum>
#告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效

sentinel auth-pass <master-name> <password>
#设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。

sentinel down-after-milliseconds <master-name> <milliseconds>
#这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒

sentinel parallel-syncs <master-name> <numslaves> 
#这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。

sentinel failover-timeout <master-name> <milliseconds>
#failover-timeout 可以用在以下这些方面:    
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。   
#3.当想要取消一个正在进行的failover所需要的时间。   
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。

在从节点中选择新的主节点

  1. 过滤掉主观下线的节点
  2. 选择 slave-priority/ replica-priority 最高的节点,(replica-priority 0 的不选择)如果由则返回没有就继续选择
  3. 选择出复制偏移量最大的系节点,因为复制偏移量越大则数据复制的越完整,如果由就返回了,没有就继续
  4. 选择 run_id 最小的节点

更新主从状态

通过 slaveof no one 命令,让选出来的从节点成为主节点;并通过 slaveof 命令让其他节点成为其从节 点。

当其回复正常时,将已下线的主节点设置成新的主节点的从节点,复制新的主节点,变成新的主节点的从节点