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

来源:互联网 发布:java web mvc 框架 编辑:程序博客网 时间:2024/05/01 01:04

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

0 0
原创粉丝点击