±à¼ÍƼö: |
±¾ÎĽéÉÜÁËkuduÊÇʲô£¬ÎªÊ²Ã´ÐèÒªkudu?
»ù´¡¼Ü¹¹£¬´æ´¢»úÖÆ£¬kuduµÄ¹¤×÷»úÖÆ¼°KUDUµÄjava²Ù×÷°¸Àý¡£
±¾ÎÄÀ´×Ô csdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
Redis ¼¯ÈºµÄ TCP ¶Ë¿Ú(Redis Cluster TCP ports)
ÿ¸ö Redis ¼¯Èº½ÚµãÐèÒªÁ½¸ö TCP Á¬½Ó´ò¿ª¡£Õý³£µÄ TCP
¶Ë¿ÚÓÃÀ´·þÎñ¿Í»§¶Ë£¬ÀýÈç 6379£¬¼Ó 10000 µÄ¶Ë¿ÚÓÃ×÷Êý¾Ý¶Ë¿Ú£¬ÔÚÉÏÃæµÄÀý×ÓÖоÍÊÇ 16379¡£
µÚ¶þ¸ö´óһЩµÄ¶Ë¿ÚÓÃÓÚ¼¯Èº×ÜÏß(bus)£¬Ò²¾ÍÊÇʹÓöþ½øÖÆÐÒéµÄµãµ½µãͨÐÅͨµÀ¡£¼¯Èº×ÜÏß±»½ÚµãÓà ÓÚ´íÎó¼ì²â£¬ÅäÖøüУ¬¹ÊÕÏ×ªÒÆÊÚȨµÈµÈ¡£¿Í»§¶Ë²»Ó¦¸Ã³¢ÊÔÁ¬½Ó¼¯Èº×ÜÏ߶˿ڣ¬¶øÓ¦Ò»Ö±ÓëÕý³£µÄ
Redis ÃüÁî¶Ë¿ÚͨÐÅ£¬µ«ÊÇҪȷ±£ÔÚ·À»ðǽÖдò¿ªÁËÕâÁ½¸ö¶Ë¿Ú£¬·ñÔò Redis ¼¯ÈºµÄ½Úµã²»ÄÜÏ໥ͨÐÅ¡£
ÃüÁî¶Ë¿ÚºÍ¼¯Èº×ÜÏß¶Ë¿ÚµÄÆ«ÒÆÁ¿Ò»Ö±¹Ì¶¨Îª 10000¡£ ×¢Ò⣬ΪÁËÈà Redis ¼¯Èº¹¤×÷Õý³££¬¶Ôÿ¸ö½Úµã£º
1. ÓÃÓÚÓë¿Í»§¶ËͨÐŵÄÕý³£µÄ¿Í»§¶ËͨÐŶ˿Ú(ͨ³£Îª 6379)ÐèÒª¿ª·Å¸øËùÓÐÐèÒªÁ¬½Ó¼¯ÈºµÄ¿Í»§¶Ë
ÒÔ¼°ÆäËû¼¯Èº½Úµã(ʹÓÿͻ§¶Ë¶Ë¿ÚÀ´½øÐмüÇ¨ÒÆ)¡£ 2. ¼¯Èº×ÜÏß¶Ë¿Ú(¿Í»§¶Ë¶Ë¿Ú¼Ó 10000)±ØÐë´ÓËùÓÐµÄÆäËû¼¯Èº½Úµã¿É´ï¡£
Èç¹ûÄã²»´ò¿ªÕâÁ½¸ö TCP ¶Ë¿Ú£¬¼¯Èº¾ÍÎÞ·¨Õý³£¹¤×÷¡£
Redis ¼¯ÈºµÄÊý¾Ý·ÖƬ(Redis Cluster data sharding)
Redis ¼¯ÈºÃ»ÓÐʹÓÃÒ»ÖÂÐÔ¹þÏ££¬¶øÊÇÁíÍâÒ»ÖÖ²»Í¬µÄ·ÖƬÐÎʽ£¬Ã¿¸ö¼ü¸ÅÄîÉÏÊDZ»ÎÒÃdzÆÎª¹þÏ£²Û (hash
slot)µÄ¶«Î÷µÄÒ»²¿·Ö¡£ Redis ¼¯ÈºÓÐ 16384 ¸ö¹þÏ£²Û£¬ÎÒÃÇÖ»ÊÇʹÓüüµÄ CRC16
±àÂë¶Ô 16384 ȡģÀ´¼ÆËãÒ»¸öÖ¸¶¨¼üËùÊôµÄ ¹þÏ£²Û¡£ ÿһ¸ö Redis ¼¯ÈºÖеĽڵ㶼³Ðµ£Ò»¸ö¹þÏ£²ÛµÄ×Ó¼¯£¬ÀýÈ磬Äã¿ÉÄÜÓÐÒ»¸ö
3 ¸ö½ÚµãµÄ¼¯Èº£¬ÆäÖУº

½Úµã A °üº¬´Ó 0 µ½ 5500 µÄ¹þÏ£²Û¡£
½Úµã B °üº¬´Ó 5501 µ½ 11000 µÄ¹þÏ£²Û¡£
½Úµã C °üº¬´Ó 11001 µ½ 16384 µÄ¹þÏ£²Û¡£
Õâ¿ÉÒÔÈÃÔÚ¼¯ÈºÖÐÌí¼ÓºÍÒÆ³ý½Úµã·Ç³£ÈÝÒס£ÀýÈ磬Èç¹ûÎÒÏëÌí¼ÓÒ»¸öнڵã D£¬ÎÒÐèÒª´Ó½Úµã A£¬B£¬
C ÒÆ¶¯Ò»Ð©¹þÏ£²Ûµ½½Úµã D¡£Í¬ÑùµØ£¬Èç¹ûÎÒÏë´Ó¼¯ÈºÖÐÒÆ³ý½Úµã A£¬ÎÒÖ»ÐèÒªÒÆ¶¯ A µÄ¹þÏ£²Ûµ½ B
ºÍ C¡£ µ±½Úµã A ±ä³É¿ÕµÄÒÔºó£¬ÎҾͿÉÒÔ´Ó¼¯ÈºÖг¹µ×ɾ³ýËü¡£ ÒòΪ´ÓÒ»¸ö½ÚµãÏòÁíÒ»¸ö½ÚµãÒÆ¶¯¹þÏ£²Û²¢²»ÐèҪֹͣ²Ù×÷£¬ËùÒÔÌí¼ÓºÍÒÆ³ý½Úµã£¬»òÕ߸ıä½Úµã³ÖÓÐ
µÄ¹þÏ£²Û°Ù·Ö±È£¬¶¼²»ÐèÒªÈκÎÍ£»úʱ¼ä(downtime)¡£
Redis cluster ¼Ü¹¹(Redis Cluster Architecture)
redis-cluster ¼Ü¹¹Í¼

¼Ü¹¹Ï¸½Ú:
ËùÓÐµÄ redis ½Úµã±Ë´Ë»¥Áª(PING-PONG »úÖÆ),ÄÚ²¿Ê¹Óöþ½øÖÆÐÒéÓÅ»¯´«ÊäËٶȺʹø¿í.
½ÚµãµÄ fail ÊÇͨ¹ý¼¯ÈºÖг¬¹ý°ëÊýµÄ½Úµã¼ì²âʧЧʱ²ÅÉúЧ.
¿Í»§¶ËÓë redis ½ÚµãÖ±Á¬,²»ÐèÒªÖмä proxy ²ã.¿Í»§¶Ë²»ÐèÒªÁ¬½Ó¼¯ÈºËùÓнڵã,Á¬½Ó¼¯ÈºÖÐÈκÎÒ»¸ö
¿ÉÓýڵ㼴¿É
redis-cluster °ÑËùÓеÄÎïÀí½ÚµãÓ³Éäµ½[0-16383]slot ÉÏ,cluster
¸ºÔðά»¤ node<->slot<->value
redis-cluster Ñ¡¾Ù:ÈÝ´í

ÁìÐäÑ¡¾Ù¹ý³ÌÊǼ¯ÈºÖÐËùÓÐ master ²ÎÓë,Èç¹û°ëÊýÒÔÉÏ master
½ÚµãÓë master ½ÚµãͨÐų¬¹ý (cluster-node-timeout),ÈÏΪµ±Ç° master
½Úµã¹Òµô.
ʲôʱºòÕû¸ö¼¯Èº²»¿ÉÓÃ(cluster_state:fail)
a:Èç¹û¼¯ÈºÈÎÒâ master ¹Òµô,ÇÒµ±Ç° master ûÓÐ slave.¼¯Èº½øÈë fail
״̬,Ò²¿ÉÒÔÀí½â³É¼¯ÈºµÄ slot Ó³ Éä[0-16383]²»Íê³Éʱ½øÈë fail ״̬. ps :
redis-3.0.0.rc1 ¼ÓÈë cluster-require-full-coverage ²ÎÊý,ĬÈϹرÕ,
´ò¿ª¼¯Èº¼æÈݲ¿·Öʧ°Ü.
b:Èç¹û¼¯Èº³¬¹ý°ëÊýÒÔÉÏ master ¹Òµô£¬ÎÞÂÛÊÇ·ñÓÐ slave ¼¯Èº½øÈë fail ״̬.
ps:µ±¼¯Èº²»¿ÉÓÃʱ,ËùÓжԼ¯ÈºµÄ²Ù×÷×ö¶¼²»¿ÉÓã¬ÊÕµ½((error) CLUSTERDOWN The
cluster is down) ´íÎó
Redis ¼¯ÈºµÄÖ÷´ÓÄ£ÐÍ(Redis Cluster master-slave model)
ΪÁ˵±²¿·Ö½ÚµãʧЧʱ£¬»òÕßÎÞ·¨Óë´ó¶àÊý½ÚµãͨÐÅʱÈÔÄܱ£³Ö¿ÉÓã¬Redis ¼¯Èº²ÉÓÃÿ¸ö½ÚµãÓµÓÐ 1(Ö÷
·þÎñ×ÔÉí)µ½ N ¸ö¸±±¾(N-1 ¸ö¸½¼ÓµÄ´Ó·þÎñÆ÷)µÄÖ÷´ÓÄ£ÐÍ¡£ ÔÚÎÒÃǵÄÀý×ÓÖУ¬¼¯ÈºÓµÓÐ A£¬B£¬C
Èý¸ö½Úµã£¬Èç¹û½Úµã B ʧЧ¼¯Èº½«²»ÄܼÌÐø·þÎñ£¬ÒòΪÎÒÃDz»ÔÙ Óа취À´·þÎñÔÚ 5501-11000
·¶Î§ÄڵĹþÏ£²Û¡£ µ«ÊÇ£¬Èç¹ûµ±ÎÒÃÇ´´½¨¼¯Èººó(»òÕßÉÔºó)£¬ÎÒÃÇΪÿһ¸öÖ÷·þÎñÆ÷Ìí¼ÓÒ»¸ö´Ó·þÎñÆ÷£¬ÕâÑù×îÖյļ¯Èº
¾ÍÓÉÖ÷·þÎñÆ÷ A£¬B£¬C ºÍ´Ó·þÎñÆ÷ A1£¬B1£¬C1 ×é³É£¬Èç¹û B ½ÚµãʧЧϵͳÈÔÄܼÌÐø·þÎñ¡£
B1 ½Úµã¸´ÖÆ B ½Úµã£¬ÓÚÊǼ¯Èº»áÑ¡¾Ù B1 ½Úµã×÷ΪеÄÖ÷·þÎñÆ÷£¬²¢¼ÌÐøÕýÈ·µÄÔËת¡£

Redis ¼¯ÈºµÄÒ»ÖÂÐÔ±£Ö¤(Redis Cluster consistency guarantees)
Redis ¼¯Èº²»±£Ö¤Ç¿Ò»ÖÂÐÔ¡£Êµ¼ùÖУ¬ÕâÒâζ×ÅÔÚÌØ¶¨µÄÌõ¼þÏ£¬Redis ¼¯Èº¿ÉÄܻᶪµôһЩ±»ÏµÍ³ÊÕ
µ½µÄдÈëÇëÇóÃüÁî¡£
Redis ¼¯ÈºÎªÊ²Ã´»á¶ªÊ§Ð´ÇëÇóµÄµÚÒ»¸öÔÒò£¬ÊÇÒòΪ²ÉÓÃÁËÒì²½¸´ÖÆ¡£ÕâÒâζ×ÅÔÚдÆÚ¼äÏÂÃæµÄÊÂÇé
·¢ÉúÁË£º
ÄãµÄ¿Í»§¶ËÏòÖ÷·þÎñÆ÷ B дÈë¡£
Ö÷·þÎñÆ÷ B »Ø¸´ OK ¸øÄãµÄ¿Í»§¶Ë¡£
Ö÷·þÎñÆ÷ B ´«²¥Ð´Èë²Ù×÷µ½Æä´Ó·þÎñÆ÷ B1£¬B2 ºÍ B3¡£
ÊÖ¶¯¹ÊÕÏ×ªÒÆ(Manual failover)
ÓÐʱºòÔÚÖ÷·þÎñÆ÷ÊÂʵÉÏûÓÐÈκιÊÕϵÄÇé¿öÏÂÇ¿ÖÆÒ»´Î¹ÊÕÏ×ªÒÆÊǺÜÓÐÓõġ£ÀýÈ磬ΪÁËÉý¼¶Ö÷·þÎñ Æ÷½ÚµãÖеÄÒ»¸ö½ø³Ì£¬¿ÉÒÔ¶ÔÆä½øÐйÊÕÏ×ªÒÆÊ¹Æä±äΪһ¸ö´Ó·þÎñÆ÷£¬ÕâÑù×îС»¯Á˶ԿÉÓÃÐÔµÄÓ°Ïì¡£
Redis ¼¯ÈºÖ§³ÖʹÓà CLUSTER FAILOVER ÃüÁîÀ´ÊÖ¶¯¹ÊÕÏ×ªÒÆ£¬±ØÐëÔÚÄãÏë½øÐйÊÕÏ×ªÒÆµÄÖ÷·þÎñµÄ
ÆäÖÐÒ»¸ö´Ó·þÎñÆ÷ÉÏÖ´ÐС£
ÊÖ¶¯¹ÊÕÏ×ªÒÆºÜÌØ±ð£¬ºÍÕæÕýÒòΪÖ÷·þÎñÆ÷ʧЧ¶ø²úÉúµÄ¹ÊÕÏ×ªÒÆÒª¸ü°²È«£¬ÒòΪ²ÉÈ¡Á˱ÜÃâ¹ý³ÌÖÐÊý ¾Ý¶ªÊ§µÄ·½Ê½£¬½öµ±ÏµÍ³È·ÈÏеÄÖ÷·þÎñÆ÷´¦ÀíÍêÁ˾ɵÄÖ÷·þÎñÆ÷µÄ¸´ÖÆÁ÷ʱ£¬¿Í»§¶Ë²Å´ÓÔÖ÷·þÎñÆ÷ÇÐ
»»µ½ÐÂÖ÷·þÎñÆ÷¡£
´´½¨redis¼¯Èº(create a new cluser)
redis-trib create --replicas 1 127.0.0.1:6379 127.0.0.1:7379
127.0.0.2:6379 127.0.0.2:7379 127.0.0.3:6379 127.0.0.3:7379
127.0.0.4:6379 127.0.0.4:7379 127.0.0.5:6379 127.0.0.5:7379
²é¿´redis¼¯Èº×´Ì¬(check cluser status)
redis-trib check 127.0.0.1:7379
²é¿´node״̬(check node status)
# redis-cli -c -p 6379
# INFO
Ìí¼Óнڵã(Adding a new node)
Ìí¼ÓÒ»¸öнڵãµÄ¹ý³Ì»ù±¾ÉϾÍÊÇ£¬Ìí¼ÓÒ»¸ö¿Õ½Úµã£¬È»ºó£¬Èç¹ûÊÇ×÷ΪÖ÷½ÚµãÔòÒÆ¶¯Ò»Ð©Êý¾Ý½øÈ¥£¬ Èç¹ûÊÇ´Ó½ÚµãÔòÆä×÷Ϊij¸ö½ÚµãµÄ¸±±¾¡£
Á½ÖÖÇé¿öÎÒÃǶ¼»áÌÖÂÛ£¬ÏÈ´ÓÌí¼ÓÒ»¸öеÄÖ÷·þÎñÆ÷ʵÀý¿ªÊ¼¡£
Á½ÖÖÇé¿öÏ£¬µÚÒ»²½ÒªÍê³ÉµÄ¶¼ÊÇÌí¼ÓÒ»¸ö¿Õ½Úµã¡£
ÎÒÃÇʹÓÃÓëÆäËû½ÚµãÏàͬµÄÅäÖÃ(¶Ë¿ÚºÅ³ýÍâ)ÔÚ 7006 ¶Ë¿Ú(ÎÒÃÇÒÑ´æÔÚµÄ 6 ¸ö½ÚµãÒѾʹÓÃÁË´Ó
7000 µ½ 7005 µÄ¶Ë¿Ú)ÉÏ¿ªÆôÒ»¸öеĽڵ㣬ÄÇôΪÁËÓëÎÒÃÇ֮ǰµÄ½Úµã²¼¾ÖÒ»Ö£¬ÄãµÃÕâô×ö£º
ÔÚÄãµÄÖն˳ÌÐòÖпªÆôÒ»¸öеıêÇ©´°¿Ú¡£
½øÈë cluster-test Ŀ¼¡£
´´½¨Ò»¸öÃûΪ 7006 µÄĿ¼¡£
ÔÚÀïÃæ´´½¨Ò»¸ö redis.conf µÄÎļþ£¬ÀàËÆÓÚÆäËü½ÚµãʹÓõÄÎļþ£¬µ«ÊÇʹÓÃ
7006 ×÷Ϊ¶Ë¿ÚºÅ¡£
×îºóʹÓÃ../redis-server ./redis.conf Æô¶¯·þÎñÆ÷¡£
./redis-trib.rb
add-node 127.0.0.1:7006 127.0.0.1:7000
|
Ìí¼Ó¸±±¾½Úµã(Adding a new node as a replica)
Ìí¼ÓÒ»¸öи±±¾¿ÉÒÔÓÐÁ½ÖÖ·½Ê½¡£ÏÔ¶øÒ×¼ûµÄÒ»ÖÖ·½Ê½ÊÇÔÙ´ÎʹÓà redis-trib£¬µ«ÊÇҪʹÓáªslave
Ñ¡Ï ÏñÕâÑù£º
./redis-trib.rb
add-node --slave 127.0.0.1:7006 127.0.0.1:7000
|
×¢Ò⣬ÕâÀïµÄÃüÁîÐÐÍêÈ«ÏñÎÒÃÇÔÚÌí¼ÓÒ»¸öÐÂÖ÷·þÎñÆ÷ʱʹÓõÄÒ»Ñù£¬ËùÒÔÎÒÃÇûÓÐÖ¸¶¨Òª¸øÄĸöÖ÷·þ ÎñÆ÷Ìí¼Ó¸±±¾¡£ÕâÖÖÇé¿öÏ£¬redis-trib
»áÌí¼ÓÒ»¸öнڵã×÷Ϊһ¸ö¾ßÓнÏÉÙ¸±±¾µÄËæ»úµÄÖ÷·þÎñÆ÷µÄ¸±±¾¡£
µ«ÊÇ£¬Äã¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁîÐо«È·µØÖ¸¶¨ÄãÏëÒªµÄÖ÷·þÎñÆ÷×÷Ϊ¸±±¾µÄÄ¿±ê£º
./redis-trib.rb
add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
127.
0.0.1:7006 127.0.0.1:7000 |
ÒÆ³ý½Úµã(Removing a node)
ÒªÒÆ³ýÒ»¸ö´Ó·þÎñÆ÷½Úµã£¬Ö»ÒªÊ¹Óà redis-trib µÄ del-node
ÃüÁî¾Í¿ÉÒÔ£º
./redis-trib
del-node 127.0.0.1:7000 <node-id> |
Éý¼¶½Úµã(Upgrading nodes in a Redis Cluster)
Éý¼¶´Ó·þÎñÆ÷½ÚµãºÜ¼òµ¥£¬ÒòΪÄãÖ»ÐèҪֹͣ½ÚµãÈ»ºóÓÃÒѸüÐ嵀 Redis °æ±¾ÖØÆô¡£Èç¹ûÓпͻ§¶ËʹÓÃ
´Ó·þÎñÆ÷½Úµã·ÖÀë¶ÁÇëÇó£¬ËüÃÇÓ¦¸ÃÄܹ»ÔÚij¸ö½Úµã²»¿ÉÓÃÊ±ÖØÐÂÁ¬½ÓÁíÒ»¸ö´Ó·þÎñÆ÷¡£
Éý¼¶Ö÷·þÎñÆ÷ÒªÉÔ΢¸´ÔÓһЩ£¬½¨ÒéµÄ²½ÖèÊÇ£º
1. ʹÓà CLUSTER FAILOVER À´´¥·¢Ò»´ÎÊÖ¹¤¹ÊÕÏ×ªÒÆÖ÷·þÎñÆ÷(Çë¿´±¾ÎĵµµÄÊÖ¹¤¹ÊÕÏ×ªÒÆÐ¡
½Ú)¡£
2. µÈ´ýÖ÷·þÎñÆ÷±äΪ´Ó·þÎñÆ÷¡£
3. ÏñÉý¼¶´Ó·þÎñÆ÷ÄÇÑùÉý¼¶Õâ¸ö½Úµã¡£
4. Èç¹ûÄãÏëÈÃÄã¸Õ¸ÕÉý¼¶µÄ½Úµã³ÉΪÖ÷·þÎñÆ÷£¬´¥·¢Ò»´ÎеÄÊÖ¹¤¹ÊÕÏ×ªÒÆ£¬ÈÃÉý¼¶µÄ½ÚµãÖØÐÂ±ä »ØÖ÷·þÎñÆ÷¡£
|