Redis5.0.7 哨兵模集群搭建

1, 安装

Redis版本:5.0.7 安装省略,这里只需要安装一个软件,复制2分conf配置文件即可。

2. Redis主从复制配置

server1 master服务器配置:/etc/redis/6379.conf

bind 127.0.0.1
protected-mode yes
port 6379
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile “/usr/local/redis/log/redis.log”
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbchecksum yes
dbfilename dump.rdb
dir /opt/redis/redis-5.0.7/data/master
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 60
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename “appendonly.aof”
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events “”

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

从服务器1 配置:/etc/redis/6380.conf,大部分配置属性与6379.conf一致,区别在于端口和日志名字等。特别注意从服务器有replicaof属性。注意当主从切换时,redis会自动更新63xx.conf文件里的replicaof属性。
……

port 6380
# Generated by CONFIG REWRITE
replicaof 127.0.0.1 6379

从服务器2配置:/etc/redis/6381.conf

……

port 6381
# Generated by CONFIG REWRITE
replicaof 127.0.0.1 6379

3. 哨兵配置

哨兵一配置:/opt/redis/redis_centinel/sentinel1.conf

protected-mode yes
bind 127.0.0.1
port 8001
daemonize yes
pidfile “/var/run/redis-sentinel1.pid”
logfile “/opt/redis/redis_centinel/logs/centinel1/centinel1.log”
dir “/opt/redis/redis_centinel”
sentinel myid d47bb1a678fadfdbd4ac82b84a4ba786325fad2e
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel auth-pass mymaster testmaster123
sentinel config-epoch mymaster 8
sentinel leader-epoch mymaster 8

sentinel known-replica mymaster 127.0.0.1 6379
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 8003 f155c77225adcbad2afba708bc93dba8fc2814bc
sentinel known-sentinel mymaster 127.0.0.1 8002 6446b7c152ea141b495f409bceaf17ba2bad9eb8
sentinel current-epoch 8

哨兵二配置:/opt/redis/redis_centinel/sentinel2.conf

protected-mode yes
bind 127.0.0.1
port 8002
daemonize yes
pidfile “/var/run/redis-sentinel2.pid”
logfile “/opt/redis/redis_centinel/logs/centinel2/centinel2.log”
dir “/opt/redis/redis_centinel”
sentinel myid 6446b7c152ea141b495f409bceaf17ba2bad9eb8
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel failover-timeout mymaster 80000
sentinel auth-pass mymaster testmaster123
sentinel config-epoch mymaster 8
sentinel leader-epoch mymaster 8
sentinel known-replica mymaster 127.0.0.1 6379
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 8001 d47bb1a678fadfdbd4ac82b84a4ba786325fad2e
sentinel known-sentinel mymaster 127.0.0.1 8003 f155c77225adcbad2afba708bc93dba8fc2814bc
sentinel current-epoch 8

哨兵三配置:/opt/redis/redis_centinel/sentinel3.conf

protected-mode yes
bind 127.0.0.1
port 8003
daemonize yes
pidfile “/var/run/redis-sentinel3.pid”
logfile “/opt/redis/redis_centinel/logs/centinel3/centinel3.log”
dir “/opt/redis/redis_centinel”
sentinel myid f155c77225adcbad2afba708bc93dba8fc2814bc
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel failover-timeout mymaster 80000
sentinel auth-pass mymaster testmaster123
sentinel config-epoch mymaster 8
sentinel leader-epoch mymaster 8
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6379
sentinel known-sentinel mymaster 127.0.0.1 8002 6446b7c152ea141b495f409bceaf17ba2bad9eb8
sentinel known-sentinel mymaster 127.0.0.1 8001 d47bb1a678fadfdbd4ac82b84a4ba786325fad2e
sentinel current-epoch 8

4. 测试

Master宕机测试:kill master进程后,会选举新的master.

检查现有进程:

[root@goya redis_centinel]# ps -ef |grep redis
root      6322     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis-5.0.7/src/redis-server 127.0.0.1:6379      
root      6327     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis-5.0.7/src/redis-server 127.0.0.1:6380      
root      6333     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis-5.0.7/src/redis-server 127.0.0.1:6381      
root      6338     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis_centinel/redis-sentinel 127.0.0.1:8001 [sentinel]
root      6345     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis_centinel/redis-sentinel 127.0.0.1:8002 [sentinel]
root      6350     1  0 12:46 nbsp;       00:00:00 /opt/redis/redis_centinel/redis-sentinel 127.0.0.1:8003 [sentinel]

检查master:

> redis-cli -p 8002

127.0.0.1:8002> sentinel masters
1)  1) “name”
    2) “mymaster”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6379”
    7) “runid”
    8) “ac108e88ef0f513e229445821e0d92b1cf956090”
    9) “flags”
   10) “master”  

kill master进程

[root@goya redis_centinel]# kill -9 6322

检查master:

127.0.0.1:8002> sentinel masters
1)  1) “name”
    2) “mymaster”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6380”
    7) “runid”
    8) “47732684745132307ea7c6c5f0398cd0d85857eb”

127.0.0.1:8003> 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:6380,slaves=2,sentinels=3

新的master为第二个redis服务器,端口号为 6380

查看日志:/opt/redis/redis_centinel/logs/centinel1/centinel1.log

6338:X 08 Jan 2020 12:46:16.830 # +monitor master mymaster 127.0.0.1 6379 quorum 2
6338:X 08 Jan 2020 12:47:46.619 # +sdown master mymaster 127.0.0.1 6379
6338:X 08 Jan 2020 12:47:46.714 # +new-epoch 8
6338:X 08 Jan 2020 12:47:46.716 # +vote-for-leader f155c77225adcbad2afba708bc93dba8fc2814bc 8
6338:X 08 Jan 2020 12:47:46.717 # +odown master mymaster 127.0.0.1 6379 #quorum 2/2
6338:X 08 Jan 2020 12:47:46.718 # Next failover delay: I will not start a failover before Wed Jan  8 12:53:46 2020
6338:X 08 Jan 2020 12:47:47.898 # +config-update-from sentinel f155c77225adcbad2afba708bc93dba8fc2814bc 127.0.0.1 8003 @ mymaster 127.0.0.1 6379
6338:X 08 Jan 2020 12:47:47.899 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380
6338:X 08 Jan 2020 12:47:47.899 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
6338:X 08 Jan 2020 12:47:47.900 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380

检查slave情况:

127.0.0.1:8003> sentinel slaves mymaster
1)  1) “name”
    2) “127.0.0.1:6381”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6381”
   10) “slave”
   33) “master-host”
   34) “127.0.0.1”
   35) “master-port”
   36) “6380”

2)  1) “name”
    2) “127.0.0.1:6379”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6379”
    7) “runid”
    8) “”
    9) “flags”
   10) “s_down,slave,disconnected”
    27) “role-reported”
   28) “slave”

将6379 redis节点启动,这时6379会作为从节点使用。

[root@goya redis_centinel]# /opt/redis/redis-5.0.7/src/redis-server  /etc/redis/6379.conf

127.0.0.1:8003> sentinel slaves mymaster
1)  省略
2)  1) “name”
    2) “127.0.0.1:6379”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6379”
    7) “runid”
    8) “24f1008f43d667025999cc93cee1b9df68b6ea5b”
    9) “flags”
   10) “slave”

此时master依旧是6380节点

127.0.0.1:8001> sentinel masters
1)  1) “name”
    2) “mymaster”
    3) “ip”
    4) “127.0.0.1”
    5) “port”
    6) “6380”
    7) “runid”

 

来源:yangkei

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月6日
下一篇 2020年1月6日

相关推荐