大家推荐个靠谱的公众号程序员探索之路,公众号内点击网赚获取彩蛋,大家一起加油
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 的主观下线状态就会被移除。