Redis 主从配置以及主从自动切换

偏执的太偏执、 2022-06-17 01:44 261阅读 0赞

转自:http://blog.csdn.net/aa838260772/article/details/51165948

3台虚拟机

192.168.1.52

192.168.1.53

192.168.1.54

上来做这个操作:

1.机器上编译安装(3.0.7版本)Redis->wget http://download.redis.io/releases/redis-3.0.7.tar.gz

2.配置:

主机:192.168.1.52 从机:192.168.1.53 192.168.1.54

配置文件(redis.conf):

192.168.1.52:

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. daemonize yes
  2. pidfile “/var/run/redis.pid”
  3. port 6379
  4. tcp-backlog 511
  5. timeout 0
  6. tcp-keepalive 0
  7. loglevel notice
  8. logfile “/home/log/redis.log”
  9. databases 16
  10. save 900 1
  11. save 300 10
  12. save 60 10000
  13. stop-writes-on-bgsave-error yes
  14. rdbcompression yes
  15. rdbchecksum yes
  16. dbfilename “dump.rdb”
  17. dir “/usr/local/redis-3.0.7”
  18. slave-serve-stale-data yes
  19. slave-read-only yes
  20. repl-diskless-sync no
  21. repl-diskless-sync-delay 5
  22. repl-disable-tcp-nodelay no
  23. slave-priority 100
  24. appendonly no
  25. appendfilename “appendonly.aof”
  26. appendfsync everysec
  27. no-appendfsync-on-rewrite no
  28. auto-aof-rewrite-percentage 100
  29. auto-aof-rewrite-min-size 64mb
  30. aof-load-truncated yes
  31. lua-time-limit 5000
  32. slowlog-log-slower-than 10000
  33. slowlog-max-len 128
  34. latency-monitor-threshold 0
  35. notify-keyspace-events “”
  36. hash-max-ziplist-entries 512
  37. hash-max-ziplist-value 64
  38. list-max-ziplist-entries 512
  39. list-max-ziplist-value 64
  40. set-max-intset-entries 512
  41. zset-max-ziplist-entries 128
  42. zset-max-ziplist-value 64
  43. hll-sparse-max-bytes 3000
  44. activerehashing yes
  45. client-output-buffer-limit normal 0 0 0
  46. client-output-buffer-limit slave 256mb 64mb 60
  47. client-output-buffer-limit pubsub 32mb 8mb 60
  48. hz 10
  49. aof-rewrite-incremental-fsync yes

从机(redis.conf):192.168.1.53 192.168.1.54

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. [root@localhost redis-3.0.7]# cat redis.conf | egrep -v “^$|^#“
  2. daemonize yes
  3. pidfile “/var/run/redis.pid”
  4. port 6379
  5. tcp-backlog 511
  6. timeout 0
  7. tcp-keepalive 0
  8. loglevel notice
  9. logfile “/home/log/redis.log”
  10. databases 16
  11. save 900 1
  12. save 300 10
  13. save 60 10000
  14. stop-writes-on-bgsave-error yes
  15. rdbcompression yes
  16. rdbchecksum yes
  17. dbfilename “dump.rdb”
  18. dir “/usr/local/redis-3.0.7”
  19. slaveof 192.168.1.52 6379
  20. slave-serve-stale-data yes
  21. slave-read-only yes
  22. repl-diskless-sync no
  23. repl-diskless-sync-delay 5
  24. repl-disable-tcp-nodelay no
  25. slave-priority 100
  26. appendonly no
  27. appendfilename “appendonly.aof”
  28. appendfsync everysec
  29. no-appendfsync-on-rewrite no
  30. auto-aof-rewrite-percentage 100
  31. auto-aof-rewrite-min-size 64mb
  32. aof-load-truncated yes
  33. lua-time-limit 5000
  34. slowlog-log-slower-than 10000
  35. slowlog-max-len 128
  36. latency-monitor-threshold 0
  37. notify-keyspace-events “”
  38. hash-max-ziplist-entries 512
  39. hash-max-ziplist-value 64
  40. list-max-ziplist-entries 512
  41. list-max-ziplist-value 64
  42. set-max-intset-entries 512
  43. zset-max-ziplist-entries 128
  44. zset-max-ziplist-value 64
  45. hll-sparse-max-bytes 3000
  46. activerehashing yes
  47. client-output-buffer-limit normal 0 0 0
  48. client-output-buffer-limit slave 256mb 64mb 60
  49. client-output-buffer-limit pubsub 32mb 8mb 60
  50. hz 10
  51. aof-rewrite-incremental-fsync yes

3.将redis_server跑起来

查看信息:

redis-cli -h 192.168.1.52 -p 6379 info replication

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. # Replication
  2. role:master
  3. connected_slaves:0
  4. master_repl_offset:0
  5. repl_backlog_active:0
  6. repl_backlog_size:1048576
  7. repl_backlog_first_byte_offset:0
  8. repl_backlog_histlen:0

redis-cli -h 192.168.1.53 -p 6379 info replication

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. # Replication
  2. role:slave
  3. master_host:192.168.1.52
  4. master_port:6379
  5. master_link_status:up
  6. master_last_io_seconds_ago:2
  7. master_sync_in_progress:0
  8. slave_repl_offset:15
  9. slave_priority:100
  10. slave_read_only:1
  11. connected_slaves:1
  12. slave0:ip=192.168.1.54,port=6379,state=online,offset=1,lag=0
  13. master_repl_offset:1
  14. repl_backlog_active:1
  15. repl_backlog_size:1048576
  16. repl_backlog_first_byte_offset:2
  17. repl_backlog_histlen:0

redis-cli -h 192.168.1.54 -p 6379 info replication

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. # Replication
  2. role:slave
  3. master_host:192.168.1.52
  4. master_port:6379
  5. master_link_status:up
  6. master_last_io_seconds_ago:1
  7. master_sync_in_progress:0
  8. slave_repl_offset:169
  9. slave_priority:100
  10. slave_read_only:1
  11. connected_slaves:0
  12. master_repl_offset:0
  13. repl_backlog_active:0
  14. repl_backlog_size:1048576
  15. repl_backlog_first_byte_offset:0
  16. repl_backlog_histlen:0

此时再来看192.168.1.52主从信息

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. syswjdeMacBook-Air:shell syswj$ ./watch_redis.sh 52 info
  2. 52
  3. # Replication
  4. role:master
  5. connected_slaves:2
  6. slave0:ip=192.168.1.53,port=6379,state=online,offset=211,lag=1
  7. slave1:ip=192.168.1.54,port=6379,state=online,offset=211,lag=0
  8. master_repl_offset:211
  9. repl_backlog_active:1
  10. repl_backlog_size:1048576
  11. repl_backlog_first_byte_offset:2
  12. repl_backlog_histlen:210

3.开启redis-sentinel进行主从监控切换管理(只开启一个实例)

配置

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. port 26379
  2. dir “/tmp”
  3. sentinel monitor mymaster 192.168.1.52 6379 2
  4. daemonize yes
  5. sentinel down-after-milliseconds mymaster 10000
  6. sentinel config-epoch mymaster 10
  7. sentinel leader-epoch mymaster 10
  8. logfile “/home/log/sen.log”
  9. sentinel known-sentinel mymaster 127.0.0.1 26379 efbd30332f50847e0b0e9c5ab0adc5dfb91823d2
  10. sentinel current-epoch 10

运行后:

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. 3595:X 15 Apr 11:57:29.146 # Sentinel runid is fdc1c1d8a5adf48a5fecc229be42810a61eb8603
  2. 3595:X 15 Apr 11:57:29.146 # +monitor master mymaster 192.168.1.52 6379 quorum 2
  3. 3595:X 15 Apr 11:57:30.146 * +slave slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.52 6379
  4. 3595:X 15 Apr 11:57:30.156 * +slave slave 192.168.1.54:6379 192.168.1.54 6379 @ mymaster 192.168.1.52 6379
  5. 3595:X 15 Apr 11:57:30.871 * -dup-sentinel master mymaster 192.168.1.52 6379 #duplicate of 127.0.0.1:26379 or fdc1c1d8a5adf48a5fecc229be42810a61eb8603
  6. 3595:X 15 Apr 11:57:30.871 * +sentinel sentinel 127.0.0.1:26379 127.0.0.1 26379 @ mymaster 192.168.1.52 6379

已经监控到两个slaves

4.测试主从切换

关闭掉主redis: redis-cli -h 192.168.1.52 -p 6379 shutdown

发现54被切换成主redis了,53依然是从redis,不过从属于54了

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. syswjdeMacBook-Air:shell syswj$ ./watch_redis.sh 54 info
  2. 54
  3. # Replication
  4. role:master
  5. connected_slaves:1
  6. slave0:ip=192.168.1.53,port=6379,state=online,offset=179,lag=1
  7. master_repl_offset:179
  8. repl_backlog_active:1
  9. repl_backlog_size:1048576
  10. repl_backlog_first_byte_offset:2
  11. repl_backlog_histlen:178
  12. syswjdeMacBook-Air:shell syswj$ ./watch_redis.sh 53 info
  13. 53
  14. # Replication
  15. role:slave
  16. master_host:192.168.1.54
  17. master_port:6379
  18. master_link_status:up
  19. master_last_io_seconds_ago:2
  20. master_sync_in_progress:0
  21. slave_repl_offset:320
  22. slave_priority:100
  23. slave_read_only:1
  24. connected_slaves:0
  25. master_repl_offset:0
  26. repl_backlog_active:0
  27. repl_backlog_size:1048576
  28. repl_backlog_first_byte_offset:0
  29. repl_backlog_histlen:0
  30. syswjdeMacBook-Air:shell syswj$

查看主从管理日志:

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. 3670:X 15 Apr 12:06:14.376 # +sdown master mymaster 192.168.1.52 6379
  2. 3670:X 15 Apr 12:06:14.435 # +odown master mymaster 192.168.1.52 6379 #quorum 2/2
  3. 3670:X 15 Apr 12:06:14.435 # +new-epoch 12
  4. 3670:X 15 Apr 12:06:14.435 # +try-failover master mymaster 192.168.1.52 6379
  5. 3670:X 15 Apr 12:06:14.444 # +vote-for-leader 96e852d3d56a2dc45b2505e22bd430d1d6c7de13 12
  6. 3670:X 15 Apr 12:06:14.447 # 127.0.0.1:26379 voted for 96e852d3d56a2dc45b2505e22bd430d1d6c7de13 12
  7. 3670:X 15 Apr 12:06:14.548 # +elected-leader master mymaster 192.168.1.52 6379
  8. 3670:X 15 Apr 12:06:14.549 # +failover-state-select-slave master mymaster 192.168.1.52 6379
  9. 3670:X 15 Apr 12:06:14.610 # +selected-slave slave 192.168.1.54:6379 192.168.1.54 6379 @ mymaster 192.168.1.52 6379
  10. 3670:X 15 Apr 12:06:14.610 * +failover-state-send-slaveof-noone slave 192.168.1.54:6379 192.168.1.54 6379 @ mymaster 192.168.1.52 6379
  11. 3670:X 15 Apr 12:06:14.678 * +failover-state-wait-promotion slave 192.168.1.54:6379 192.168.1.54 6379 @ mymaster 192.168.1.52 6379
  12. 3670:X 15 Apr 12:06:15.491 # +promoted-slave slave 192.168.1.54:6379 192.168.1.54 6379 @ mymaster 192.168.1.52 6379
  13. 3670:X 15 Apr 12:06:15.491 # +failover-state-reconf-slaves master mymaster 192.168.1.52 6379
  14. 3670:X 15 Apr 12:06:15.548 * +slave-reconf-sent slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.52 6379
  15. 3670:X 15 Apr 12:06:16.550 * +slave-reconf-inprog slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.52 6379
  16. 3670:X 15 Apr 12:06:16.550 * +slave-reconf-done slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.52 6379
  17. 3670:X 15 Apr 12:06:16.648 # +failover-end master mymaster 192.168.1.52 6379
  18. 3670:X 15 Apr 12:06:16.648 # +switch-master mymaster 192.168.1.52 6379 192.168.1.54 6379
  19. 3670:X 15 Apr 12:06:16.651 * +slave slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.54 6379
  20. 3670:X 15 Apr 12:06:16.652 * +slave slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379
  21. 3670:X 15 Apr 12:06:26.683 # +sdown slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379

来测试重新开启机器52:

稍等一段世界发现:

52也成为54得slave了

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. syswjdeMacBook-Air:shell syswj$ ./watch_redis.sh 52 info
  2. 52
  3. # Replication
  4. role:slave
  5. master_host:192.168.1.54
  6. master_port:6379
  7. master_link_status:up
  8. master_last_io_seconds_ago:2
  9. master_sync_in_progress:0
  10. slave_repl_offset:8252
  11. slave_priority:100
  12. slave_read_only:1
  13. connected_slaves:0
  14. master_repl_offset:0
  15. repl_backlog_active:0
  16. repl_backlog_size:1048576
  17. repl_backlog_first_byte_offset:0
  18. repl_backlog_histlen:0

哨兵日志如下:

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. 3670:X 15 Apr 12:06:16.550 * +slave-reconf-done slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.52 6379
  2. 3670:X 15 Apr 12:06:16.648 # +failover-end master mymaster 192.168.1.52 6379
  3. 3670:X 15 Apr 12:06:16.648 # +switch-master mymaster 192.168.1.52 6379 192.168.1.54 6379
  4. 3670:X 15 Apr 12:06:16.651 * +slave slave 192.168.1.53:6379 192.168.1.53 6379 @ mymaster 192.168.1.54 6379
  5. 3670:X 15 Apr 12:06:16.652 * +slave slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379
  6. 3670:X 15 Apr 12:06:26.683 # +sdown slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379
  7. 3670:X 15 Apr 12:07:54.741 # -sdown slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379
  8. 3670:X 15 Apr 12:08:04.734 * +convert-to-slave slave 192.168.1.52:6379 192.168.1.52 6379 @ mymaster 192.168.1.54 6379

5自带shell脚本方便操作

[plain] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. #!/bin/bash
  2. set_redis()
  3. {
  4. result=`redis-cli -h 192.168.1.$1 -p 6379 set $2 $3`
  5. echo “192.168.1.$1:$result”
  6. }
  7. get_redis()
  8. {
  9. result=`redis-cli -h 192.168.1.$1 -p 6379 get $2`
  10. echo “192.168.1.$1:$result”
  11. }
  12. get_info()
  13. {
  14. echo $1
  15. redis-cli -h 192.168.1.$1 -p 6379 info replication
  16. }
  17. shut_down()
  18. {
  19. echo $1
  20. redis-cli -h 192.168.1.$1 -p 6379 shutdown
  21. }
  22. if [ $# -lt 2 ];
  23. then
  24. echo “ip op a b”
  25. exit 0
  26. fi
  27. case $2 in
  28. set)
  29. set_redis $1 $3 $4
  30. ;;
  31. get)
  32. get_redis $1 $3
  33. ;;
  34. info)
  35. get_info $1
  36. ;;
  37. shut)
  38. shut_down $1
  39. ;;
  40. *)
  41. echo “invalid parameter!…”
  42. ;;
  43. esac

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis集群主从节点自动切换

    前言 最近在将redis作为数据库使用(redis中存放大量数据)的项目中,偶然发现redis的主从节点发生了变化,但是没有任务报错,redis集群的各节点也没有fail