Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
΢П߿ÉÓ÷ֲ¼Ê½Êý¾Ý¿âPhxSQLÉè¼ÆÓëʵÏÖ
 
 À´Ô´£º¼«¿ÍÍ·Ìõ  ·¢²¼ÓÚ 2017-4-25
  1909  次浏览      29
 

±¾ÎÄÏêϸÃèÊöÁËPhxSQLµÄÉè¼ÆÓëʵÏÖ¡£´ÓMySQLµÄÈÝÔÖȱÏÝ¿ªÊ¼½²Æð£¬½Ó×ŲûÊöʵÏָ߿ÉÓÃǿһÖµÄ˼·£¬È»ºó¾ßÌå·ÖÎöÿ¸öʵÏÖ»·½ÚҪעÒâµÄÒªµãºÍ½â¾ö·½°¸£¬×îºóչʾÁËPhxSQLÔÚÈÝÔÖºÍÐÔÄÜÉϵijɹû¡£

Éè¼Æ±³¾°

»¥ÁªÍøÓ¦ÓÃÖÐÕ˺źͽðÈÚÀà¹Ø¼üϵͳҪÇóºÍÇ¿µ÷ǿһÖÂÐÔ¼°¸ß¿ÉÓÃÐÔ¡£µ±ÃæÁÙ»úÆ÷Ë𻵡¢ÍøÂç·ÖÇø¡¢Ö÷±¸ÊÖ¹¤»òÕß×Ô¶¯Çл»Ê±£¬´«Í³µÄMySQLÖ÷±¸ÄÑÒÔ±£Ö¤Ç¿Ò»ÖÂÐԺ͸߿ÉÓÃÐÔ¡£PhxSQL½«MySQL¼¯Èº¹¹½¨ÔÚÒ»ÖÂÐÔÍêÉÆµÄPaxosЭÒé»ù´¡ÉÏ£¬±£Ö¤Á˼¯ÈºÄÚMySQL»úÆ÷Ö®¼äÊý¾ÝµÄǿһÖÂÐÔºÍÕû¸ö¼¯ÈºµÄ¸ß¿ÉÓÃÐÔ¡£

Ô­ÉúMySQLµÄÈÝÔÖȱÏÝ

¡¾MySQLÈÝÔÖ·½°¸¡¿

MySQLÓÐÁ½ÖÖ³£¼ûµÄ¸´ÖÆ·½°¸£¬Òì²½¸´ÖƺͰëͬ²½¸´ÖÆ¡£

Òì²½¸´ÖÆ·½°¸

Master¶ÔÊý¾Ý½øÐÐcommit²Ù×÷ºóÔÙ½«Êý¾ÝÒì²½¸´ÖƵ½Slave¡£

µ«Êý¾ÝÎÞ·¨±£Ö¤³É¹¦¸´ÖÆ£¬Ò²¾ÍÎÞ·¨±£Ö¤MySQLÖ÷±¸¼äµÄÊý¾ÝÒ»ÖÂÐÔ£¬Èçͼ1Ëùʾ¡£

ͼ1 MySQLÒì²½¸´ÖÆÁ÷³Ì

°ëͬ²½¸´ÖÆ·½°¸

Master¶ÔÊý¾Ý½øÐÐcommit²Ù×÷ǰ½«Êý¾Ý¸´ÖƵ½Slave£¬È·Èϸ´ÖƳɹ¦ºóÔÙ¶ÔÊý¾Ý½øÐÐcommit²Ù×÷¡£

¾ø´ó¶àÊýÇé¿öÏ£¬°ëͬ²½¸´ÖÆÄܱ£Ö¤MySQLÖ÷±¸¼äµÄÊý¾ÝÒ»ÖÂÐÔ£¬Èçͼ2Ëùʾ¡£

ͼ2 MySQL°ëͬ²½¸´ÖÆÁ÷³Ì

¡¾MySQLÖØÆôÁ÷³Ì¡¿

°ëͬ²½·½°¸Öеġ°°ë¡±ÊÇÖ¸MasterÔڵȴýSlaveµÄACKʧ°Üʱ½«ÍË»¯³ÉÒì²½¸´ÖÆ¡£Í¬Ê±£¬MySQLÔÚÖØÆôʱҲ²»»áÖ´Ðаëͬ²½¸´ÖÆ¡£

Èçͼ3ÖеÄid(Gtid)=101Êý¾ÝÊÇMaster»úÆ÷ÖÐÐÂдÈëµ½Binlog FileµÄBinlogÊý¾Ý¡£µ«MasterÔÚ¸´ÖÆÊý¾Ýµ½SlaveµÄ¹ý³ÌÖÐMySQLå´»úµ¼Ö¸´ÖÆÊ§°Ü¡£MySQLÖØÆôʱ£¬Êý¾Ý£¨id=101£©»á±»Ö±½Ó½øÐÐcommit²Ù×÷£¬ËæºóÔÙ½«Êý¾ÝÒì²½¸´ÖƵ½Slave¡££¨ÏÂÎĽ«ÒѾ­Ð´Èëµ½Binlog Fileµ«Î´½øÐÐcommit²Ù×÷µÄÊý¾Ý£¨id=101£©³ÆÎªPending Binlog¡££©

ͼ3 MySQLÖØÆôʱֱ½ÓÌá½»Pending Binlog

¸ÃÇé¿öÏÂMySQLÈÝÒ׳öÏÖMaster-SlaveÖ®¼äÊý¾Ý²»Ò»ÖµÄÇé¿ö£¬¹Ù·½Ò²ÃèÊöÁ˸ÃÎÊÌâ¡£

http://bugs.mysql.com/bug.php?id=80395

https://mariadb.atlassian.net/browse/MDEV-162

¡¾MySQLÖØÆôȱÏÝ¡¿

ÏÂÃæ½«½âÊÍMySQLÔÚÖØÆôʱ²»Ö´Ðаëͬ²½»á²úÉúÊý¾Ý²»Ò»ÖµÄÔ­Òò¡£

µ±¶ÔÉÏÊöÀý×ÓÖеÄPending Binlog£¨id=101£©½øÐи´ÖÆÊ±Masterå´»úµ¼Ö¸´ÖÆÊ§°Ü£¬ËæºóSlave1Çл»³ÉÐÂMaster²¢¿ªÊ¼Ìṩ·þÎñ£¨Ð´Èëid=201µÄÊý¾Ý£©¡£´Ëºó£¬µ±¾ÉMasterÖØÆôʱ£¬Pending Binlog£¨id=101£©²»»á±»ÖØÐ½øÐи´ÖƶøÖ±½Ó½øÐÐcommit²Ù×÷£¬´Ó¶øµ¼Ö¾ÉMaster±ÈÐÂMaster¶àÁËÒ»ÌõÊý¾Ý£¬¾ÉMasterÎÞ·¨³ÉΪÐÂMasterµÄSlave£¬ÐèÒªÈ˹¤´¦ÀíµôÕâÌõÊý¾ÝÖ®ºó£¬²ÅÄÜÈþÉMaster×÷ΪSlaveÌṩ·þÎñ£¬Èçͼ4Ëùʾ¡£

ͼ4 MySQLÖØÆôȱÏݵ¼ÖÂÖ÷±¸Êý¾Ý²»Ò»ÖÂ

ÉÏÊöcaseÖ»¶Ô¾ÉMasterµÄÊý¾ÝÔì³ÉÓ°Ï죬²»»áʹµÃMySQL Client¶ÁÈ¡µ½´íÎóÊý¾Ý¡£µ«µ±MasterÁ¬Ðø³öÏÖÁ½´Îå´»úºó²úÉúMasterÇл»£¬Á½´Îå´»ú¼ä¸ô½Ï¶ÌʹµÃPending BinlogδÄܼ°Ê±¸´ÖƵ½Slave£¬ÇÒÆÚ¼äÓвéѯÇëÇóʱ£¨Masterå´»ú¡úMasterÖØÆô¡ú²éѯÊý¾Ý¡úMasterå´»ú¡úMasterÇл»£©£¬MySQL Client»á²úÉúÈçͼ5ËùʾµÄ»Ã¶Á£¨Á½´Î¶Áµ½µÄ½á¹û²»Ò»Ö£©¡£

ͼ5 MySQLÖØÆôȱÏݵ¼ÖÂClient²úÉú»Ã¶Á

¡¾MySQL Client·ÖÁÑ¡¿

µ±Master³öÏÖ¹ÊÕÏÇÒ²úÉúMasterÇл»Ê±£¬ÓÉÓÚÔ­ÉúMySQLȱ·¦µ÷Óö˵Ä֪ͨ/ÖØ¶¨Ïò»úÖÆ£¬Ê¹µÃ²»Í¬µÄClient¿ÉÄÜ·ÃÎʲ»Í¬µÄMaster£¬µ¼ÖÂÊý¾ÝµÄ´íÎóдÈëºÍ¶ÁÈ¡£¬Èçͼ6Ëùʾ¡£

ͼ6 MySQL½øÐÐMasterµ¼ÖÂClient¶Ë·ÖÁÑ

¡¾MySQLȱ·¦×Ô¶¯Ñ¡Ö÷»úÖÆ¡¿

ÓÉÓÚ°ëͬ²½¸´ÖƲ»ÐèÒªµÈ´ýËùÓÐSlaveµÄACK£¬Òò´Ëµ±Master³öÏÖ¹ÊÕÏʱ£¬ÐèҪѡÓÐ×îÐÂBinlogµÄSlaveΪеÄMaster£»¶øMySQL²¢Ã»ÓÐÄÚÖÃÕâ¸öÑ¡Ö÷»úÖÆ£¬Èçͼ7Ëùʾ¡£

ͼ7 MySQLȱÉÙ×Ô¶¯Ñ¡Ö÷»úÖÆ

¡¾MySQLµÄÈÝÔÖȱÏÝ×ܽ᡿

MySQLÔÚÈÝÔÖ·½Ãæ´æÔÚµÄÎÊÌ⣺

MasterÇл»Ê±Ö÷±¸Êý¾Ý²»Äܱ£Ö¤Ò»Ö£ºMasterÖØÆô²¢Çл»¿ÉÄܵ¼ÖÂMySQLÖ÷±¸¼äÊý¾Ý²»Ò»Ö¡£MasterÖØÆô²¢Çл»¿ÉÄܵ¼ÖÂMySQL Client²úÉú»Ã¶Á¡£

Ô­ÉúMySQLȱ·¦¸ß¿ÉÓûúÖÆ£ºMasterÇл»µ¼Öµ÷Óö˷ÖÁÑ¡£È±·¦×Ô¶¯Ñ¡Ö÷»úÖÆ¡£

¶ÔÓÚÔ­ÉúMySQL£¬Ôڸ߿ÉÓúÍǿһÖÂÁ½¸öÌØÐÔÖУ¬Ö»Äܶþѡһ£º

ÒªÇóMySQLÖ÷±¸¼äµÄÊý¾ÝǿһÖ£¬²»×öÖ÷±¸×Ô¶¯Çл»¡£

½èÖúMHAʵÏָ߿ÉÓã¬ÈÝÈÌMySQLÖ÷±¸¼äµÄÊý¾Ý²»Ò»Ö¡£

Òò´ËMySQLÔÚÈÝÔÖÉÏÎÞ·¨Í¬Ê±Âú×ãÊý¾ÝǿһÖºͷþÎñ¸ß¿ÉÓÃÁ½¸öÌØÐÔ¡£

PhxSQLÉè¼ÆË¼Â·

¡¾¿É¿¿ÈÕÖ¾´æ´¢¡¿

ʵÏÖÒ»¸öÒÔ¿É¿¿ÈÕÖ¾´æ´¢ÎªÖÐÐĵļܹ¹À´½â¾öMySQLÊý¾Ý¸´ÖÆÊ±²úÉúµÄÊý¾Ý²»Ò»ÖÂÎÊÌâ¡£

Master½«Binlog·¢Ë͵½BinlogSvr¼¯Èº£¨¿É¿¿ÈÕÖ¾´æ´¢£©£¬Slave´ÓBinlogSvr¼¯Èº»ñÈ¡BinlogÊý¾ÝÍê³ÉÊý¾Ý¸´ÖÆ¡£

MasterÔÚÖØÆôʱ£¬¸ù¾ÝBinlogSvr¼¯ÈºµÄÊý¾ÝÅжÏPending BinlogÊÇ·ñÒѾ­±»¸´ÖÆ¡£Èç¹ûδ±»¸´ÖÆÔò´ÓBinlog FileÖÐɾ³ý¡£

ÀûÓÃBinlogSvr¼¯Èº£¨¿É¿¿ÈÕÖ¾´æ´¢£©£¬Ê¹µÃMaster£¨ÖØÆôʱ¼ì²é±¾µØBinlogÊÇ·ñºÍBinlogSvr¼¯ÈºµÄÊý¾ÝÒ»Ö£©ºÍSlave£¨´ÓBinlogSvr¼¯ÈºÖлñÈ¡Binlog£©µÄÊý¾Ý±£³ÖÒ»Ö£¬´Ó¶ø±£Ö¤ÁËÕû¸ö¼¯ÈºÖеÄMySQLÖ÷±¸¼äÊý¾ÝµÄÒ»ÖÂÐÔ£¬Èçͼ8Ëùʾ¡£

ͼ8 ʵÏÖÒ»¸ö¿É¿¿ÈÕÖ¾´æ´¢±£Ö¤¸÷MySQLµÄÊý¾ÝÒ»ÖÂ

¡¾ÇëÇó͸´«¡¿

ÔÚMaster½øÐÐÇл»Ê±£¬Çл»²Ù×÷¿ÉÄܻᵼÖ²¿·ÖMySQL ClientÈÔÈ»·ÃÎʾÉMaster²¢¶Áµ½¾ÉÊý¾Ý¡£

×îÖ±¹ÛµÄ·½·¨ÊÇÐÞ¸ÄMySQL Client API£¬ÔÚÿһ´Î½øÐвéѯʱ£¬ÏÈÈ·Èϵ±Ç°MasterµÄλÖᣵ«´Ë·½·¨ÓÐÒÔÏÂȱµã£º

ÐèҪά»¤Ò»¸öMySQL Client APIµÄ˽Óа汾£¬Î¬»¤³É±¾¸ß¡£

ËùÓеĵ÷ÓöËÐèÒª¼¯³ÉÕâ¸ö˽ÓеÄMySQL Client API£¬²Ù×÷³É±¾ºÜ¸ß¡£

ΪÁ˱ÜÃâÐÞ¸ÄMySQL Client API£¬¿Éͨ¹ýÔö¼ÓProxy½øÐÐÇëÇó͸´«À´½â¾öÉÏÊöÎÊÌâ¡£ÔÚÿһ¸öMySQL½áµãÉÏÔö¼ÓÒ»¸öProxy£¬MySQL ClientµÄÇëÇó²»ÔÙÖ±½Ó·ÃÎÊMySQL¶øÖ±½Ó·ÃÎÊProxy¡£Proxy¸ù¾ÝMasterµÄλÖ㬽«·ÃÎÊSlave»úÆ÷µÄÇëÇó͸´«µ½Master»úÆ÷£¬ÔÙ½øÐÐMySQL²Ù×÷¡£

ͨ¹ýÔö¼ÓProxy½øÐÐÇëÇó͸´«£¬½â¾öÁËMySQL Client·ÖÁѵ¼ÖÂÓпÉÄܶÁÈ¡µ½¾ÉÊý¾ÝµÄÎÊÌ⣬Èçͼ9Ëùʾ¡£

ͼ9 ʵÏÖÒ»¸ö¿É¿¿ÈÕÖ¾´æ´¢±£Ö¤¸÷MySQLµÄÊý¾ÝÒ»ÖÂ

¡¾×Ô¶¯Ñ¡Ö÷¡¿

¶à»ú×Ô¶¯Ñ¡Ö÷×î³£¼ûµÄʵÏÖ·½Ê½ÊÇÓɸ÷¸ö²ÎÓëÕß·¢ÆðͶƱ£¬»ñµÃ¶àÊýÅÉÖ§³ÖµÄ»úÆ÷ΪMaster£¬Í¬Ê±°ÑMasterÐÅÏ¢¼Ç¼µ½¿É¿¿´æ´¢¡£Master»úÆ÷¶¨ÆÚµ½¿É¿¿´æ´¢ÑÓ³¤×âÔ¼£»·ÇMaster»úÆ÷¶¨ÆÚ¼ì²éMaster×âÔ¼ÊÇ·ñ¹ýÆÚ£¬´Ó¶ø¾ö¶¨ÊÇ·ñÒª·¢ÆðÑ¡¾Ù×Ô¼ºÎªMasterµÄͶƱ¡£

ΪÁ˱ÜÃâÐÞ¸ÄMySQL´úÂ룬ÔÚMySQL»úÆ÷ÉÏÔö¼ÓÒ»¸öAgent£¬ÓÉAgentÀ´Ìæ´úMySQL·¢ÆðÑ¡Ö÷ͶƱºÍÐøÆÚ×âÔ¼£»¿É¿¿´æ´¢¼ÌÐøÓÉBinlogSvr³Ðµ£¡£

AgentÍê³ÉÒÔϹ¦ÄÜ£º

Master»úÆ÷µÄAgent¼à¿Ø±¾»úMySQLÊÇ·ñÕý³£·þÎñ£»Èç¹ûÕý³£·þÎñ£¬Ôò¶¨ÆÚµ½¿É¿¿´æ´¢ÑÓ³¤×âÔ¼£¬·ñÔòÍ£Ö¹ÐøÔ¼¡£

·ÇMaster»úÆ÷µÄAgent¶¨ÆÚ´Ó¿É¿¿´æ´¢¼ì²éMaster×âÔ¼ÊÇ·ñ¹ýÆÚ£»Èç¹û¹ýÆÚ£¬ÔÙ¼ì²é±¾»úMySQLÊÇ·ñÒѾ­Ö´ÐÐÁËËùÓÐBinlog¡£Èç¹ûÒѾ­Ö´ÐÐÁËËùÓÐBinlog£¬Ôò·¢ÆðÑ¡¾Ù×Ô¼ºÎªMasterµÄͶƱ£¬Èçͼ10Ëùʾ¡£

ͼ10 ¿É¿¿ÈÕÖ¾´æ´¢ºÍAgent¹²Í¬ÊµÏÖ×Ô¶¯Ñ¡Ö÷»úÖÆ

PhxSQL¼Ü¹¹ºÍʵÏÖ

´ÓÉÏÊö˼·¿ÉÒԵóöPhxSQLµÄ¼òµ¥Èý²ã¼Ü¹¹¡£¶ÔÓÚÿһ¸ö½Úµã£¬²¿Êð3¸öÄ£¿é£¨PhxSQLProxy£¬MySQL£¬PhxBinlogSvr£©¡£¶à¸ö½ÚµãÉϵÄPhxBinlogSvr×é³ÉÒ»¸ö¿É¿¿µÄÈÕÖ¾´æ´¢¼¯ÈººÍ¿É¿¿µÄMasterÐÅÏ¢´æ´¢¼¯Èº£»PhxBinlogSvrͬʱ³Ðµ£AgentµÄÔðÈΡ£PhxSQLProxy¸ºÔðÇëÇóµÄ͸´«¡£Master½áµãÉϵÄPhxSync¸ºÔð½«MySQLµÄBinlog·¢Ë͵½PhxBinlogSvr£¬Èçͼ11Ëùʾ¡£

ͼ11 PhxSQL»ù±¾¼Ü¹¹

¡¾Proxy(PhxSQLProxy)¡¿

ÇëÇó͸´«

ÇëÇó͸´«ÊÇProxyÖ÷ÒªµÄ¹¦ÄÜ¡£Ö÷Òª½â¾öÔÚ½øÐÐMasterÇл»µÄʱºò£¬MySQL Client»á±»·ÖÁÑ£¬²»Í¬µÄClient¿ÉÄÜÁ¬½Óµ½²»Í¬µÄMySQL¡£µ¼Ö³öÏÖMySQL ClientдÈëÊý¾Ýµ½´íÎóµÄMaster»òÕß´Ó´íÎóµÄMaster¶ÁÈ¡µ½´íÎóµÄÊý¾Ý¡£

ProxyµÄÇëÇó͸´«·ÖÁ½ÖÖ£º

¶Áд¶Ë¿ÚÇëÇó͸´«£ºSlave½ÚµãÊÕµ½µÄÇëÇó͸´«¸øMaster½ÚµãÖ´ÐС£Master½ÚµãÊÕµ½µÄÇëÇóÖ±½Ó͸´«¸ø±¾»úMySQLÖ´ÐС£

Ö»¶Á¶Ë¿ÚÇëÇó͸´«£ºMaster½ÚµãÊÕµ½µÄÇëÇó͸´«¸øSlave½ÚµãÖ´ÐС£Slave½ÚµãÊÕµ½µÄÇëÇóÖ±½Ó͸´«¸ø±¾»úMySQLÖ´ÐУ¬Èçͼ12Ëùʾ¡£

ͼ12 ProxyÇëÇó͸´«Á÷³Ì

¸ßÐÔÄÜ£ºÓÉÓÚProxy½Ó¹ÜÁËMySQL ClientµÄÇëÇó£¬ÎªÁËʹÕû¸ö¼¯ÈºµÄ¶ÁдÐÔÄܽӽüµ¥»úMySQL£¬ProxyʹÓÃЭ³ÌÄ£ÐÍÌá¸ß×ÔÉíµÄ´¦ÀíÄÜÁ¦¡£

ProxyµÄЭ³ÌÄ£ÐÍʹÓÿªÔ´µÄLibco¿â¡£Libco¿âÊÇ΢ÐÅÍŶӿªÔ´µÄÒ»¸ö¸ßÐÔÄÜЭ³Ì¿â£¬¾ßÓÐÒÔÏÂÌØµã£º

ÓÃͬ²½·½Ê½Ð´´úÂ룬ʵÏÖÒì²½´úÂëµÄÐÔÄÜ¡£

Ö§³ÖǧÍò¼¶µÄ²¢·¢Á¬½Ó¡£

ÏîÄ¿µØÖ·https://github.com/tencent-wechat/libco

ÍêÈ«¼æÈÝMySQL£ºÎªÁËÒÑÓеÄÓ¦ÓóÌÐòÄܹ»²»×öÈκÎÐ޸ľÍÄÜÇ¨ÒÆµ½PhxSQL£¬ProxyÐè¼æÈÝMySQLµÄËùÓй¦ÄÜ¡£

¼æÈÝMySQLÊÂÎñ

MySQLÊÂÎñ¹ÜÀí»ùÓÚÁ¬½Ó£¬Í¬Ò»¸öÊÂÎñµÄËùÓÐÇëÇóͨ¹ýͬһ¸öÁ¬½ÓͨÐÅ¡£ÔÚÊÂÎñ´¦ÀíÖÐÁ¬½Ó¶ªÊ§£¬ÊÂÎñ½«±»rollback£¨http://dev.mysql.com/doc/refman/5.6/en/innodb-autocommit-commit-rollback.html£©¡£

ProxyʹÓÃ1:1Á¬½ÓÄ£ÐÍÍêÈ«¼æÈÝMySQLÊÂÎñ¡£Ã¿µ±MySQL Client·¢ÆðÒ»¸öÁ¬½Óµ½Proxy£¬Proxy¶¼»áÏàÓ¦µØ·¢ÆðÒ»¸öÁ¬½Óµ½MySQL¡£Á½ÌõÁ¬½ÓÖУ¬ÈÎÒâÒ»¸öÖжϣ¬ÁíÍâÒ»¸öÒ²ÏàÓ¦¶Ï¿ª£¬¶ÔÓ¦µÄÊÂÎñ»á±»rollback£¬Èçͼ13Ëùʾ¡£

ͼ13 ProxyµÄ1¶Ô1ÊÂÎñÁ¬½ÓÄ£ÐÍ

¼æÈÝMySQLȨÏÞ

MySQLµÄȨÏÞ¹ÜÀí»ùÓÚ£¨Óû§£¬Ô´IP£©¶Ô£¬Ô´IPÊÇͨ¹ýsocket¾ä±ú·´²é»ñÈ¡¡£µ±ÇëÇóͨ¹ýProxyÁ¬½Óµ½MySQLʱ£¬Ô´IPΪProxy±¾µØIP£¬È¨ÏÞ¹ÜÀí»á³öÏÖÒì³£¡£

ProxyÀûÓÃMySQLЭÒéHEAD±£Áô×Ö¶Î͸´«ÕæÊµÔ´IPµ½MySQ£¬MySQLÔÙ´ÓHEAD±£Áô×ֶλñÈ¡ÕýÈ·µÄÔ´IP½øÐÐȨÏÞ¹ÜÀí£¬Èçͼ14Ëùʾ¡£

ͼ14 Proxyͨ¹ýÐÞ¸ÄMySQLЭÒ鼿ÈÝMySQLȨÏÞ

PhxSync

PhxSyncµÄ¹¦ÄܺÍMySQLµÄsemisync²å¼þÀàËÆ¡£¾­¹ýµ÷ÑУ¬¶Ôsemisync²å¼þµÄ½Ó¿Ú×öÉÙÁ¿µÄµ÷Õû£¬¾Í¿ÉÒÔʹÓÃÕâЩ²å¼þ½Ó¿ÚÀ´ÊµÏÖPhxSync¡£

PhxSync¹¦ÄÜÖ÷ÒªÊÇ£º

Õý³£ÔËÐÐʱÌá½»Binlog£ºMySQLÔÚÕý³£Ð´Èë»òÕ߸üÐÂÊý¾Ýʱ£¬»áµ÷ÓÃafter_flush½Ó¿Ú¡£PhxSync²å¼þͨ¹ýʵÏÖafter_flush½Ó¿Ú½«MySQLÐÂдÈëµÄBinlogÌá½»µ½±¾»úµÄBinlogSvr£¬Óɱ¾»úBinlogSvrͨ¹ýPaxosЭÒéͬ²½µ½BinlogSvr¼¯Èº¡£

ÖØÆôʱУ׼±¾µØBinlog£ºMySQLÔÚÖØÆôʱͨ¹ý²éѯBinlogSvr¼¯ÈºÅжϱ¾µØPending BinlogµÄ״̬¡£Èç¹ûPending Binlogδ¸´ÖƵ½BinlogSvr¼¯ÈºÔò´Ó±¾µØÉ¾³ý£¬±£³Ö±¾µØµÄBinlogÊý¾ÝºÍBinlogSvr¼¯ÈºµÄBinlogÊý¾ÝÒ»Ö¡£

ÓÉÓÚMySQLûÓÐÌṩÔÚÖØÆôʱµÄ²å¼þ½Ó¿Ú£¬ÎªÁ˺óÐøÎ¬»¤·½±ã£¬ÔÚMySQL´úÂë²ã³éÏó³öÁËÒ»¸öвå¼þ½Ó¿Úbefore_binlog_initÓÃÓÚУ׼Binlog¡£

ÉÏÊö¶Ôafter_flush½Ó¿ÚµÄµ÷Õû£¬ºÍÐÂÔöµÄbefore_binlog_init½Ó¿ÚÒѾ­Ìá½»²¹¶¡¸øMySQL¹Ù·½£¨http://bugs.mysql.com/bug.php?id=83158£©¡£

¡¾PhxBinlogSvr¡¿

PhxBinlogSvrÖ÷Òª¸ºÔð´æ´¢BinlogºÍMasterÐÅÏ¢µÄά»¤¡£ÔÚÊý¾Ý¸´Öƽ׶Σ¬Í¨¹ýPaxosЭÒé±£Ö¤PhxBinlogSvr¸÷½ÚµãµÄÊý¾ÝÒ»ÖÂÐÔ£¨ÏÂÎijÆPhxBinlogSvrΪBinlogSvr£©¡£

PhxPaxos¿â£ºBinlogSvrʹÓÃPhxPaxos¿â½øÐÐÊý¾ÝµÄ¸´ÖÆ¡£PhxPaxos¿âÊÇ΢ÐÅÍŶӿªÔ´µÄPaxosÀà¿â£¬¾ßÓÐÒÔÏÂÌØÐÔ£º1. ±£Ö¤¸÷½ÚµãµÄÊý¾ÝÒ»Ö¡£

±£Ö¤¼¯Èº»úÆ÷³¬¹ýÒ»°ë´æ»î»¹ÄÜ·þÎñ¡£

¸ßÐÔÄÜ¡£

¹¦ÄÜÍêÉÆ¡£

Îȶ¨ÐÔ¾­¹ý´ó¹æÄ£ÑéÖ¤¡£

½Ó¿Ú·½±ãÒ×Óá£

ÏîÄ¿µØÖ·https://github.com/tencent-wechat/phxpaxos

BinlogSvrÒì³£Çé¿ö´¦Àí

·ÀÖ¹SlaveµÄ½ÚµãÌá½»Êý¾Ý

µ±¾ÉMasterÔÚÌá½»Êý¾ÝʱÓÉÓÚÍøÂçÎÊÌâÊý¾Ý°ü±»¿¨ÔÚÍøÂ磬ÇÒÐÂMaterÒѾ­³É¹¦Çл»Ê±£¬»òÕßÈËΪ´íÎóÖ±½ÓÍùSlave½ÚµãµÄMySQLдÈëÊý¾Ýʱ£¬Ôò»á³öÏÖSlave½ÚµãÌá½»Êý¾ÝµÄÇé¿ö¡£¶à½ÚµãͬʱÌá½»Êý¾Ý»á³öÏÖBinlogSvrµÄBinlogÊý¾ÝºÍMySQL´æ´¢µÄBinlogÊý¾Ý²»Ò»ÖµÄÇé¿ö¡£

BinlogSvr´æ´¢Á˼¯ÈºÄÚµÄMasterÐÅÏ¢¡£µ±ÆäÊÕµ½MySQLÌá½»µÄÊý¾Ýʱ£¬¿É¸ù¾ÝMasterÐÅÏ¢¾Ü¾ø·ÇMaster½ÚµãµÄÌá½»£¬Èçͼ15Ëùʾ¡£

ͼ15 BinlogSvrͨ¹ýMasterÐÅÏ¢¾Ü¾ø·ÇMaster½ÚµãµÄÌá½»

·ÀÖ¹MasterÌá½»´íÎóÊý¾Ý

ÔÚijЩÇé¿öÏ£¬Master¿ÉÄÜ»áÖØÐ·¢ËÍÊý¾Ý»òÕß·¢ËÍ´íÎóÊý¾Ý¡£Æ©ÈçÔÚÍøÂç²»ºÃµÄÇé¿öÏÂMasterÓÉÓÚÌá½»Êý¾Ý³¬Ê±¶øÖØ·¢Êý¾Ý¡£´ÅÅÌ·¢Éú¹ÊÕÏ»òÕßÊý¾Ý±»´íÎ󻨹ö»òÕßÐ޸ĵÄʱºò£¬Master»áÌá½»´íÎóµÄÊý¾Ý¡£

BinlogSvrʹÓÃÀÖ¹ÛËø»úÖÆÀ´·ÀÖ¹MasterµÄÒì³£Ìá½»¡£ÔÚMySQLÌá½»Êý¾Ý¸øBinlogSvrʱ£¬ÒÔ±¾»úMySQLÒѾ­Ö´ÐеÄGTIDΪÀÖ¹ÛËø£¬Ìá½»µÄÄÚÈÝΪ£¨±¾»úMySQLÒѾ­Ö´ÐеÄ×îÐÂGTID£¬±¾´ÎÒªÌá½»µÄBinlog£©¡£BinlogSvrͨ¹ý¼ì²éÇëÇóÖУ¨±¾»úMySQLÒѾ­Ö´ÐеÄ×îÐÂGTID£©ºÍ×ÔÉí±£´æµÄ×îÐÂGTIDÊÇ·ñÆ¥ÅäÀ´¾Ü¾øÖØÐ·¢ËÍ»òÕßÒì³£·¢Ë͵ÄÊý¾Ý£¬Èçͼ16Ëùʾ¡£

ͼ16 BinlogSvrʹÓÃÀÖ¹ÛËø¾Ü¾øMasterÔÚÊý¾ÝÒì³£µÄÇé¿öÏÂÌá½»Êý¾Ý

Ö§³ÖMySQLÔ­Éú¸´ÖÆÐ­Ò飺ΪÁËÈÃSlaveÄÜ´ÓBinlogSvr»ñÈ¡Binlog£¬×îºÃµÄ·½Ê½¾ÍÊÇBinlogSvrÖ§³ÖMySQLÔ­ÉúµÄ¸´ÖÆÐ­Ò飬ÕâÑù²»ÓöÔSlave×öÈκÎÐ޸ģ¬Èçͼ17Ëùʾ¡£

ͼ17 BinlogSvrÖ§³ÖMySQLʹÓÃÔ­Éú¸´ÖÆÐ­Òé»ñÈ¡BinlogÊý¾Ý

Master¹ÜÀí£ºBinlogSvr³ýÁË´æ´¢MySQLµÄBinlogÊý¾Ý£¬»¹´æ´¢ÁËMasterÐÅÏ¢¡£Í¬Ê±»¹³Ðµ£ÁËAgentµÄ½ÇÉ«£¬¸ºÔð¼à¿ØMySQLµÄ״̬£¬±ØÒªÊ±·¢ÆðÑ¡¾Ù×Ô¼ºÎªMasterµÄͶƱ¡£

BinlogSvrͨ¹ýPaxosЭÒé½øÐÐMasterÑ¡¾Ù£¬Ñ¡¾Ù³É¹¦ºó³ÉΪMaster²¢ÓµÓÐ×âÔ¼¡£Í¨¹ýPaxosЭÒéÑ¡¾Ù±£Ö¤ÁË×îÖÕÖ»²úÉúÒ»¸öMasterÇÒÿ¸ö½Úµã¼Ç¼ÁËÒ»ÖµÄMasterÐÅÏ¢¡£

PhxSQLЧ¹û

¡¾PhxSQLÊý¾ÝÒ»ÖÂÐÔ¡¿

ͨ¹ý±È½ÏPhxSQL¼¯ÈºÖи÷½ÚµãµÄÊý¾Ý£¨MySQL Binlog£¬PhxPaxos£¬BinlogSvr) Åжϸ÷½ÚµãÊý¾ÝÊÇ·ñÒ»Ö£¬Èçͼ18Ëùʾ¡£

ͼ18 PhxSQL 3»úÊý¾Ý¶Ô±È

¡¾Master×Ô¶¯Çл»¡¿

ͨ¹ý¹Û²ìMasterå´»úʱ¸÷½ÚµãµÄÁ÷Á¿±ä»¯ÅжÏMasterÊÇ·ñ˳ÀûÇл»¡£ÏÂͼÖеĺìÏß´ú±íÁ÷Á¿¡£µ±Masterå´»úʱ£¬Á÷Á¿»áËæÖ®×ªÒÆ£¬´ú±íMaster˳ÀûÇл»£¬Èçͼ19Ëùʾ¡£

ͼ19 PhxSQL½øÐÐMasterÇл»Ê±¸÷½ÚµãµÄдÈëÁ÷Á¿±ä»¯

¡¾PhxSQLÐÔÄÜ¡¿

MySQL°æ±¾£ºPercona 5.6.31-77.0

»úÆ÷ÐÅÏ¢£º

CPU £ºIntel Xeon CPU E5-2420 0 @ 1.90GHz * 24¡£

Memory : 32G¡£

Disk:SSD Raid10¡£

Ping Costs£ºMaster¡úSlave:3 ~ 4ms; client¡úMaster :4ms¡£

¹¤¾ßºÍ²ÎÊý£º

sysbench¡£

¨Coltp-tables-count=10 ¨Coltp-table-size=1000000 ¨Cnum-threads=500¡£

¨Cmax-requests=100000 ¨Creport-interval=1 ¨Cmax-time=200¡£

PhxSQLµÄдÐÔÄܱÈMySQLµÄ°ëͬ²½ºÃ£¬¶ÁÐÔÄÜÓÉÓÚ¶àÁËÒ»²ãProxyµ¼Ö±ÈMySQLµÄ°ëͬ²½ÉԲ

ͼ20 PhxSQLºÍMySQLµÄÐÔÄܶԱÈ

   
1909 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí