RedisµÄ¸ß¿ÉÓüܹ¹ÏÖÔÚÔ½À´Ô½¶àÁË£¬¿ÉÒÔ¼ûµÃRedisµÄ·¢Õ¹ÊÇÓжàôµÄѸËÙ£¬ÏÖÔÚ²»ÉÙ¹«Ë¾¶¼ÓÃÉÏÁËRedis£¬ËùÒÔRedis¸ß¿ÉÓÃÒ²ÏÔµÃÓÈÆäÖØÒª£¬ÏÖÔÚRedisµÄ¸ß¿ÉÓüܹ¹ÓбÈÈçkeepalived+redis£¬redis cluster£¬twemproxy£¬codis£¬ÏÂÃæÎÒÃÇÖ÷ÒªÕë¶ÔRedis Sentinel¸ß¿ÉÓüܹ¹Õ¹¿ªÑ§Ï°¡£
Redis SentinelÖ÷Òª¹¦ÄÜÓÐÒÔϼ¸µã£º
²»Ê±µØ¼à¿ØredisÊÇ·ñ°´ÕÕÔ¤ÆÚÁ¼ºÃµØÔËÐÐ;
Èç¹û·¢ÏÖij¸öredis½ÚµãÔËÐгöÏÖ×´¿ö£¬Äܹ»Í¨ÖªÁíÍâÒ»¸ö½ø³Ì(ÀýÈçËüµÄ¿Í»§¶Ë);
Äܹ»½øÐÐ×Ô¶¯Çл»¡£µ±Ò»¸ömaster½Úµã²»¿ÉÓÃʱ£¬Äܹ»Ñ¡¾Ù³ömasterµÄ¶à¸öslave(Èç¹ûÓг¬¹ýÒ»¸öslaveµÄ»°)ÖеÄÒ»¸öÀ´×÷ΪеÄmaster,ÆäËüµÄslave½Úµã»á½«ËüËù×·ËæµÄmasterµÄµØÖ·¸ÄΪ±»ÌáÉýΪmasterµÄslaveµÄеØÖ·¡£
SentinelÊÇÒ»¸ö¼àÊÓÆ÷£¬Ëü¿ÉÒÔ¸ù¾Ý±»¼àÊÓʵÀýµÄÉí·ÝºÍ״̬À´ÅжÏÓ¦¸ÃÖ´ÐкÎÖÖ¶¯×÷¡£SentinelÊÇÈçºÎ·¢ÏÖÆäËûSentinelµÄÄØ£¿Sentinel»áͨ¹ýÃüÁîÁ¬½ÓÏò±»¼àÊÓµÄÖ÷´Ó·þÎñÆ÷·¢ËÍHELLOÐÅÏ¢£¬¸ÃÏûÏ¢°üº¬SentinelµÄIP¡¢¶Ë¿ÚºÅ¡¢IDµÈÄÚÈÝ£¬ÒÔ´ËÀ´ÏòÆäËûSentinelÐû¸æ×Ô¼ºµÄ´æÔÚ¡£Óë´Ëͬʱ£¬Sentinel»áͨ¹ý¶©ÔÄÁ¬½Ó½ÓÊÕÆäËûSentinelµÄHELLOÐÅÏ¢£¬ÒÔ´ËÀ´·¢ÏÖ¼àÊÓͬһ¸öÖ÷·þÎñÆ÷µÄÆäËûSentinel¡£

SentinelÖ®¼ä»á»¥Ïà´´½¨ÃüÁîÁ¬½Ó£¬ÓÃÓÚ½øÐÐͨÐÅ¡£ÒòΪÒѾÓÐÖ÷´Ó·þÎñÆ÷×÷·¢ËͺͽÓÊÕHELLOÐÅÏ¢µÄÖн飬ËùÒÔSentinelÖ®¼ä²»»á´´½¨¶©ÔÄÁ¬½Ó£º

ÒÔÏÂÊÇRedis SentinelµÄ¼Ü¹¹Í¼£¬Sentinel½ÚµãÊý×îºÃÊǵ¥Êý£¬ÖÁÓÚΪʲô£¬Çë²Î¿¼ÒÔϵÄ×ÊÁÏ£º
http://segmentfault.com/a/1190000002680804
http://segmentfault.com/a/1190000002685515

ÏÂÃæ½øÐÐRedis SentinelµÄ²¿ÊðºÍ²âÊÔ£¬±¾´ÎʵÑéµÄ°æ±¾ÊÇredis-3.0.7°æ±¾£¬»·¾³ËµÃ÷£º
192.168.10.128 Sentinel_1
192.168.10.129 Sentinel_2
192.168.10.130 Sentinel_3
192.168.10.131 Redis_Master
192.168.10.132 Redis_Slave
|
Ò»¡¢ ÔÚÎą̊·þÎñÆ÷ÉÏ·Ö±ðÖ´ÐÐÏÂredis-3.0.7µÄ°²×°£¬ÒÔSentinel_1·þÎñΪÀý£º
[root@Sentinel_1 ~]# wget http://download.redis.io/releases/redis-3.0.7.tar.gz
[root@Sentinel_1 ~]# tar xf redis-3.0.7.tar.gz
[root@Sentinel_1 ~]# cd redis-3.0.7/src/
[root@Sentinel_1 ~]# make PREFIX=/data/service/redis install |
°²×°Íê³Éºó£¬»áÔÚ/data/service/redisÏ»á²úÉúÒ»¸öbinĿ¼:
[root@Sentinel_1 ~]# ll /data/service/redis/
total 12
drwxr-xr-x. 2 root root 4096 Mar 7 19:19 bin
<[root@Sentinel_1 ~]# |
·Ö±ðÔÚÎą̊·þÎñÆ÷ÉÏÌí¼ÓredisµÄbinĿ¼µÄ»·¾³±äÁ¿£¨²»ÊDZØÐèµÄ£©£¬·½±ãÃüÁîµÄʹÓ㬱à¼vim /etc/profile.d/redis.sh Ìí¼ÓÒÔÏÂÄÚÈÝ£º
export PATH=/data/service/redis/bin:$PATH
|
Ö´ÐÐsource /etc/profile.d/redis.sh Èû·¾³±äÁ¿ÉúЧ£º
[root@Sentinel_1 ~]# source /etc/profile.d/redis.sh |
¶þ¡¢ÅäÖÃRedisÖ÷´Ó»·¾³£¬Ö÷´Ó»·¾³µÄ²¿ÊðºÜ¼òµ¥£¬ÕâÀï²»ÑÝʾ´î½¨¹ý³Ì£¬Redis_Master: 192.168.10.131 Redis_Slave: 192.168.10.132
Redis_MasterÆô¶¯µÄLog:
¸´ÖÆ´úÂë
[root@Redis_Master redis]# tail -f logs/redis_6379.log
1974:M 07 Mar 22:03:05.381 * DB loaded from disk: 0.001 seconds
1974:M 07 Mar 22:03:05.381 * The server is now ready to accept connections on port 6379
1974:M 07 Mar 22:03:44.592 * Slave 192.168.10.132:6379 asks for synchronization
1974:M 07 Mar 22:03:44.593 * Full resync requested by slave 192.168.10.132:6379
1974:M 07 Mar 22:03:44.593 * Starting BGSAVE for SYNC with target: disk
1974:M 07 Mar 22:03:44.594 * Background saving started by pid 1977
1977:C 07 Mar 22:03:44.632 * DB saved on disk
1977:C 07 Mar 22:03:44.632 * RDB: 4 MB of memory used by copy-on-write
1974:M 07 Mar 22:03:44.649 * Background saving terminated with success
1974:M 07 Mar 22:03:44.650 * Synchronization with slave 192.168.10.132:6379 succeeded
¸´ÖÆ´úÂë |
ÔÚRedis_SlaveÆô¶¯µÄLog:
¸´ÖÆ´úÂë
[root@Redis_Slave redis]# tail -f logs/redis_6379.log
2437:S 07 Mar 22:03:44.246 * Connecting to MASTER
192.168.10.131:6379
2437:S 07 Mar 22:03:44.247 * MASTER <-> SLAVE
sync started
2437:S 07 Mar 22:03:44.262 * Non blocking connect for
SYNC fired the event.
2437:S 07 Mar 22:03:44.268 * Master replied to PING,
replication cancontinue...
2437:S 07 Mar 22:03:44.269 * Partial resynchronization
not possible (no cached master)
2437:S 07 Mar 22:03:44.270 * Full resync from master:
5d1fbf46ddd1eb0a7728abbbad61e78908dd7963:1
2437:S 07 Mar 22:03:44.326 * MASTER <-> SLAVE
sync: receiving 34 bytes from master
2437:S 07 Mar 22:03:44.326 * MASTER <-> SLAVE
sync: Flushing old data
2437:S 07 Mar 22:03:44.328 * MASTER <-> SLAVE
sync: Loading DB in memory
2437:S 07 Mar 22:03:44.329 * MASTER <-> SLAVE
sync: Finished with success
¸´ÖÆ´úÂë
|
¿ÉÒÔ¿´µ½Ö÷´Ó»·¾³ÊÇÕý³£µÄ£¡
Èý¡¢½øÐÐSentinelÅäÖ㬼°ÅäÖÃÎļþµÄ½âÊÍ¡£
ÔÚÈý̨Sentinel·þÎñÆ÷Ï´´½¨confĿ¼ºÍlogĿ¼£¬´æ·ÅÅäÖÃÎļþºÍlog£º
[root@Sentinel_1 ~]# mkdir -p /data/service/redis/sentinel/conf
[root@Sentinel_1 ~]# mkdir -p /data/service/redis/sentinel/log |
½øµ½confĿ¼£¬±à¼Îļþ26379.conf£¬Èý̨Sentinel·þÎñÆ÷£¬ÅäÖö¼Ò»Ñù£º
¸´ÖÆ´úÂë
[root@Sentinel_1 conf]# pwd
/data/service/redis/sentinel/conf
[root@Sentinel_1 conf]# cat 26379.conf
port 26379
dir "/data/service/redis/sentinel"
daemonize yes
logfile "/data/service/redis/sentinel/log/sentinel.log"
# 6379
sentinel monitor master-6379 192.168.10.131 6379 2
sentinel down-after-milliseconds master-6379 15000
sentinel parallel-syncs master-6379 1
sentinel failover-timeout master-6379 180000
sentinel auth-pass master-6379 123456
sentinel client-reconfig-script master-6379 /data/script/python/notify.py
[root@Sentinel_1 conf]#
¸´ÖÆ´úÂë |
26379.confÅäÖÃÎļþ½âÊÍ£º
1¡¢Ç°4ÐÐÊǶ¨ÒåsentinelµÄһЩ»ù±¾ÐÅÏ¢£¬¸úredisºÜÀàËÆ£¬²»×÷¹ý¶à½âÊÍ¡£
2¡¢sentinel monitor master-6379 192.168.10.131 6379 2£¨ÕâÒ»Ðдú±ísentinel¼à¿ØµÄmasterµÄÃû×Ö½Ð×ömaster-6379,µØÖ·Îª192.168.10.131:6379£¬Õâ¸ö2´ú±í£¬µ±¼¯ÈºÖÐÓÐ2¸ösentinelÈÏΪmasterËÀÁËʱ£¬²ÅÄÜÕæÕýÈÏΪ¸ÃmasterÒѾ²»¿ÉÓÃÁË£©
3¡¢down-after-milliseconds £¨sentinel»áÏòmaster·¢ËÍÐÄÌøPINGÀ´È·ÈÏmasterÊÇ·ñ´æ»î£¬Èç¹ûmasterÔÚ¡°Ò»¶¨Ê±¼ä·¶Î§¡±ÄÚ²»»ØÓ¦PONG »òÕßÊǻظ´ÁËÒ»¸ö´íÎóÏûÏ¢£¬ÄÇôÕâ¸ösentinel»áÖ÷¹ÛµØ(µ¥·½ÃæµØ)ÈÏΪÕâ¸ömasterÒѾ²»¿ÉÓ㬶øÕâ¸ödown-after-milliseconds¾ÍÊÇÓÃÀ´Ö¸¶¨Õâ¸ö¡°Ò»¶¨Ê±¼ä·¶Î§¡±µÄ£¬µ¥Î»ÊǺÁÃë¡££©
4¡¢parallel-syncs£¨ÔÚ·¢ÉúfailoverÖ÷±¸Çл»Ê±£¬Õâ¸öÑ¡ÏîÖ¸¶¨ÁË×î¶à¿ÉÒÔÓжàÉÙ¸öslaveͬʱ¶ÔеÄmaster½øÐÐͬ²½£¬Õâ¸öÊý×ÖԽС£¬Íê³ÉfailoverËùÐèµÄʱ¼ä¾ÍÔ½³¤£¬µ«ÊÇÈç¹ûÕâ¸öÊý×ÖÔ½´ó£¬¾ÍÒâζ×ÅÔ½¶àµÄslaveÒòΪreplication¶ø²»¿ÉÓ᣿ÉÒÔͨ¹ý½«Õâ¸öÖµÉèΪ 1 À´±£Ö¤Ã¿´ÎÖ»ÓÐÒ»¸öslave´¦ÓÚ²»ÄÜ´¦ÀíÃüÁîÇëÇóµÄ״̬£©
5¡¢failover-timeout£¨sentinel¼¯Èº¶¼×ñÊØÒ»¸ö¹æÔò£ºÈç¹ûsentinel AÍÆ¼ösentinel BÈ¥Ö´ÐÐfailover£¬B»áµÈ´ýÒ»¶Îʱ¼äºó£¬×ÔÐÐÔÙ´ÎÈ¥¶Ôͬһ¸ömasterÖ´ÐÐfailover£¬Õâ¸öµÈ´ýµÄʱ¼äÊÇͨ¹ýfailover-timeoutÅäÖÃÏîÈ¥ÅäÖõġ£´ÓÕâ¸ö¹æÔò¿ÉÒÔ¿´³ö£¬sentinel¼¯ÈºÖеÄsentinel²»»áÔÙͬһʱ¿Ì²¢·¢È¥failoverͬһ¸ömaster£¬µÚÒ»¸ö½øÐÐfailoverµÄsentinelÈç¹ûʧ°ÜÁË£¬ÁíÍâÒ»¸ö½«»áÔÚÒ»¶¨Ê±¼äÄÚ½øÐÐÖØÐ½øÐÐfailover£¬ÒÔ´ËÀàÍÆ£©
6¡¢auth-pass(ÕâÑ¡ÏîÖ÷ÒªÕë¶Ôredis master/slave¼Ü¹¹ÉèÖÃÁËÃÜÂëÈÏÖ¤£¬Èç¹ûÅäÖÃÖ÷´ÓʱûÓÐÉ趨ÃÜÂ룬¾Í²»ÐèҪЩѡÏÈôÓÐÃÜÂ룬ÕâÀïÒªÖ¸¶¨Á¬½ÓµÄÃÜÂë)
7¡¢client-reconfig-script (¸Ã²ÎÊýÊǶ¨Òå¹ÊÕÏ×ªÒÆ½Å±¾£¬µ±master¹ÊÕÏ×ªÒÆºó£¬Ö´Ðз¢¶ÌÐÅ»òÕßIPÇл»µÈ)
¹ÊÕÏ×ªÒÆºó·¢ÓʼþµÄnotify.py½Å±¾ÊDzο¼ÁË´óÉñµÄ²©¿Í£ºhttp://www.cnblogs.com/gomysql/p/5040847.html
ËÄ¡¢ÏÂÃæÆô¶¯Sentinel·þÎñ£¬Æô¶¯·½Ê½ÓÐÁ½ÖÖ£º
·½Ê½Ò»£º
redis-sentinel /path/to/sentinel.conf |
·½Ê½¶þ£º
redis-server /path/to/sentinel.conf --sentinel |
ÎÒϰ¹ßÓõÚÒ»ÖÖ·½·¨£¬·Ö±ðÔÚÈý̨Sentinel·þÎñÆ÷½øÐÐÆô¶¯£º
µÚһ̨Sentinel_1Æô¶¯log£º
¸´ÖÆ´úÂë
[root@Sentinel_1 sentinel]# redis-sentinel
/data/service/redis/sentinel/conf/26379.conf
[root@Sentinel_1 sentinel]# tail -f log/sentinel.log
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
5153:X 07 Mar 22:37:16.290 # WARNING: The TCP
backlog setting of 511 cannot be enforced because
/proc/sys/net/core/somaxconn is set to the
lower value of 128.
5153:X 07 Mar 22:37:16.290 # Sentinel
runid is 21e629e6d2b26682e660258787d5fb995010e6c8
5153:X 07 Mar 22:37:16.290 # +monitor
master master-6379 192.168.10.131 6379 quorum 2
5153:X 07 Mar 22:37:17.330 * +slave
slave 192.168.10.132:6379 192.168.10.132 6379 @
master-6379 192.168.10.131 63795153:X 07
Mar 22:38:29.406 * +sentinel
sentinel 192.168.10.129:26379 192.168.10.129 26379 @
master-6379 192.168.10.131 6379
5153:X 07 Mar 22:38:45.024 * +sentinel sentinel
192.168.10.130:26379 192.168.10.130 26379 @
master-6379 192.168.10.131 6379
¸´ÖÆ´úÂë
|
µÚ¶þ̨Sentinel_2Æô¶¯log:
¸´ÖÆ´úÂë
[root@Sentinel_2 sentinel]# redis-sentinel
/data/service/redis/sentinel/conf/26379.conf
[root@Sentinel_2 sentinel]# tail -f log/sentinel.log
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
4647:X 07 Mar 22:38:27.570 # WARNING: The TCP backlog
setting of 511 cannot be enforced because /proc/sys/net/core/
somaxconn is set to the lower value of 128.
4647:X 07 Mar 22:38:27.570 # Sentinel runid is
f391228f430177d881464e908c683bfc73d61c24
4647:X 07 Mar 22:38:27.571 # +monitor master
master-6379 192.168.10.131 6379 quorum 2
4647:X 07 Mar 22:38:28.582 *
+slave slave 192.168.10.132:6379 192.168.10.132 6379
@ master-6379 192.168.10.131 6379
4647:X 07 Mar 22:38:29.218 *
+sentinel sentinel 192.168.10.128:26379 192.168.10.128 26379
@ master-6379 192.168.10.131 6379
4647:X 07 Mar 22:38:45.200 *
+sentinel sentinel 192.168.10.130:26379 192.168.10.130 26379
@ master-6379 192.168.10.131 6379
¸´ÖÆ´úÂë
|
µÚÈý̨Sentinel_3Æô¶¯log:
¸´ÖÆ´úÂë
[root@Sentinel_3 sentinel]#
redis-sentinel /data/service/redis/sentinel/conf/26379.conf
[root@Sentinel_3 sentinel]#
tail -f log/sentinel.log
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
2115:X 07 Mar 22:38:43.161
# WARNING: The TCP backlog setting of 511 cannot be enforced because
/proc/sys/net/core/somaxconn is set to the lower value of 128.
2115:X 07 Mar 22:38:43.161
# Sentinel runid is 7fbee9138d4e5c1e2def7bbc4f888cef04d95677
2115:X 07 Mar 22:38:43.161 # +monitor master master
-6379 192.168.10.131 6379 quorum 2
2115:X 07 Mar 22:38:44.167
* +slave slave 192.168.10.132:6379 192.168.10.132 6379
@ master-6379 192.168.10.131 6379
2115:X 07 Mar 22:38:44.818
* +sentinel sentinel 192.168.10.129:26379 192.168.10.129 26379
@ master-6379 192.168.10.131 6379
2115:X 07 Mar 22:38:44.851
* +sentinel sentinel 192.168.10.128:26379 192.168.10.128 26379
@ master-6379 192.168.10.131 6379
|
¿ÉÒÔ¿´µ½SentinelÕû¸ö¼¯Èº¶¼¿ªÊ¼¹¤×÷ÁË£¬ÎÒÃÇ¿ÉÒÔËæ±ãµÇ¼һ̨Sentinel¿´ÏÂÏÖÔÚ¼àÊÓµÄ״̬£º
¸´ÖÆ´úÂë
[root@Sentinel_1 sentinel]# redis-cli -p 26379
127.0.0.1:26379> INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master-6379,status=ok,address
=192.168.10.131:6379,slaves=1,sentinels=3
127.0.0.1:26379>
¸´ÖÆ´úÂë |
¿ÉÒÔ¿´µ½×´Ì¬ÊÇstatus=ok£¬slaves=1ÓÐÒ»¸ö´Ó½Úµã¡£
Îå¡¢Redis down»ú²âÊÔ
²âÊÔÒ»¡¢Í£µôRedis_Master£¬¿´Sentinel»á²»»á°Ñ´æ»îµÄSlave½ÚµãÌáÉýΪMaster½Úµã
[root@Redis_Master redis]# sh redis stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@Redis_Master redis]#
|
1¡¢Ëæ±ã²é¿´Ò»Ì¨SentinelµÄlog£¬tail -f log/sentinel.log£º
¸´ÖÆ´úÂë
5153:X 07 Mar 22:48:20.986
# +sdown master master-6379 192.168.10.131 63795153:X 07 Mar 22:48:21.047
# +odown master master-6379 192.168.10.131 6379 #quorum 2/2
5153:X 07 Mar 22:48:21.049
# +new-epoch 1
5153:X 07 Mar 22:48:21.050
# +try-failover master master-6379 192.168.10.131 6379
5153:X 07 Mar 22:48:21.053
# +vote-for-leader 21e629e6d2b26682e660258787d5fb995010e6c8 1
5153:X 07 Mar 22:48:21.057
# 192.168.10.130:26379 voted for
7fbee9138d4e5c1e2def7bbc4f888cef04d95677 1
5153:X 07 Mar 22:48:21.062
# 192.168.10.129:26379 voted for
7fbee9138d4e5c1e2def7bbc4f888cef04d95677 1
5153:X 07 Mar 22:48:22.441
# +config-update-from sentinel
192.168.10.130:26379 192.168.10.130 26379
@ master-6379 192.168.10.131 6379
5153:X 07 Mar 22:48:22.442
# +switch-master master-6379
192.168.10.131 6379 192.168.10.132 6379
5153:X 07 Mar 22:48:22.443
* +slave slave 192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.
168.10.132 6379
5153:X 07 Mar 22:48:37.496
# +sdown slave 192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.
168.10.132 6379
¸´ÖÆ´úÂë
|
2¡¢Ôٲ鿴Redis_SlaveµÄlog:
¸´ÖÆ´úÂë
2437:S 07 Mar 22:48:18.023 * Connecting to MASTER 192.168.10.131:6379
2437:S 07 Mar 22:48:18.026 * MASTER <-> SLAVE sync started
2437:S 07 Mar 22:48:18.029 # Error condition on socket for SYNC:
Connection refused
2437:S 07 Mar 22:48:19.050 * Connecting to MASTER 192.168.10.131:6379
2437:S 07 Mar 22:48:19.053 * MASTER <-> SLAVE sync started
2437:S 07 Mar 22:48:19.055 # Error condition on socket for SYNC:
Connection refused
2437:S 07 Mar 22:48:20.074 * Connecting to MASTER 192.168.10.131:6379
2437:S 07 Mar 22:48:20.077 * MASTER <-> SLAVE sync started
2437:S 07 Mar 22:48:20.079 # Error condition on socket for SYNC:
Connection refused
2437:M 07 Mar 22:48:20.724 * Discarding previously cached master state.
2437:M 07 Mar 22:48:20.725 * MASTER MODE enabled (user request from 'id=7
addr=192.168.10.130:60991 fd=11 name=sentinel-7fbee913-cmd age=577
idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=0 qbuf-free=32768
obl=36 oll=0 omem=0 events=rw cmd=exec')
2437:M 07 Mar 22:48:20.745 # CONFIG REWRITE executed with success.
2437:M 07 Mar 22:48:20.796 * 1 changes in 900 seconds. Saving...
2437:M 07 Mar 22:48:20.870 * Background saving started by pid 2442
2442:C 07 Mar 22:48:20.915 * DB saved on disk
2442:C 07 Mar 22:48:20.915 * RDB: 4 MB of memory used by copy-on-write
2437:M 07 Mar 22:48:20.974 * Background saving terminated with success
¸´ÖÆ´úÂë |
3¡¢ÏÖÔÚÔٵǼSentinel²é¿´ÏÖÔÚµÄÖ÷½ÚµãÊÇË£º
¸´ÖÆ´úÂë [root@Sentinel_1 sentinel]#
redis-cli -p 26379 127.0.0.1:26379> INFO sentinel #
Sentinel sentinel_masters:1 sentinel_tilt:
0 sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master-6379,status=ok,
address=192.168.10.132:6379,slaves=1,sentinels=3
127.0.0.1:26379> ¸´ÖÆ´úÂë |
¿ÉÒÔ¿´µ½£¬ÐµÄMasterÒѾ±ä³É192.168.10.132ÁË¡£Çл»ºóµÄÓʼþ֪ͨ£º
4¡¢°Ñdown»úµÄredisÆô¶¯ºó£¬»á×Ô¶¯Ìí¼ÓΪslave½ÇÉ«£º
¸´ÖÆ´úÂë
[root@Redis_Master
redis]# sh redis start Starting Redis server... [root@Redis_Master
redis]# tail -f logs/redis_6379.log `-._ `-._`-.__.-'_.-'
_.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 2050:M 07
Mar 22:55:21.357 # WARNING: The TCP backlog setting
of 511 cannot be enforced because /proc/sys/net/core/somaxconn
is set to the lower value of 128. 2050:M 07 Mar 22:55:21.357
# Server started, Redis version 3.0.7 2050:M 07 Mar
22:55:21.357 # WARNING you have Transparent Huge Pages
(THP) support enabled in your kernel. This will create
latency and memory usage issues with Redis. To fix this
issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
as root, and add it to your /etc/rc.local in order to
retain the setting after a reboot. Redis must be restarted
after THP is disabled. 2050:M 07 Mar 22:55:21.357 *
DB loaded from disk: 0.000 seconds 2050:M 07 Mar 22:55:21.357
* The server is now ready to accept connections on port
6379 2050:S 07 Mar 22:55:31.393 * SLAVE OF 192.168.10.132:6379
enabled (user request from 'id=4 addr=192.168.10.129:50326
fd=8 name=sentinel-f391228f-cmd age=10 idle=0 flags=x
db=0 sub=0 psub=0 multi=3 qbuf=0 qbuf-free=32768 obl=36
oll=0 omem=0 events=rw cmd=exec') 2050:S 07 Mar 22:55:31.397
# CONFIG REWRITE executed with success. 2050:S 07 Mar
22:55:31.596 * Connecting to MASTER 192.168.10.132:6379
2050:S 07 Mar 22:55:31.597 * MASTER <-> SLAVE sync started
2050:S 07 Mar 22:55:31.597 * Non blocking connect for
SYNC fired the event. 2050:S 07 Mar 22:55:31.598 * Master
replied to PING, replication can continue... 2050:S
07 Mar 22:55:31.600 * Partial resynchronization not
possible (no cached master) 2050:S 07 Mar 22:55:31.634
* Full resync from master: 234202729a196fd6523e41bcb7e29d9866c905c6:1
2050:S 07 Mar 22:55:31.648 * MASTER <-> SLAVE sync:
receiving 34 bytes from master 2050:S 07 Mar 22:55:31.649
* MASTER <-> SLAVE sync: Flushing old data 2050:S 07
Mar 22:55:31.649 * MASTER <-> SLAVE sync: Loading DB
in memory 2050:S 07 Mar 22:55:31.649 * MASTER <-> SLAVE
sync: Finished with success
¸´ÖÆ´úÂë |
5¡¢²é¿´Sentinel log£¬¿ÉÒÔ¿´µ½slave±»¼Ó½øÀ´£¬²¢³ÉΪSlaveµÄ½ÇÉ«ÁË:
4647:X 07 Mar 22:55:31.787 * +convert-to-slave slave 192.168.10.131:6379 192.168.10.131 6379 @ master-6379 192.168.10.132 6379
²âÊÔ¶þ¡¢°ÑеÄRedis_Master(192.168.10.132£¬ÔÀ´µÄslave)Í£µô£¬¿´ÊÇ·ñ°ÑеÄSlave£¨192.168.10.131£¬ÔÀ´µÄmaster£©ÌáÉýΪÖ÷£º
1¡¢Ö´ÐÐredis stop²Ù×÷
[root@Redis_Slave redis]# sh redis stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
|
2¡¢²é¿´Sentinel log£º
¸´ÖÆ´úÂë
5153:X 07 Mar 23:01:54.895
# +try-failover master master
-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:54.898
# +vote-for-leader
21e629e6d2b26682e660258787d5fb995010e6c8 2
5153:X 07 Mar 23:01:54.908
# 192.168.10.129:26379 voted for
f391228f430177d881464e908c683bfc73d61c24 2
5153:X 07 Mar 23:01:54.913
# 192.168.10.130:26379 voted for
21e629e6d2b26682e660258787d5fb995010e6c8 2
5153:X 07 Mar 23:01:54.968
# +elected-leader master
master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:54.968
# +failover-state-select-slave
master master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:55.027
# +selected-slave slave
192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:55.027
* +failover-state-send-slaveof-noone slave
192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:55.085
* +failover-state-wait-promotion slave
192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:55.912
# +promoted-slave slave 192.168.10.131:6379 192.168.10.131 6379
@ master-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:55.915
# +failover-state-reconf-slaves master master
-6379 192.168.10.132 6379
5153:X 07 Mar 23:01:56.009
# +failover-end master master-
6379 192.168.10.132 6379
5153:X 07 Mar 23:01:56.010
# +switch-master master-
6379 192.168.10.132 6379 192.168.10.131 6379
5153:X 07 Mar 23:01:56.010
* +slave slave 192.168.10.132:6379
192.168.10.132 6379
@ master-6379 192.168.10.131 6379
5153:X 07 Mar 23:02:11.066
# +sdown slave 192.168.10.132:6379 192.168.10.132 6379
@ master-6379 192.168.10.131 6379
¸´ÖÆ´úÂë
|
3¡¢Ôٲ鿴ÐÂRedis_MasterµÄlog£¬¿ÉÒÔ¿´µ½×´Ì¬´ÓSLaveת»ØÁËMaster:
¸´ÖÆ´úÂë
[root@Redis_Master redis]
# tail -f logs/redis_6379.log
2050:S 07 Mar 23:01:52.367
# Error condition on socket for SYNC: Connection refused
2050:S 07 Mar 23:01:53.382
* Connecting to MASTER
192.168.10.132:6379
2050:S 07 Mar 23:01:53.384
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:53.384
# Error condition on socket
for SYNC: Connection refused
2050:S 07 Mar 23:01:54.404
* Connecting to MASTER 192.168.10.132:6379
2050:S 07 Mar 23:01:54.405
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:54.406
# Error condition on socket for SYNC: Connection refused
2050:M 07 Mar 23:01:54.868
* Discarding previously cached master state.
2050:M 07 Mar 23:01:54.868
* MASTER MODE enabled
(user request from 'id=8 addr=192.168.10.128:37585
fd=6 name=sentinel-21e629e6-cmd age=383
idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=0 qbuf-free=32768
obl=36 oll=0 omem=0 events=rw cmd=exec')
2050:M 07 Mar 23:01:54.870
# CONFIG REWRITE executed with success.
¸´ÖÆ´úÂë
¸´ÖÆ´úÂë
[root@Redis_Master redis]
# tail -f logs/redis_6379.log
2050:S 07 Mar 23:01:52.367
# Error condition on socket for
SYNC: Connection refused
2050:S 07 Mar 23:01:53.382
* Connecting to MASTER
192.168.10.132:6379
2050:S 07 Mar 23:01:53.384
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:53.384
# Error condition on socket for SYNC:
Connection refused
2050:S 07 Mar 23:01:54.404
* Connecting to MASTER 192.168.10.132:6379
2050:S 07 Mar 23:01:54.405
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:54.406
# Error condition on socket for SYNC: Connection refused
2050:M 07 Mar 23:01:54.868
* Discarding previously cached master state.
2050:M 07 Mar 23:01:54.868
* MASTER MODE enabled
(user request from 'id=8 addr=192.168.10.128:37585
fd=6 name=sentinel-21e629e6-cmd age=383 idle=0 flags=x
db=0 sub=0 psub=0 multi=3 qbuf=0 qbuf-free=32768 obl=36
oll=0 omem=0 events=rw cmd=exec')
2050:M 07 Mar 23:01:54.870
# CONFIG REWRITE executed with success.
¸´ÖÆ´úÂë |
4¡¢Ôٲ鿴SentinelµÄ¼àÊÓÐÅÏ¢£¬¿ÉÒÔ¿´µ½ÐµÄRedis_MasterÒѾÊÇ192.168.10.131ÁË£º
¸´ÖÆ´úÂë
[root@Sentinel_1 sentinel]# redis-cli -p 26379
127.0.0.1:26379> INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master-6379,status=ok,address
=192.168.10.131:6379,slaves=1,sentinels=3
127.0.0.1:26379>
¸´ÖÆ´úÂë |
¹ÊÕÏ×ªÒÆºóµÄÓʼþ±¨¾¯ÈçÏ£º
5¡¢°Ñdown»úµÄRedisÆô¶¯£¬Sentinel ÓÖ»á°ÑËü¼Ó½øÀ´À´£¬×÷ΪSlaveµÄ½ÇÉ«£º
[root@Redis_Slave redis]# sh redis start
Starting Redis server...
[root@Redis_Slave redis]# |
²é¿´Sentinel log£º
2115:X 07 Mar 23:18:49.4
9 * +convert-to-slave slave
192.168.10.132:6379 192.168.10.132 6379
@ master-6379 192.168.10.131 6379 |
Ôٲ鿴Redis-Master log£º
¸´ÖÆ´úÂë
[root@Redis_Master redis]
# tail -f logs/redis_6379.log
2050:S 07 Mar 23:01:52.367
# Error condition on socket for SYNC: Connection refused
2050:S 07 Mar 23:01:53.382
* Connecting to MASTER 192.168.10.132:6379
2050:S 07 Mar 23:01:53.384
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:53.384
# Error condition on socket for SYNC: Connection refused
2050:S 07 Mar 23:01:54.404
* Connecting to MASTER 192.168.10.132:6379
2050:S 07 Mar 23:01:54.405
* MASTER <-> SLAVE sync started
2050:S 07 Mar 23:01:54.406
# Error condition on socket for SYNC: Connection refused
2050:M 07 Mar 23:01:54.868
* Discarding previously cached master state.
2050:M 07 Mar 23:01:54.868
* MASTER MODE enabled (user request from 'id=8
addr=192.168.10.128:37585
fd=6 name=sentinel-21e629e6-cmd age=383
idle=0 flags=x db=0 sub=0 psub=0 multi=3 qbuf=0 qbuf-free=32768
obl=36 oll=0 omem=0 events=rw cmd=exec')
2050:M 07 Mar 23:01:54.870
# CONFIG REWRITE executed with success.
2050:M 07 Mar 23:10:22.009
* 1 changes in 900 seconds. Saving...
2050:M 07 Mar 23:10:22.126
* Background saving started by pid 2084
2084:C 07 Mar 23:10:22.167
* DB saved on disk
2084:C 07 Mar 23:10:22.167
* RDB: 4 MB of memory used by copy-on-write
2050:M 07 Mar 23:10:22.229
* Background saving terminated with success
2050:M 07 Mar 23:18:49.389
* Slave 192.168.10.132:6379 asks for synchronization
2050:M 07 Mar 23:18:49.389
* Full resync requested by slave 192.168.10.132:6379
2050:M 07 Mar 23:18:49.389
* Starting BGSAVE for SYNC with target: disk
2050:M 07 Mar 23:18:49.417
* Background saving started by pid 2085
2085:C 07 Mar 23:18:49.428
* DB saved on disk
2085:C 07 Mar 23:18:49.429
* RDB: 4 MB of memory used by copy-on-write
2050:M 07 Mar 23:18:49.479
* Background saving terminated with success
2050:M 07 Mar 23:18:49.479
* Synchronization with slave 192.168.10.132:6379 succeeded
¸´ÖÆ´úÂë
|
Ôٲ鿴Redis_SlaveµÄlog£º
¸´ÖÆ´úÂë
2514:S 07 Mar 23:18:48.859
# CONFIG REWRITE executed with success.
2514:S 07 Mar 23:18:49.049
* Connecting to MASTER 192.168.10.131:6379
2514:S 07 Mar 23:18:49.053
* MASTER <-> SLAVE sync started
2514:S 07 Mar 23:18:49.055
* Non blocking connect for SYNC fired the event.
2514:S 07 Mar 23:18:49.059
* Master replied to PING, replication can continue...
2514:S 07 Mar 23:18:49.065
* Partial resynchronization not possible (no cached master)
2514:S 07 Mar 23:18:49.099
* Full resync from master: 3e1fbd2ec6f57b3362687051ab1bb6edf1d2ee27:1
2514:S 07 Mar 23:18:49.157
* MASTER <-> SLAVE sync: receiving 34 bytes from master
2514:S 07 Mar 23:18:49.157
* MASTER <-> SLAVE sync: Flushing old data
2514:S 07 Mar 23:18:49.157
* MASTER <-> SLAVE sync: Loading DB in memory
2514:S 07 Mar 23:18:49.157
* MASTER <-> SLAVE sync: Finished with success
¸´ÖÆ´úÂë
|
¿ÉÒÔ¿´µ½RedisÖ÷´Óͬ²½»¹ÊÇÕý³£ÔËÐеġ£¸ü¶àµÄ²âÊÔ¾ÍÁô¸øÍ¬Ñ§ÃÇÁË^o^
×ܽ᣺
Ò»¡¢Redis-SentinelÊÇRedis¹Ù·½ÍƼöµÄ¸ß¿ÉÓÃÐÔ(HA)½â¾ö·½°¸£¬»¹ÊDZȽϿɿ¿µÄ£¬ÍƼö´ó¼ÒÔÚÉú²ú»·¾³²¿Êð²¢Ê¹ÓÃ
¶þ¡¢Redis-Sentinel¿ÉÒÔ×Ô¶¨Òå¹ÊÕÏ×ªÒÆ½Å±¾£¬Õ⻹ÊDZȽÏÈËÐÔ»¯µÄ£¬¿ÉÒÔ½áºÏshell½Å±¾»òÕßPython½Å±¾
Èý¡¢ÏÖÔÚRedis¸ß¿ÉÓüܹ¹·Ç³£¶à£¬µ«¸÷ÓÐÓÅÁÓ£¬ÐèҪ˵µÄÊÇ£¬Èç¹ûÒªÉÏRedis¸ß¿ÉÓüܹ¹£¬ÐèÒª·´¸´²âÊÔ¡£ |