redis-哨兵模式以及整合项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yueloveme/article/details/87923680

大家推荐个靠谱的公众号程序员探索之路,大家一起加油 https://img-blog.csdnimg.cn/20181129224604602.png

Rdis主从配置

修改配置文件实现过程

Bind ip(127.0.0.1)允许来自哪里的ip访问redis

创建两个redis ip和port分别是 127.0.0.1:6380  127.0.0.1:6381

主节点: 127.0.0.1:6379

Slave1    127.0.0.1:6380

Slave2     127.0.0.1:6381

在slave1的redis.windows.conf配置文件修改 slaveof(这个参数 主节点的ip和端口)

在slave2的redis.windows.conf配置文件修改 slaveof(这个参数 主节点的ip和端口)

在slave1和slave2的masterauth参数后面加上主节点的密码(如果主节点配置的话)

自动实现主从切换配置文件实现:

创建sentinel.conf文件

port 26379

 

# 哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。

sentinel monitor mymaster 127.0.0.1 6379 1

 

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。   

sentinel down-after-milliseconds mymaster 5000

 

# 指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

sentinel parallel-syncs mymaster 1

 

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。

sentinel failover-timeout mymaster 15000

 

# 设置master和slaves验证密码

sentinel auth-pass mymaster 123456

启动命令redis-server.exe sentinel.conf –sentinel

从哨兵查看信息

redis-cli -p 26379

sentinel master mymaster//查看master的状态

SENTINEL slaves mymaster //查看salves的状态

SENTINEL sentinels mymaster //查看哨兵的状态

SENTINEL get-master-addr-by-name mymaster//获取当前master的地址

info sentinel//查看哨兵信息

 

redis-cli -p 26379

127.0.0.1:26379> sentinel master mymaster

 1) "name"

 2) "mymaster"

 3) "ip"

 4) "127.0.0.1"

 5) "port"

 6) "6379"

 7) "runid"

 8) "d68ee53701a9d09559cdffae6d54a54886d3fb9d"

 9) "flags"

10) "master"

11) "link-pending-commands"

12) "0"

13) "link-refcount"

14) "1"

15) "last-ping-sent"

16) "0"

17) "last-ok-ping-reply"

18) "41"

19) "last-ping-reply"

20) "41"

21) "down-after-milliseconds"

22) "5000"

23) "info-refresh"

24) "2234"

25) "role-reported"

26) "master"

27) "role-reported-time"

28) "173074"

29) "config-epoch"

30) "0"

31) "num-slaves"

32) "2"

33) "num-other-sentinels"

34) "0"

35) "quorum"

36) "2"

37) "failover-timeout"

38) "15000"

39) "parallel-syncs"

40) "1"

127.0.0.1:26379> sentinel slaves mymaster

1)  1) "name"

    2) "127.0.0.1:6380"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "6380"

    7) "runid"

    8) "c2498e926d568c1905aa8c50e92912cb10df6e16"

    9) "flags"

   10) "slave"

   11) "link-pending-commands"

   12) "0"

   13) "link-refcount"

   14) "1"

   15) "last-ping-sent"

   16) "0"

   17) "last-ok-ping-reply"

   18) "892"

   19) "last-ping-reply"

   20) "892"

   21) "down-after-milliseconds"

   22) "5000"

   23) "info-refresh"

   24) "5340"

   25) "role-reported"

   26) "slave"

   27) "role-reported-time"

   28) "196275"

   29) "master-link-down-time"

   30) "0"

   31) "master-link-status"

   32) "ok"

   33) "master-host"

   34) "127.0.0.1"

   35) "master-port"

   36) "6379"

   37) "slave-priority"

   38) "100"

   39) "slave-repl-offset"

   40) "14647"

2)  1) "name"

    2) "127.0.0.1:6381"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "6381"

    7) "runid"

    8) "820a290f1c9b4bfac7d608d4a45bf001db76ef1e"

    9) "flags"

   10) "slave"

   11) "link-pending-commands"

   12) "0"

   13) "link-refcount"

   14) "1"

   15) "last-ping-sent"

   16) "0"

   17) "last-ok-ping-reply"

   18) "892"

   19) "last-ping-reply"

   20) "892"

   21) "down-after-milliseconds"

   22) "5000"

   23) "info-refresh"

   24) "5340"

   25) "role-reported"

   26) "slave"

   27) "role-reported-time"

   28) "196276"

   29) "master-link-down-time"

   30) "0"

   31) "master-link-status"

   32) "ok"

   33) "master-host"

   34) "127.0.0.1"

   35) "master-port"

   36) "6379"

   37) "slave-priority"

   38) "100"

   39) "slave-repl-offset"

   40) "14647"

127.0.0.1:26379> sentinel get-master-addr-by-name mymaster

1) "127.0.0.1"

2) "6379"

127.0.0.1:26379> info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=1

java整合哨兵模式:

配置文件

spring:
  redis:
    database:
0
   
host: 127.0.0.1
    
port: 6379
   
password: 123456
   
jedis:
      pool:
        max-active:
8
       
min-idle: 0
       
max-idle: 8
       
max-wait: 50
   
timeout: 1000  //连接超时时间 很有用
    sentinel:
      master:
mymaster
     
nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381

主从代码列子:一主二从三哨兵

https://github.com/ZhZGod/redis-study.git

Rdis主从配置

修改配置文件实现过程

Bind ip(127.0.0.1)允许来自哪里的ip访问redis

创建两个redis ip和port分别是 127.0.0.1:6380  127.0.0.1:6381

主节点: 127.0.0.1:6379

Slave1    127.0.0.1:6380

Slave2     127.0.0.1:6381

在slave1的redis.windows.conf配置文件修改 slaveof(这个参数 主节点的ip和端口)

在slave2的redis.windows.conf配置文件修改 slaveof(这个参数 主节点的ip和端口)

在slave1和slave2的masterauth参数后面加上主节点的密码(如果主节点配置的话)

自动实现主从切换配置文件实现:

创建sentinel.conf文件

port 26379

 

# 哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。

sentinel monitor mymaster 127.0.0.1 6379 1

 

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。   

sentinel down-after-milliseconds mymaster 5000

 

# 指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

sentinel parallel-syncs mymaster 1

 

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。

sentinel failover-timeout mymaster 15000

 

# 设置master和slaves验证密码

sentinel auth-pass mymaster 123456

启动命令redis-server.exe sentinel.conf –sentinel

从哨兵查看信息

redis-cli -p 26379

sentinel master mymaster//查看master的状态

SENTINEL slaves mymaster //查看salves的状态

SENTINEL sentinels mymaster //查看哨兵的状态

SENTINEL get-master-addr-by-name mymaster//获取当前master的地址

info sentinel//查看哨兵信息

 

redis-cli -p 26379

127.0.0.1:26379> sentinel master mymaster

 1) "name"

 2) "mymaster"

 3) "ip"

 4) "127.0.0.1"

 5) "port"

 6) "6379"

 7) "runid"

 8) "d68ee53701a9d09559cdffae6d54a54886d3fb9d"

 9) "flags"

10) "master"

11) "link-pending-commands"

12) "0"

13) "link-refcount"

14) "1"

15) "last-ping-sent"

16) "0"

17) "last-ok-ping-reply"

18) "41"

19) "last-ping-reply"

20) "41"

21) "down-after-milliseconds"

22) "5000"

23) "info-refresh"

24) "2234"

25) "role-reported"

26) "master"

27) "role-reported-time"

28) "173074"

29) "config-epoch"

30) "0"

31) "num-slaves"

32) "2"

33) "num-other-sentinels"

34) "0"

35) "quorum"

36) "2"

37) "failover-timeout"

38) "15000"

39) "parallel-syncs"

40) "1"

127.0.0.1:26379> sentinel slaves mymaster

1)  1) "name"

    2) "127.0.0.1:6380"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "6380"

    7) "runid"

    8) "c2498e926d568c1905aa8c50e92912cb10df6e16"

    9) "flags"

   10) "slave"

   11) "link-pending-commands"

   12) "0"

   13) "link-refcount"

   14) "1"

   15) "last-ping-sent"

   16) "0"

   17) "last-ok-ping-reply"

   18) "892"

   19) "last-ping-reply"

   20) "892"

   21) "down-after-milliseconds"

   22) "5000"

   23) "info-refresh"

   24) "5340"

   25) "role-reported"

   26) "slave"

   27) "role-reported-time"

   28) "196275"

   29) "master-link-down-time"

   30) "0"

   31) "master-link-status"

   32) "ok"

   33) "master-host"

   34) "127.0.0.1"

   35) "master-port"

   36) "6379"

   37) "slave-priority"

   38) "100"

   39) "slave-repl-offset"

   40) "14647"

2)  1) "name"

    2) "127.0.0.1:6381"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "6381"

    7) "runid"

    8) "820a290f1c9b4bfac7d608d4a45bf001db76ef1e"

    9) "flags"

   10) "slave"

   11) "link-pending-commands"

   12) "0"

   13) "link-refcount"

   14) "1"

   15) "last-ping-sent"

   16) "0"

   17) "last-ok-ping-reply"

   18) "892"

   19) "last-ping-reply"

   20) "892"

   21) "down-after-milliseconds"

   22) "5000"

   23) "info-refresh"

   24) "5340"

   25) "role-reported"

   26) "slave"

   27) "role-reported-time"

   28) "196276"

   29) "master-link-down-time"

   30) "0"

   31) "master-link-status"

   32) "ok"

   33) "master-host"

   34) "127.0.0.1"

   35) "master-port"

   36) "6379"

   37) "slave-priority"

   38) "100"

   39) "slave-repl-offset"

   40) "14647"

127.0.0.1:26379> sentinel get-master-addr-by-name mymaster

1) "127.0.0.1"

2) "6379"

127.0.0.1:26379> info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=1

java整合哨兵模式:

配置文件

spring:
  redis:
    database:
0
   
host: 127.0.0.1
    
port: 6379
   
password: 123456
   
jedis:
      pool:
        max-active:
8
       
min-idle: 0
       
max-idle: 8
       
max-wait: 50
   
timeout: 1000  //连接超时时间 很有用
    sentinel:
      master:
mymaster
     
nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381

主从代码列子:一主二从三哨兵

https://github.com/ZhZGod/redis-study.git

 

Sentinel 总结

一、Sentinel的作用:

A、Master 状态监测

B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave 

C、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换 

二、Sentinel的工作方式:

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令 
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。 
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。 
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令 
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

猜你喜欢

转载自blog.csdn.net/yueloveme/article/details/87923680