±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcloud.tencent.com,CynosDBÊÇÌÚÑ¶ÔÆ×ÔÑеÄÐÂÒ»´ú¸ßÐÔÄܸ߿ÉÓÃµÄÆóÒµ¼¶·Ö²¼Ê½ÔÆÊý¾Ý¿â¡£ÈÚºÏÁË´«Í³Êý¾Ý¿â¡¢ÔƼÆËãÓëÐÂÓ²¼þµÄÓÅÊÆ,100%¼æÈÝ¿ªÔ´Êý¾Ý¿â,°ÙÍò¼¶QPSµÄ¸ßÍÌÍ¡£ |
|
ǰÑÔ
CynosDBÊǼܹ¹ÔÚCynosFSÖ®Éϵķֲ¼Ê½¹ØÏµÊý¾Ý¿âϵͳ£¬Îª×î´ó»¯ÀûÓô洢×ÊÔ´£¬Æ½ºâ×ÊÔ´Ö®¼äµÄ¾ºÕù£¬¼ì²é×ÊԴʹÓÃÇé¿ö£¬ÐèÒªÒ»Ì׸ßЧÎȶ¨µÄ·Ö²¼Ê½¼¯Èº¹ÜÀíϵͳ£¨SCM:
Storage Cluster Manager£©£¬SCMʹÓÃEtcd×÷Ϊ´æ´¢£¬ÀûÓÃEtcd RaftËã·¨Íê³ÉSCM
LeaderµÄÑ¡¾Ù£¬¶ÔÍâÌṩHTTP API ²éѯCynosFS ״̬£¬¸ºÔðCynosFSµ÷¶È£¬Æä°üº¬Á½Ààµ÷¶È£º
lPoolµ÷¶È£º¶ÔSCM ÖÐËùÓÐPool½øÐе÷¶È£¬Ã¿¸öPoolµÄµ÷¶È½«¸ù¾ÝÆä״̬£¬²úÉúÏà¹Øµ÷¶È²Ù×÷£¬°üÀ¨PoolµÄ³õʼ»¯£¬Pool×Ô¶¯À©ËõÈÝ£¬ÒÔ¼°PoolµÄÏú»ÙµÈ¡£
lSegment Groupµ÷¶È£º ÿ¸öPoolÄÚÓÐÒ»¸öSGµ÷¶ÈÆ÷£¬¸ºÔð¸ÃPoolÄÚËùÓÐSGµÄµ÷¶È£¬¸ù¾Ýÿ¸öSGµÄ״̬£¬²úÉúÏà¹ØµÄµ÷¶È²Ù×÷£¬°üÀ¨Ôö¼õ¸±±¾£¬LeaderÇл»£¬¸±±¾Ç¨ÒÆ£¬¸±±¾ÀëÏߵȡ£

Ïà¹Ø×é¼þºÍÃû´Ê½âÊÍÈçÏ£º
lDBEngine£ºÊý¾Ý¿âÒýÇæ£¬Ö§³ÖÒ»Ö÷¶à´Ó¡£
lDB Cluster Manager£¨DCM£©£ºÊý¾Ý¿â¼¯Èº¹ÜÀí£¬Æä¸ºÔðÒ»Ö÷¶à´ÓDB¼¯ÈºµÄHA¹ÜÀí¡£
lStorage Service»òStorage Node£¨SN£©£ºStorage ServiceÊǸöÂß¼¸ÅÄ·ºÖ¸Êµ¼ÊÌṩ·þÎñµÄStorage
Node¡£SNÔòÊÇ1¸ö¾ßÌåµÄ·þÎñ½ø³Ì£¬¸ºÔðÈÕÖ¾µÄ´¦Àí¡¢BLOCKÊý¾ÝµÄÒì²½»Ø·Å¡¢¶ÁÇëÇóµÄ¶à°æ±¾Ö§³ÖµÈ£¬Í¬Ê±»¹¸ºÔð½«WALLOG±¸·Ýµ½Cold
Backup Storage¡£
lSegment£¨Seg£©£ºStorage Service¹ÜÀíÊý¾Ý¿éBLOCKºÍÈÕÖ¾µÄ×îСµ¥Ôª£¨´óСΪ10GB£©£¬Ò²ÊÇÊý¾Ý¸´ÖƵÄʵÌ塣ͨ¹ýÒ»ÖÂÐÔÐÒ飨Raft£©½øÐÐͬ²½£¬ÐγÉSegment
Group£¨SG£©¡£
lPool£º¶à¸öSG´ÓÂß¼ÉϹ¹³ÉÒ»¸öÁ¬ÐøµÄ´æ´¢Êý¾ÝBLOCKµÄ¿éÉ豸£¬¹©ÉϲãµÄDistributed
File System·ÖÅäʹÓá£PoolºÍSeg GroupÊÇÒ»¶Ô¶àµÄ¹ØÏµ¡£
lStorage Cluster Manager£¨SCM£©£º¸ºÔð¹ÜÀíStorage Service£¬Î¬»¤PoolºÍSGµÄ¶ÔÓ¦¹ØÏµ£¬ÒÔ¼°Segment
GroupÄÚ²¿³ÉÔ±µÄµ÷¶È¡£
Êý¾ÝÄ£ÐÍ
SCMÊý¾ÝÄ£ÐͰüº¬4ÀàÐÅÏ¢£ºAPIÐÅÏ¢£¬ÏµÍ³ÐÅÏ¢£¬µ÷¶ÈÐÅÏ¢£¬´æ´¢·þÎñÐÅÏ¢
lAPIÐÅÏ¢£¨API Info£©£ºSCM¶ÔÍâÌṩ·þÎñµÄ½Ó¿Ú£¬°üÀ¨SCM×ÔÉíÔËÐÐÇé¿ö£¬PoolÐÅÏ¢£¬ÒÔ¼°Storage
ServiceÐÅÏ¢µÈ£¬ÌṩRESTFul·ç¸ñµÄ½Ó¿Ú£¨¹ÜÀíÀà½Ó¿Ú£©ºÍGRPC½Ó¿Ú£¨Êý¾Ý½»»¥Àࣩ¡£
lϵͳÐÅÏ¢£¨System Info£©£ºSCM×ÔÉíÔËÐеÄÈ«¾ÖÅäÖÃÐÅÏ¢£¬ÒÔ¼°¶à¸öSCMÖ÷´ÓMemberÐÅÏ¢£¬´ËÍ⻹°üÀ¨Íⲿϵͳ·ÃÎʵĵØÖ·ClientUrlsºÍMemberÖ®¼äµÄ·ÃÎʵØÖ·PeerUrlsµÈÐÅÏ¢¡£
lµ÷¶ÈÐÅÏ¢£¨Schedule Info£©£ºSCMÄÚ²¿µ÷¶ÈµÄ×÷ÒµÐÅÏ¢ºÍ״̬ÐÅÏ¢£¬°üÀ¨PoolºÍSGµÄµ÷¶ÈÐÅÏ¢£¬ÒÔ¼°Ïà¹Øµ÷¶È²úÉúµÄÈÎÎñ£¬ÕâЩÈÎÎñ½«»áͨ¹ýÐÄÌøÏ·¢¸øStorage
Service¡£
l´æ´¢·þÎñ£¨Store Info£©£ºSCM±£´æµÄStorage ServiceÐÅÏ¢¡¢µ÷¶ÈµÄ״̬ÐÅÏ¢¡¢Storage
ServiceÉϱ¨µÄͳ¼ÆÐÅÏ¢ÒÔ¼°ÄÚ²¿×÷Òµ¶¨ÆÚ¼ÆËã²úÉúµÄͳ¼ÆÐÅÏ¢µÈ£¬Ö÷Òª°üÀ¨PoolÐÅÏ¢£¬Storage
ServiceÔªÊý¾Ý¼°Storage ServiceÔËÐÐʱͳ¼ÆÐÅÏ¢£¬ÒÔ¼°SGÏà¹ØÐÅÏ¢¡£

I/OÄ£ÐÍ
SCM MasterÖ÷ÒªÓëÈçÏÂÄ£¿é½øÐн»»¥£º
lStorage Service£º½øÐÐ×ÊÔ´µ÷¶È£¬½ÓÊÕÐÄÌø£¬Ï·¢ÃüÁîµÈ½»»¥
lDistributed File System£ºÎªÆäÌṩ¶ÔÓ¦PoolºÍpoolÏÂËùÊôSGµÄÐÅÏ¢£¬ÒÔ°ïÖúÆäÍê³É¶ÁдÇëÇóµÄÕýȷ·ÓÉ
lDCM£ºÎªÆäÌṩ°üÀ¨´´½¨Pool£¬²é¿´PoolÐÅÏ¢£¬ÒÔ¼°SGµ÷¶ÈÇé¿öµÈ½Ó¿Ú¡£
lSCM Slave£ºÍ¨¹ýEtcdͬ²½SCMµÄÊý¾Ý£¬°üÀ¨µ÷¶ÈÐÅÏ¢ºÍ×ÊÔ´ÐÅÏ¢µÈ£¬Î¬»¤¸ß¿ÉÓÃÐÔµÄÐÄÌøÐÅÏ¢¡£

¶ÔÉÏͼµÄÏêϸ˵Ã÷£º
1.SN×¢²áµ½SCM£¬SNµÄÎïÀí²¼¾ÖÐÅϢͨ¹ý±êÇ©×élabels(ÿ¸ö±êÇ©label²ÉÓÃkey-value¼üÖµ¶Ô±íʾ)½øÐж¨Ò壬±êÇ©ÃûÒÀ´ÎÊÇRegion->Zone->Rack->Host£¬±êǩֵÊǾßÌ岿ÊðµÄÎïÀíÐÅÏ¢£¬Èç±±¾©->±±¾©Ò»Çø->rack_01->host_01¡£Ò»¸öSN¸ºÔð´¦ÀíÒ»¸öSSDÉ豸ÉϵÄÊý¾Ý¶Áд¡£
2.DCM¿ªÊ¼´´½¨Pool£¬SCM½ÓÊÕµ½´´½¨²Ù×÷ºó£¬±£´æ¸ÃPoolµÄÔªÊý¾ÝÐÅÏ¢µ½EtcdÉÏ£¬È»ºó°Ñ¸ÃPool¼ÓÈëµ½ÄÚ²¿µ÷¶È¶ÓÁС£
3.Poolµ÷¶ÈÆ÷£º¶¨ÆÚ´Óµ÷¶È¶ÓÁÐÉÏ»ñÈ¡¸÷¸öPoolÀ´µ÷¶È£¬µ÷¶È°üÀ¨PoolµÄ³õʼ»¯(·ÖÅäµÚÒ»¸öSG)£¬¸ù¾ÝPool״̬¼°Ê¹ÓÃÇé¿ö½øÐÐÀ©ËõÈÝ£¬ÒÔ¼°PoolµÄÏú»Ù¡£
4.SGµ÷¶ÈÆ÷£ºÃ¿¸öPool϶ÔÓ¦Ò»¸öSGµ÷¶ÈÆ÷£¬¸ºÔð¸ÃPoolÄÚËùÓÐSGµÄµ÷¶È£¬°üÀ¨SGµÄ³õʼ»¯£¬Ôö¼õ¸±±¾£¬SGÄÚleaderÇл»£¬Ç¨ÒƵȣ¬Í¨¹ý×°ÏäË㷨ѡÔñ×î¼ÑStorage
Node×÷Ϊ¸ÃSGµÄ³ÉÔ±ÒÔ¼°Õû¸ö´æ´¢×ÊÔ´µÄµ÷¶È¡£
5.Distributed File System»á¶¨ÆÚͬ²½SGµÄʹÓÃÇé¿ö£¬PoolÐÅÏ¢µ½SCM£¬²¢´ÓSCM»ñÈ¡¸ÃPoolµÄËùÓÐSGÐÅÏ¢ÒÔ¼°SGµÄ±ä¸üÇé¿ö£¨ÈçSGÄÚleaderÇл»£©¡£
µ÷¶ÈÔÀí
ͨ¹ýSCM·¢ËÍÐÄÌøÐÅÏ¢À´Çý¶¯µÄ£¬°üÀ¨Store Node£¨SN£©ÐÄÌøºÍSegment Group£¨SG£©ÐÄÌø£¬ÐÄÌøÏûÏ¢²ÉÓÃProtobuf
V3¶¨Ò壬GRPC½øÐн»»¥£¬ÓÉSN·¢Æð£¬SCM¸ºÔð½ÓÊÕ£¬½ÓÊÕµ½ÐÄÌøÐÅÏ¢ºó£¬½«¸ù¾ÝSNÔËÐÐÇé¿ö²úÉúÏà¹ØµÄµ÷¶ÈÃüÁ²¢Í¨¹ýÐÄÌøÏìÓ¦ÐÅϢϷ¢¸øSN£¬SN½ÓÊÕÃüÁ²¢Ö´ÐÐÃüÁȻºó¸üÐÂÏàÓ¦µÄ״̬ÐÅÏ¢£¬Í¨¹ýÏÂÒ»´ÎÐÄÌø·¢Ë͸øSCM¡£
Poolµ÷¶È
Poolµ÷¶È½«¶ÔSCMËùÓÐPool½øÐе÷¶È£¬Ã¿¸ô5ÃëÂÖѯһ´ÎËùÓеÄPool£¬¼ì²éÊÇ·ñÓÐеÄPool¼ÓÈ룬¼ì²âÿ¸öPoolµÄ״̬£¬¸ù¾ÝPool״̬½øÐе÷¶È£¬Èç³õʼ»¯£¬À©ËõÈݺÍÏú»ÙµÈ¡£

Pool״̬°üÀ¨£ºUNINITIALIZE£¬NORMAL£¬DISABLE£¬DELETE,Æäµ÷¶È״̬°üÀ¨£ºINITIATING£¬EXPANDING£¬EXPANDED£¬IDLE¡£Poolµ÷¶È״̬±ä¸üÈçÏ£º

À©Èݹý³ÌÈçÏ£º
1.µ±Ç°Pool´æÔÚSG0£¬ÐÂÔöSG1²¢¶ÔSG1½øÐгõʼ»¯¡£
2.µ±Poolµ÷¶ÈÆ÷¼ì²éµ½PoolÐèÀ©ÈÝʱ£¬¸üÐÂÆä״̬ΪEXPANDING£¬²¢³Ö¾Ã»¯¸ÃPoolÐÅÏ¢£¬È»ºóÌí¼ÓÒ»¸öSGµÄÔªÊý¾Ýµ½PoolµÄSGÄÚ²¿µ÷¶È¶ÓÁÐÖУ¬²¢³Ö¾Ã»¯µ½EtcdÖУ¬SGµÄID´Ó0¿ªÊ¼±àºÅ£¬ÒÀ´ÎµÝÔö£¬±£³ÖÁ¬ÐøÐÔ£¬±ÜÃâ²úÉú¿Õ¶´£¬²ÉÓÃÒ»´ÎÀ©Õ¹Ò»¸öSGµÄ·½Ê½£¬Íê³Éºó¸üÐÂÆä״̬ΪEXPANDED¡£
3.¸ÃPoolµÄSGµ÷¶ÈÆ÷½øÐе÷¶È£¬¼ì²âµ½ÓÐÐÂSG£¬¶Ô¸ÃSG½øÐгõʼ»¯£¬²¹³ä¸±±¾¡£
4.µ±Poolµ÷¶ÈÆ÷¼ì²éµ½¸ÃPoolµÄ״̬ΪEXPANDED£¬ÅжϸÃеÄSGÊÇ·ñ´´½¨Íê³É£¨²¹³äÍêËùÓи±±¾£©£¬Èç´´½¨Íê³ÉÔò¸üÐÂPoolµÄµ÷¶È״̬ΪIDLE£¬·ñÔòºöÂÔ±¾´Îµ÷¶È¡£

µ÷¶È״̬Ðè½øÐг־û¯£¬µ±SCM·¢ÉúÖ÷´ÓÇл»Ê±£¬Äָܻ´µ½±ÀÀ£Ê±µÄµ÷¶È״̬¡£
PoolËõÈÝÊÇÀ©ÈݵÄÄæ¹ý³Ì£¬´Óid×î´óµÄSG¿ªÊ¼Íù0·½ÏòÊÕËõ£¬ÒÔÃâ²úÉú¿Õ¶´£¬¾ßÌåµÄ²Ù×÷ÓÉSGµ÷¶ÈÆ÷Ö´ÐÐÿ¸öSG»ØÊÕ¡£
PoolÊÍ·ÅÊǶԸÃPoolµÄËùÓÐSG½øÐÐÊÍ·Å£¬»ØÊÕ½«´Ó´Óid×î´óµÄSG¿ªÊ¼»ØÊÕ£¬»ØÊÕ¹ý³Ì½«Í¨¹ýÐÄÌøÐÅϢϷ¢Ö¸Áî¸øSN£¬¾ßÌåµÄ²Ù×÷ÓÉSGµ÷¶ÈÆ÷Ö´ÐÐÿ¸öSGµÄ»ØÊÕ¡£
SGµ÷¶È
CynosDBÿ¸öPool¶¼¶ÔÓ¦Ò»¸öSGµ÷¶ÈÆ÷£¬Ã¿¸öµ÷¶ÈÆ÷°´1ÃëÂÖѯһ´Î¸ÃPoolÄÚµÄËùÓÐSG£¬Ã¿¸öSegment
GroupÖ®¼äÊÇÏ໥¸ôÀëµÄ£¬Æäµ÷¶È²»ÊÜÓ°Ï죬µ÷¶ÈÖ÷Ҫͨ¹ýSNµÄÐÄÌøºÍSGÐÄÌøÍê³ÉµÄ£¬µ÷¶È°üÀ¨segmentµÄÌí¼Ó£¬É¾³ý£¬ÇÐÖ÷µÈ¡£

SG״̬°üÀ¨£ºUNINITIALIZE£¬NORMAL£¬DISABLE¡£
Segmentµ÷¶È״̬°üÀ¨£ºUNINITIALIZE£¬INITIATING£¬ALLOCATING£¬ALLOCATED£¬BOOTSTRAPPING£¬ADDING£¬ADDED£¬REMOVING£¬RELEASING£¬µ÷¶È״̬ÈçÏ£º

SNÐÄÌø:SCM½ÓÊÕstoreµÄͳ¼ÆÐÅÏ¢£¬È»ºóÏ·¢Segment²Ù×÷£¨·ÖÅäºÍÏú»ÙSegment£©ºÍSG²Ù×÷£¨Æô¶¯ºÍÏú»ÙSegment
Group£©¸øStore£¬È»ºóStoreÖ´ÐвÙ×÷£¬¶øStore²Ù×÷µÄ½á¹ûͨ¹ýGRPC API»ã±¨¸øÔªÊý¾Ý¡£Èç·ÖÅäÒ»¸öSegment¸øÄ³¸öPoolµÄSG¹ý³Ì£º
1.±£´æSegmentµÄÔªÊý¾ÝÐÅÏ¢µ½KVϵͳÖС£
2.½ÓÊÕµ½StoreµÄÐÄÌøÐÅÏ¢¡£
3.Ï·¢·ÖÅäSegmentÐÅÏ¢¡£
4.½ÓÊÕµ½·ÖÅäSegmentÐÅÏ¢£¬½øÐб¾µØ²Ù×÷£¬²Ù×÷Íê³ÉºóÖ±½Óͨ¹ýgrpc»ã±¨·ÖÅä½á¹û¸øÔªÊý¾Ý¡£

SGÐÄÌø:SCM»ñÈ¡SGµÄÐÄÌøÐÅÏ¢£¬¸üÐÂSGµÄÔªÊý¾ÝÐÅÏ¢£¬È»ºó¸ù¾ÝSGµÄ״̬£¬²úÉúÏàÓ¦²Ù×÷£¨ÈçÌí¼Ó£¬É¾³ý¸±±¾£©»ò¿Õ²Ù×÷£¬Í¨¹ýÐÄÌøµÄÏìÓ¦ÐÅÏ¢·´À¡¸øSN£¬ÈçÓÐÏ·¢²Ù×÷£¬SCMͨ¹ýÏÂÒ»´ÎÐÄÌøÐÅÏ¢À´¼ì²é±¾´Î²Ù×÷ÊÇ·ñ³É¹¦£¬ÈçÍùij¸öSGÖÐÌí¼ÓÒ»¸ö¸±±¾µÄ¹ý³Ì£º
1.SCM½ÓÊÕµ½SGÉϱ¨µÄÐÄÌøÐÅÏ¢£¬¸üиÃSGµÄÐÅÏ¢µ½KVϵͳ¡£
2.SCMͨ¹ýÏìӦϷ¢Ìí¼ÓSegmentÇëÇó¸øSG¡£
3.SG½ÓÊÕµ½ÇëÇóºó£¬Ïò¸ÃSG¼ÓÈëеÄSegment£¬Ìí¼Óºó£¬¸üÐÂSGÐÅÏ¢£¬ÏÂÒ»´ÎÐÄÌøÖÜÆÚ·¢Ë͸üкóµÄSGÐÅÏ¢.
4.SCM½ÓÊÕµ½SGµÄÐÄÌøÐÅÏ¢£¬¼ì²éÌí¼ÓSegment²Ù×÷ÊÇ·ñ³É¹¦¡£

×°ÏäËã·¨
¼ÙÉèSCMÖдæÔÚRegion1,¸ÃRegion1´æÔÚZone1,Zone2Á½¸öÇøÓò£¬Zone1ÓÐÈý¸ö»ú¼ÜRack1,Rack2,Rack3,´æÔÚÈý¸öÖ÷»úHost1,Host2,Host3,ÿ¸öÖ÷»úÓÐ4¸öSN£¬Ã¿¸öSN±£´æÒÑ·ÖÅäµÄSegment£¬Ñ¡ÔñÒ»¸öStore×÷ΪSG
¸±±¾·ÖËĸö²½Ö裺ɸѡ£¬¹ýÂË£¬´ò·Ö£¬±È½Ï¡£

1.ɸѡ£º¸ù¾ÝPool×¢²áµÄ±êÇ©ÐÅÏ¢(Ϊһ×éKey-ValueÊý×é)£¬Èç[{REGION:Region1},{ZONE£ºZone1}]£¬Ñ¡Ôñ³ö¿ÉÓõÄPoolStores1¼¯ºÏ£¬Èç£ûS1,S2,S3,S4,S5...,S12£ý¡£

2.¹ýÂË£º´ÓPoolStores1¼¯ºÏÖйýÂ˲»·ûºÏ¹æÔòµÄstoreÐÅÏ¢£¬Èç¸ù¾ÝÆä״̬£¨ÔÚÏߣ¬ÀëÏߣ©£¬¹¤×÷¸ºÔØ£¨¿ÕÏУ¬Ã¦Âµ£©£¬Ê¹ÓÃÂÊ£¨CPU£¬Äڴ棬´ÅÅÌ£¬ÍøÂçµÈ£©£¬ÒÔ¼°¸ÃStoreÒÑÔÚ¸ÃSGÖеȽøÐйýÂË£¬µÃµ½PoolStores2¼¯ºÏ£ûS1,S2,S4,S7,S8,S9,S10,S12£ý¡£

3.´ò·Ö£º¼ÙÉèSG0µÄsegmentËùÔÚµÄstoreµÄ¼¯ºÏΪ{S5,S3}£¬ÆäÖÐS5ΪleaderËùÔÚµÄstore,¶ÔPoolStores2ÖеÄstore½øÐдò·Ö£¬±éÀúPoolStores£¬Õë¶Ôÿ¸öpStore£¬±éÀúSGStores£¬±È½ÏpStoreºÍsgStoreµÄλÖ㬼ÆËãpStoreµÄ·ÖÖµpScore,±éÀúÍêSGStoresºó£¬µÃµ½¸ÃpStoreÔÚ¸ÃSGÉϵķÖÖµpScoreµÄ×Ü·ÖÖµ£¬¼´{100,100,100,100,100,200,200,200}¡£

4.±È½Ï£ºÈçÑ¡ÔñµÄStoresµÄ·ÖÊýÏàͬ£¬Ôò°´StoreÉÏSegmentÊýÁ¿½øÒ»²½±È½Ï£¬ÊýÁ¿ÉÙµÄΪѡÔñµÄStore£¬ÈçÑ¡Ôñ³öStore10×÷ΪΪSG0£ûS5,S3£ýµÄÁíÒ»¸ö¸±±¾¡£

|