ÕªÒª
Redis Cluster±¾ÉíÌṩÁË×Ô¶¯½«Êý¾Ý·ÖÉ¢µ½Redis Cluster²»Í¬½ÚµãµÄÄÜÁ¦£¬·ÖÇøÊµÏֵĹؼüµãÎÊÌâ°üÀ¨£ºÈçºÎ½«Êý¾Ý×Ô¶¯µØ´òÉ¢µ½²»Í¬µÄ½Úµã£¬Ê¹µÃ²»Í¬½ÚµãµÄ´æ´¢Êý¾ÝÏà¶Ô¾ùÔÈ£»ÈçºÎ±£Ö¤¿Í»§¶ËÄܹ»·ÃÎʵ½ÕýÈ·µÄ½ÚµãºÍÊý¾Ý£»ÈçºÎ±£Ö¤ÖØÐÂ·ÖÆ¬µÄ¹ý³ÌÖв»Ó°ÏìÕý³£·þÎñ¡£ÕâÆªÎÄÕÂͨ¹ýÁ˽âÕâЩÎÊÌâÀ´ÈÏʶRedis
Cluster·ÖÇøÊµÏÖÔÀí¡£
ÈÏʶRedis Cluster
Redis ClusterÊÇÓɶà¸öͬʱ·þÎñÓÚÒ»¸öÊý¾Ý¼¯ºÏµÄRedisʵÀý×é³ÉµÄÕûÌ壬¶ÔÓÚÓû§À´Ëµ£¬Óû§Ö»¹Ø×¢Õâ¸öÊý¾Ý¼¯ºÏ£¬¶øÕû¸öÊý¾Ý¼¯ºÏµÄij¸öÊý¾Ý×Ó¼¯´æ´¢ÔÚÄĸö½Úµã¶ÔÓÚÓû§À´ËµÊÇ͸Ã÷µÄ¡£Redis
Cluster¾ßÓзֲ¼Ê½ÏµÍ³µÄÌØµã£¬Ò²¾ßÓзֲ¼Ê½ÏµÍ³ÈçºÎʵÏָ߿ÉÓÃÐÔÓëÊý¾ÝÒ»ÖÂÐÔµÄÄѵ㣬Óɶà¸öRedisʵÀý×é³ÉµÄRedis
Cluster½á¹¹Í¨³£ÈçÏ£º

Redis Cluster
Redis ClusterÌØµãÈçÏ£º
ËùÓеĽڵãÏ໥Á¬½Ó£»
¼¯ÈºÏûϢͨÐÅͨ¹ý¼¯Èº×ÜÏßͨÐÅ£¬£¬¼¯Èº×ÜÏ߶˿ڴóСΪ¿Í»§¶Ë·þÎñ¶Ë¿Ú+10000£¬Õâ¸ö10000Êǹ̶¨Öµ£»
½ÚµãÓë½ÚµãÖ®¼äͨ¹ý¶þ½øÖÆÐÒé½øÐÐͨÐÅ£»
¿Í»§¶ËºÍ¼¯Èº½ÚµãÖ®¼äͨÐźÍͨ³£Ò»Ñù£¬Í¨¹ýÎı¾ÐÒé½øÐУ»
¼¯Èº½Úµã²»»á´úÀí²éѯ£»
Redis Cluster·ÖÇøÊµÏÖÔÀí
²Û£¨slot£©¸ÅÄî
Redis ClusterÖÐÓÐÒ»¸ö16384³¤¶ÈµÄ²ÛµÄ¸ÅÄËûÃǵıàºÅΪ0¡¢1¡¢2¡¢3¡¡16382¡¢16383¡£Õâ¸ö²ÛÊÇÒ»¸öÐéÄâµÄ²Û£¬²¢²»ÊÇÕæÕý´æÔڵġ£Õý³£¹¤×÷µÄʱºò£¬Redis
ClusterÖеÄÿ¸öMaster½Úµã¶¼»á¸ºÔðÒ»²¿·ÖµÄ²Û£¬µ±ÓÐij¸ökey±»Ó³É䵽ij¸öMaster¸ºÔðµÄ²Û£¬ÄÇôÕâ¸öMaster¸ºÔðΪÕâ¸ökeyÌṩ·þÎñ£¬ÖÁÓÚÄĸöMaster½Úµã¸ºÔðÄĸö²Û£¬ÕâÊÇ¿ÉÒÔÓÉÓû§Ö¸¶¨µÄ£¬Ò²¿ÉÒÔÔÚ³õʼ»¯µÄʱºò×Ô¶¯Éú³É£¨redis-trib.rb½Å±¾£©¡£ÕâÀïÖµµÃÒ»ÌáµÄÊÇ£¬ÔÚRedis
ClusterÖУ¬Ö»ÓÐMaster²ÅÓµÓв۵ÄËùÓÐȨ£¬Èç¹ûÊÇij¸öMasterµÄslave£¬Õâ¸öslaveÖ»¸ºÔð²ÛµÄʹÓ㬵«ÊÇûÓÐËùÓÐȨ¡£Redis
ClusterÔõô֪µÀÄÄЩ²ÛÊÇÓÉÄÄЩ½Úµã¸ºÔðµÄÄØ£¿Ä³¸öMasterÓÖÔõô֪µÀij¸ö²Û×Ô¼ºÊDz»ÊÇÓµÓÐÄØ£¿
λÐòÁнṹ
Master½Úµãά»¤×ÅÒ»¸ö16384/8×Ö½ÚµÄλÐòÁУ¬Master½ÚµãÓÃbitÀ´±êʶ¶ÔÓÚij¸ö²Û×Ô¼ºÊÇ·ñÓµÓС£±ÈÈç¶ÔÓÚ±àºÅΪ1µÄ²Û£¬MasterÖ»ÒªÅжÏÐòÁеĵڶþ루Ë÷Òý´Ó0¿ªÊ¼£©ÊDz»ÊÇΪ1¼´¿É¡£

λÐòÁÐ
ÈçÉÏÃæµÄÐòÁУ¬±íʾµ±Ç°MasterÓµÓбàºÅΪ1£¬134µÄ²Û¡£¼¯ÈºÍ¬Ê±»¹Î¬»¤×Ų۵½¼¯Èº½ÚµãµÄÓ³É䣬ÊÇÓɳ¤¶ÈΪ16384ÀàÐÍΪ½ÚµãµÄÊý×éʵÏֵģ¬²Û±àºÅΪÊý×éµÄϱ꣬Êý×éÄÚÈÝΪ¼¯Èº½Úµã£¬ÕâÑù¾Í¿ÉÒÔºÜ¿ìµØÍ¨¹ý²Û±àºÅÕÒµ½¸ºÔðÕâ¸ö²ÛµÄ½Úµã¡£Î»ÐòÁÐÕâ¸ö½á¹¹ºÜ¾«ÇÉ£¬¼´²»ÀË·Ñ´æ´¢¿Õ¼ä£¬²Ù×÷ÆðÀ´Óֺܱã½Ý¡£
¼ü¿Õ¼ä·Ö²¼»ù±¾Ëã·¨
ÕâÀï½²µÄÊÇRedis ClusterÈçºÎ½«¼ü¿Õ¼ä·Ö²¼ÔÚ²»Í¬µÄ½ÚµãµÄ£¬¼ü¿Õ¼äÒâΪRedis ClusterËùÓµÓÐÓû§ËùÓÐÊý¾Ý¼¯ºÏµÄ¼üµÄȡֵ·¶Î§£¬Õâ¸ö·¶Î§½Ð×ö¼ü¿Õ¼ä¡£Ìáµ½¿Õ¼ä·Ö²¼£¬±ØÈ»»áÏëµ½¹þÏ£Ëã·¨£¬Ã»´í£¬Í¨¹ý¹þÏ£Ëã·¨ÔÙ¼ÓÉÏȡģÔËËã¿ÉÒÔ½«Ò»¸öÖµ¹Ì¶¨µØÓ³É䵽ij¸öÇø¼ä£¬ÔÚÕâÀÕâ¸öÇø¼ä½Ð×öslots£¬Çø¼äÓÉÁ¬ÐøµÄslot×é³É¡£ÔÚRedis
ClusterÖУ¬ÎÒÃÇÓµÓÐ16384¸öslot£¬Õâ¸öÊýÊǹ̶¨µÄ£¬ÎÒÃÇ´æ´¢ÔÚRedis ClusterÖеÄËùÓеļü¶¼»á±»Ó³Éäµ½ÕâЩslotÖУ¬ÏÂÃæ½²½²Redis
ClusterÊÇÈçºÎ×öÓ³ÉäµÄ¡£
¼üµ½slotµÄ»ù±¾Ó³ÉäËã·¨ÈçÏ£º
HASH_SLOT = CRC16(key) mod 16384! |
ÓÃRedisÖеĴúÂë±íʾÈçÏ£¨Õâ¸ö´úÂë±»ÉÔ΢ÐÞ¸ÄÁËһϣ¬ºóÃæ»á»¹Ô£©£º
¾¹ý¼òµ¥µÄ¼ÆËã¾ÍµÃµ½Á˵±Ç°keyÓ¦¸ÃÊÇ´æ´¢ÔÚÄĸöslotÀïÃæ£¬ÖµµÃ×¢ÒâµÄÊÇ£¬Ö¸¶¨µÄkey»á±»´æ´¢ÔÚÄĸöslot£¬Õâ¸ö¹ØÏµÊÇÌú´ò²»±äµÄ¡£Èç¹ûÎÒÌá½»ÁËÒ»ÅúÃüÁÍùRedisÖд洢һÅú¼ü£¬ÄÇôÕâЩ¼üÒ»°ã»á±»Ó³Éäµ½²»Í¬µÄslot£¬¶ø²»Í¬µÄslotÓÖ¿ÉÄÜÓÉRedis
ClusterÖв»Í¬µÄ½Úµã·þÎñ£¬ÕâÑù¾ÍºÍµÄÔ¤ÆÚÓе㲻ͬ£¬ÓÐûÓа취½«ÕâÅú¼üÓ³É䵽ͬһ¸öslotÄØ£¿´ð°¸ÊÇ¿ÉÒÔ¡£
¼ü¹þÏ£±êÇ©ÔÀí
¼ü¹þÏ£±êÇ©ÊÇÒ»ÖÖ¿ÉÒÔÈÃÓû§Ö¸¶¨½«Ò»Åú¼ü¶¼Äܹ»±»´æ·ÅÔÚͬһ¸ö²ÛÖеÄʵÏÖ·½·¨£¬Óû§Î¨Ò»Òª×öµÄ¾ÍÊǰ´Õռȶ¨¹æÔòÉú³Ékey¼´¿É£¬Õâ¸ö¹æÔòÊÇÕâÑùµÄ£¬Èç¹ûÎÒÓжÔÓÚͬһ¸öÓû§ÓÐÁ½ÖÖ²»Í¬º¬ÒåµÄÁ½·ÝÊý¾Ý£¬ÎÒÖ»Òª½«ËûÃǵļüÉèÖÃΪÏÂÃæ¼´¿É:
abc{userId}defºÍghi{userId}jkl |
redisÔÚ¼ÆËã²Û±àºÅµÄʱºòÖ»»á»ñÈ¡{}Ö®¼äµÄ×Ö·û´®½øÐв۱àºÅ¼ÆË㣬ÕâÑùÓÉÓÚÉÏÃæÁ½¸ö²»Í¬µÄ¼ü£¬{}ÀïÃæµÄ×Ö·û´®ÊÇÏàͬµÄ£¬Òò´ËËûÃÇ¿ÉÒÔ±»¼ÆËã³öÏàͬµÄ²Û£¬Ïà¹Ø´úÂëÈçÏ£º
unsigned int keyHashSlot(char *key, int keylen) { int s, e; for (s = 0; s < keylen; s++) if (key[s] == '{') break;
if (s == keylen) return crc16(key,keylen) &
0x3FFF;
for (e = s+1; e < keylen; e++)
if (key[e] == '}') break;
if (e == keylen || e == s+1) return crc16(key,keylen)
& 0x3FFF;
return crc16(key+s+1,e-s-1) & 0x3FFF;
} |
¿Í»§¶ËÊÇÔõôÔÚRedis ClusterÖÐÕÒµ½ÕýÈ·µÄ½ÚµãµÄÄØ£¿ÏÂÃæ¿´¿´¡£
ÖØ¶¨Ïò¿Í»§¶Ë
ÎÄÕ¿ªÊ¼½²µ½£¬Redis Cluster²¢²»»á´úÀí²éѯ£¬ÄÇôÈç¹û¿Í»§¶Ë·ÃÎÊÁËÒ»¸ökey²¢²»´æÔڵĽڵ㣬Õâ¸ö½ÚµãÊÇÔõô´¦ÀíµÄÄØ£¿±ÈÈçÎÒÏë»ñÈ¡keyΪmsgµÄÖµ£¬msg¼ÆËã³öÀ´µÄ²Û±àºÅΪ254£¬µ±Ç°½ÚµãÕýºÃ²»¸ºÔð±àºÅΪ254µÄ²Û£¬ÄÇô¾Í»á·µ»Ø¿Í»§¶ËÏÂÃæÐÅÏ¢£º
GET msg -MOVED 254 127.0.0.1:6381 |
±íʾ¿Í»§¶ËÏëÒªµÄ254²ÛÓÉÔËÐÐÔÚIPΪ127.0.0.1£¬¶Ë¿ÚΪ6381µÄMasterʵÀý·þÎñ¡£Èç¹û¸ù¾Ýkey¼ÆËãµÃ³öµÄ²ÛÇ¡ºÃÓɵ±Ç°½Úµã¸ºÔð£¬Ôòµ±ÆÚ½Úµã»áÁ¢¼´·µ»Ø½á¹û¡£ÕâÀïÃ÷ȷһϣ¬Ã»ÓдúÀíµÄRedis
Cluster¿ÉÄܻᵼÖ¿ͻ§¶ËÁ½´ÎÁ¬½Ó¼±ÈºÖеĽڵã²ÅÄÜÕÒµ½ÕýÈ·µÄ·þÎñ£¬ÍƼö¿Í»§¶Ë»º´æÁ¬½Ó£¬ÕâÑù×µÄÇé¿öÊÇÁ½´ÎÍù·µÍ¨ÐÅ¡£
ÖØÐÂ·ÖÆ¬£¨Resharding£©
ÖØÐÂ·ÖÆ¬ÒâΪ²Ûµ½¼¯Èº½ÚµãµÄÓ³Éä¹ØÏµÒª¸Ä±ä£¬²»±äµÄÊǼüµ½²ÛµÄÓ³Éä¹ØÏµ£¬Òò´Ëµ±ÖØÐÂ·ÖÆ¬µÄʱºò£¬Èç¹û²ÛÖÐÓмü£¬ÄÇô¼üÒ²ÊÇÒª±»Òƶ¯µ½ÐµĽڵãµÄ¡£ÏÂÃæ¿´¿´ÖØÐÂ·ÖÆ¬ÊÇÔõô×öµÄ£¬¼ÙÈçÎÒÃÇÓÐÒ»Åú²ÛÐèÒª´ÓÒ»¸öMaster½ÚµãÒÆ¶¯µ½ÁíÒ»¸öMaster½Úµã£º

²ÛÇ¨ÒÆÊ¾Òâͼ
ÕâÀï¼ò»¯Ä£ÐÍ£¬¼ÙÉèÕâÅú´ýÇ¨ÒÆµÄ²Û±àºÅΪ1¡¢2¡¢3£¬²¢¼ÙÉè×ó±ßµÄ½ÚµãΪMasterA½Úµã£¬ÓұߵĽڵãΪMasterB½Úµã¡£
²ÛÇ¨ÒÆµÄ¹ý³Ì
²ÛÇ¨ÒÆµÄ¹ý³ÌÖÐÓÐÒ»¸ö²»Îȶ¨×´Ì¬£¬Õâ¸ö²»Îȶ¨×´Ì¬»áÓÐһЩ¹æÔò£¬ÕâЩ¹æÔò¶¨Òå¿Í»§¶ËµÄÐÐΪ£¬´Ó¶øÊ¹µÃRedis
Cluster²»±Øå´»úµÄÇé¿öÏ¿ÉÒÔÖ´Ðв۵ÄÇ¨ÒÆ¡£ÏÂÃæÕâÕÅͼÃèÊöÁËÎÒÃÇÇ¨ÒÆ±àºÅΪ1¡¢2¡¢3µÄ²ÛµÄ¹ý³ÌÖУ¬ËûÃÇÔÚMasterA½ÚµãºÍMaster½ÚµãÖеÄ״̬¡£²Û1¡¢2¡¢3ÔÚMasterA½ÚµãÖеÄ״̬ΪMIGRATING£¬ÔÚMasterB½ÚµãÖеÄ״̬ΪIMPORTING¡£

²ÛÇ¨ÒÆÖмä״̬
MIGRATING״̬
±¾ÀýÖÐMIGRATING״̬ÊÇ·¢ÉúÔÚMasterA½ÚµãÖеÄÒ»ÖÖ²ÛµÄ״̬£¬Ô¤±¸Ç¨ÒƲ۵Äʱºò²ÛµÄ״̬Ê×ÏÈ»á±äΪMIGRATING״̬£¬ÕâÖÖ״̬µÄ²Û»áʵ¼Ê²úÉúʲôӰÏìÄØ?µ±¿Í»§¶ËÇëÇóµÄij¸öKeyËùÊôµÄ²Û´¦ÓÚMIGRATING״̬µÄʱºò£¬Ó°ÏìÓÐÏÂÃæ¼¸Ìõ£º
Èç¹ûKey´æÔÚÔò³É¹¦´¦Àí
Èç¹ûKey²»´æÔÚ£¬Ôò·µ»Ø¿Í»§¶ËASK£¬½öµ±Õâ´ÎÇëÇó»áתÏòÁíÒ»¸ö½Úµã£¬²¢²»»áˢпͻ§¶ËÖÐnodeµÄÓ³Éä¹ØÏµ£¬Ò²¾ÍÊÇ˵Ï´θÿͻ§¶ËÇëÇó¸ÃKeyµÄʱºò£¬»¹»áÑ¡ÔñMasterA½Úµã
Èç¹ûKey°üº¬¶à¸öÃüÁÈç¹û¶¼´æÔÚÔò³É¹¦´¦Àí£¬Èç¹û¶¼²»´æÔÚ£¬Ôò·µ»Ø¿Í»§¶ËASK£¬Èç¹ûÒ»²¿·Ö´æÔÚ£¬Ôò·µ»Ø¿Í»§¶ËTRYAGAIN£¬Í¨Öª¿Í»§¶ËÉÔºóÖØÊÔ£¬ÕâÑùµ±ËùÓеÄKey¶¼Ç¨ÒÆÍê±ÏµÄʱºò¿Í»§¶ËÖØÊÔÇëÇóµÄʱºò»ØµÃµ½ASK£¬È»ºó¾¹ýÒ»´ÎÖØ¶¨Ïò¾Í¿ÉÒÔ»ñÈ¡ÕâÅú¼ü
IMPORTING״̬
±¾ÀýÖеÄIMPORTING״̬ÊÇ·¢ÉúÔÚMasterB½ÚµãÖеÄÒ»ÖÖ²ÛµÄ״̬£¬Ô¤±¸½«²Û´ÓMasterA½ÚµãÇ¨ÒÆµ½MasterB½ÚµãµÄʱºò£¬²ÛµÄ״̬»áÊ×ÏȱäΪIMPORTING¡£IMPORTING״̬µÄ²Û¶Ô¿Í»§¶ËµÄÐÐΪÓÐÏÂÃæÒ»Ð©Ó°Ï죺
Õý³£ÃüÁî»á±»MOVEDÖØ¶¨Ïò£¬Èç¹ûÊÇASKINGÃüÁîÔòÃüÁî»á±»Ö´ÐУ¬´Ó¶øKeyûÓÐÔÚÀϵĽڵãÒѾ±»Ç¨ÒƵ½ÐµĽڵãµÄÇé¿ö¿ÉÒÔ±»Ë³Àû´¦Àí£»
Èç¹ûKey²»´æÔÚÔòн¨£»
ûÓÐASKINGµÄÇëÇóºÍÕý³£ÇëÇóÒ»Ñù±»MOVED£¬Õâ±£Ö¤¿Í»§¶ËnodeÓ³Éä¹ØÏµ³ö´íµÄÇé¿öϲ»»á·¢Éúд´í£»

¼ü¿Õ¼äÇ¨ÒÆ
¼ü¿Õ¼äÇ¨ÒÆÊÇÖ¸µ±Âú×ãÁ˲ÛÇ¨ÒÆÇ°ÌáµÄÇé¿öÏ£¬ÎÒÃǾͿÉÒÔͨ¹ýÏà¹ØÃüÁ²Û1¡¢2¡¢3Öеļü¿Õ¼ä´ÓMasterA½Úµã×ªÒÆµ½MasterB½Úµã£¬Õâ¸ö¹ý³ÌÕæÕýʵÏÖÊý¾Ý×ªÒÆ¡£Ïà¹ØÃüÁ
MIGRATE
DUMP
RESTORE
DEL
MIGRATEÃüÁîͨ¹ýÈý²½½«Êý¾Ý×ªÒÆ£¬Ê¾ÒâͼÈçÏ£º
¼ü¿Õ¼äÇ¨ÒÆ²½Öè
¾¹ýÉÏÃæÈý²½¿ÉÒÔ½«¼ü¿Õ¼äÊý¾ÝÇ¨ÒÆ£¬È»ºóÔÙ½«´¦ÓÚMIGRATINGºÍIMPORTING״̬µÄ²Û±äΪ³£Ì¬¼´¿É£¬Íê³ÉÕû¸öÖØÐÂ·ÖÆ¬µÄ¹ý³Ì¡£È»¶øMIGRATE²¢²»ÊÇÔ×ӵģ¬Èç¹ûÔÚMIGRATE³öÏÖ´íÎóµÄÇé¿ö¿ÉÄܻᵼÖÂÏÂÃæÎÊÌ⣺
¼ü¿Õ¼äÔÚÁ½¸ö½Úµã¶¼´æÔÚ£»
¼ü¿Õ¼äÖ»´æÔÚµÚÒ»¸ö½Úµã£»
×ܽá
±¾ÎĽéÉÜRedis Cluster·ÖÇøÊµÏÖÔÀíÖ÷Òª¹Ø×¢Èý¸öÎÊÌ⣬1£©Êý¾ÝÊÇÈçºÎ±»×Ô¶¯·ÖÉ¢µ½²»Í¬µÄ½ÚµãµÄ£»2£©¿Í»§¶ËÊÇÈçºÎÄܹ»ÕýÈ·ÕÒµ½½ÚµãµÄ£»3£©¼ü¿Õ¼äÇ¨ÒÆ¹ý³ÌÊÇÔõôÑùµÄ£¿Æä´ÎÊÇһЩʵÏÖСϸ½Ú£¬Í¨¹ýÁ˽âÕâЩÎÊÌâ¸üºÃµØÁËÕâЩÎÊÌâ´Ó¶ø¸üºÃµØÈÏʶRedis
Cluster·ÖÇø¹¦ÄÜ¡£
|