ÀûÓÃKeepalived+mysql¹¹½¨¸ß¿ÉÓÃMySQLË«Ö÷×Ô¶¯ÇÐת
¹ØÓÚMySQL-HA£¬Ä¿Ç°ÓжàÖÖ½â¾ö·½°¸£¬±ÈÈçheartbeat¡¢drbd¡¢mmm¡¢¹²Ïí´æ´¢£¬µ«ÊÇËüÃǸ÷ÓÐÓÅȱµã¡£heartbeat¡¢drbdÅäÖýÏΪ¸´ÔÓ£¬ÐèÒª×Ô¼ºÐ´½Å±¾²ÅÄÜʵÏÖMySQL×Ô¶¯Çл»£¬¶ÔÓÚ²»»á½Å±¾ÓïÑÔµÄÈËÀ´Ëµ£¬ÕâÎÞÒÉÊÇÒ»ÖÖÄÔÁÑÎÊÌ⣻¶ÔÓÚmmm£¬Éú²ú»·¾³ÖкÜÉÙÓÐÈËÓã¬ÇÒmmm¹ÜÀí¶ËÐèÒªµ¥¶ÀÔËÐÐһ̨·þÎñÆ÷ÉÏ£¬ÒªÊÇÏëʵÏָ߿ÉÓ㬾͵öÔmmm¹ÜÀí¶Ë×öHA£¬ÕâÑùÎÞÒÉÓÖÔö¼ÓÁËÓ²¼þ¿ªÖ§£»¶ÔÓÚ¹²Ïí´æ´¢£¬¸öÈ˾õµÃMySQLÊý¾Ý»¹ÊÇ·ÅÔÚ±¾µØ½ÏΪ°²È«£¬´æ´¢É豸±Ï¾¹´æÔÚµ¥µãÒþ»¼¡£
ʹÓÃMySQLË«master+keepalivedÊÇÒ»Öַdz£ºÃµÄ½â¾ö·½°¸£¬ÔÚMySQL-HA»·¾³ ÖУ¬MySQL»¥ÎªÖ÷´Ó¹ØÏµ£¬ÕâÑù¾Í±£Ö¤ÁËÁ½Ì¨MySQLÊý¾ÝµÄÒ»ÖÂÐÔ£¬È»ºóÓÃkeepalivedʵÏÖÐéÄâIP£¬Í¨¹ýkeepalived×Ô´øµÄ·þÎñ¼à ¿Ø¹¦ÄÜÀ´ÊµÏÖMySQL¹ÊÕÏʱ×Ô¶¯Çл»¡£
ÏÂÃæ£¬ÎҰѼ´½«ÉÏÏßµÄÒ»¸öÉú²ú»·¾³Öеļܹ¹Óë´ó¼Ò·ÖÏíһϣ¬¿´Ò»ÏÂÕâ¸ö¼Ü¹¹ÖУ¬MySQL-HAÊÇÈçºÎʵÏֵ쬻·¾³ÍØÆËÈçÏ£º
MySQL-VIP£º192.168.1.200 MySQL-master1£º192.168.1.201 MySQL-master2£º192.168.1.202 OS°æ±¾£ºCentOS 5.4 MySQL°æ±¾£º5.0.89 Keepalived°æ±¾£º1.1.20
Ò»¡¢MySQL master-masterÅäÖÃ
1¡¢ÐÞ¸ÄMySQLÅäÖÃÎļþ
Á½Ì¨MySQL¾ùÈçÒª¿ªÆôbinlogÈÕÖ¾¹¦ÄÜ£¬¿ªÆô·½·¨£ºÔÚMySQLÅäÖÃÎļþ[MySQLd]¶ÎÖмÓÉÏlog-bin=MySQL-binÑ¡Ïî
Á½Ì¨MySQLµÄserver-ID²»ÄÜÒ»Ñù£¬Ä¬ÈÏÇé¿öÏÂÁ½Ì¨MySQLµÄserverID¶¼ÊÇ1£¬Ð轫ÆäÖÐһ̨ÐÞ¸ÄΪ2¼´¿É
Master1ÅäÖãº
#vim /etc/my.cnf
log-bin=mysql-bin //¿ªÆôbinlogÈÕÖ¾¹¦ÄÜ
log =/usr/local/mysql/var/mysql.log //»á´òÓ¡mysqlµÄËùÒÔsqlÓï¾ä
server-id= 1 //
binlog-do-db = test //ÐèҪͬ²½µÄ¿âÃû³Æ
auto-increment-increment= 2
auto-increment-offset= 2
Master2ÅäÖãº
#vim /etc/my.cnf log-bin=mysql-bin //¿ªÆôbinlogÈÕÖ¾¹¦ÄÜ log =/usr/local/mysql/var/mysql.log //»á´òÓ¡mysqlµÄËùÒÔsqlÓï¾ä server-id= 2 binlog-do-db = test //ÐèҪͬ²½µÄ¿âÃû³Æ auto-increment-increment= 2 auto-increment-offset= 2
2¡¢½«192.168.1.201ÉèΪ192.168.1.202µÄÖ÷·þÎñÆ÷
ÔÚ192.168.1.201ÉÏн¨ÊÚȨÓû§
MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication'; Query OK, 0 rows affected (0.00 sec) MySQL> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | MySQL-bin.000003 | 374 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)ÔÚ192.168.1.202ÉϽ«192.168.1.201ÉèΪ×Ô¼ºµÄÖ÷·þÎñÆ÷
MySQL> change master to master_host='192.168.1.201',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374; Query OK, 0 rows affected (0.05 sec) MySQL> start slave; Query OK, 0 rows affected (0.00 sec) MySQL> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.201 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: MySQL-bin.000003 Read_Master_Log_Pos: 374 Relay_Log_File: MySQL-master2-relay-bin.000002 Relay_Log_Pos: 235 Relay_Master_Log_File: MySQL-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 374 Relay_Log_Space: 235 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec)
3¡¢½«192.168.1.202ÉèΪ192.168.1.201µÄÖ÷·þÎñÆ÷
ÔÚ192.168.1.202ÉÏн¨ÊÚȨÓû§
MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication'; Query OK, 0 rows affected (0.00 sec) MySQL> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | MySQL-bin.000003 | 374 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)ÔÚ192.168.1.201ÉÏ£¬½«192.168.1.202ÉèΪ×Ô¼ºµÄÖ÷·þÎñÆ÷
MySQL> change master to master_host='192.168.1.202',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374; Query OK, 0 rows affected (0.05 sec) MySQL> start slave; Query OK, 0 rows affected (0.00 sec) MySQL> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.202 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: MySQL-bin.000003 Read_Master_Log_Pos: 374 Relay_Log_File: MySQL-master1-relay-bin.000002 Relay_Log_Pos: 235 Relay_Master_Log_File: MySQL-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 374 Relay_Log_Space: 235 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec)
4¡¢MySQLͬ²½²âÊÔ
ÈçÉÏÊö¾ùÕýÈ·ÅäÖã¬ÏÖÔÚÈκÎһ̨MySQLÉϸüÐÂÊý¾Ý¶¼»áͬ²½µ½Áíһ̨MySQL£¬MySQLͬ²½Ôڴ˲»ÔÙÑÝʾ
¶þ¡¢keepalived°²×°¼°ÅäÖÃ
1¡¢192.168.1.201·þÎñÆ÷ÉÏkeepalived°²×°¼°ÅäÖÃ
°²×°keepalived
#wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz #tar xvzf keepalived-1.2.2.tar.gz #cd keepalived-1.2.2 #./configure #make && make install #cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ chmod +x /etc/init.d/keepalived chkconfig --add keepalived chkconfig keepalived on mkdir /etc/keepalived ln -s /usr/local/sbin/keepalived /usr/sbin/
ÅäÖÃkeepalived
ÎÒÃÇ×Ô¼ºÔÚн¨Ò»¸öÅäÖÃÎļþ£¬Ä¬ÈÏÇé¿öÏÂkeepalivedÆô¶¯Ê±»áÈ¥/etc/keepalivedĿ¼ÏÂÕÒÅäÖÃÎļþ
#vi /etc/keepalived/keepalived.conf global_defs { notification_email { haohailuo@163.com } notification_email_from haohailuo@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP #Á½Ì¨ÅäÖô˴¦¾ùÊÇBACKUP interface eth0 virtual_router_id 51 priority 100 #ÓÅÏȼ¶£¬Áíһ̨¸ÄΪ90 advert_int 1 nopreempt #²»ÇÀÕ¼£¬Ö»ÔÚÓÅÏȼ¶¸ßµÄ»úÆ÷ÉÏÉèÖü´¿É£¬ÓÅÏȼ¶µÍµÄ»úÆ÷²»ÉèÖà authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 } } virtual_server 192.168.1.200 3306 { delay_loop 2 #ÿ¸ö2Ãë¼ì²éÒ»´Îreal_server״̬ lb_algo wrr #LVSËã·¨ lb_kind DR #LVSģʽ persistence_timeout 60 #»á»°±£³Öʱ¼ä protocol TCP real_server 192.168.1.201 3306 { weight 3 notify_down /usr/local/MySQL/bin/MySQL.sh #¼ì²âµ½·þÎñdownºóÖ´ÐеĽű¾ TCP_CHECK { connect_timeout 10 #Á¬½Ó³¬Ê±Ê±¼ä nb_get_retry 3 #ÖØÁ¬´ÎÊý delay_before_retry 3 #ÖØÁ¬¼ä¸ôʱ¼ä connect_port 3306 #½¡¿µ¼ì²é¶Ë¿Ú } } }±àд¼ì²â·þÎñdownºóËùÒªÖ´ÐеĽű¾
#vi /usr/local/MySQL/bin/MySQL.sh #!/bin/sh pkill keepalived #chmod +x /usr/local/MySQL/bin/MySQL.sh
×¢£º´Ë½Å±¾ÊÇÉÏÃæÅäÖÃÎļþnotify_downÑ¡ÏîËùÓõ½µÄ£¬keepalivedʹÓÃnotify_downÑ¡ÏîÀ´¼ì²éreal_server µÄ·þÎñ״̬£¬µ±·¢ÏÖreal_server·þÎñ¹ÊÕÏʱ£¬±ã´¥·¢´Ë½Å±¾£»ÎÒÃÇ¿ÉÒÔ¿´µ½£¬½Å±¾¾ÍÒ»¸öÃüÁͨ¹ýpkill keepalivedÇ¿ÖÆÉ±ËÀkeepalived½ø³Ì£¬´Ó¶øÊµÏÖÁËMySQL¹ÊÕÏ×Ô¶¯×ªÒÆ¡£ÁíÍ⣬ÎÒÃDz»Óõ£ÐÄÁ½¸öMySQL»áͬʱÌṩÊý¾Ý¸üвÙ×÷£¬ ÒòΪÿ̨MySQLÉϵÄkeepalivedµÄÅäÖÃÀïÃæÖ»Óб¾»úMySQLµÄIP+VIP£¬¶ø²»ÊÇÁ½Ì¨MySQLµÄIP+VIP
Æô¶¯keepalived
#/usr/local/keepalived/sbin/keepalived ¨CD #ps -aux | grep keepalived
²âÊÔ
ÕÒһ̨¾ÖÓòÍøPC£¬È»ºóÈ¥ping MySQLµÄVIP£¬ÕâʱºòMySQLµÄVIPÊÇ¿ÉÒÔpingµÄͨµÄ
Í£Ö¹MySQL·þÎñ£¬¿´keepalived½¡¿µ¼ì²é³ÌÐòÊÇ·ñ»á´¥·¢ÎÒÃDZàдµÄ½Å±¾
2¡¢192.168.1.202ÉÏkeepalived°²×°¼°ÅäÖÃ
°²×°keepalived£¬°²×°·½·¨²ÎÕÕ192.168.1.201µÄ°²×°·½·¨
ÅäÖÃkeepalived
Õą̂ÅäÖúÍÉÏÃæ»ù±¾Ò»Ñù£¬µ«ÓÐÈý¸öµØ·½²»Í¬£ºÓÅÏȼ¶Îª90¡¢ÎÞÇÀÕ¼ÉèÖá¢real_serverΪ±¾»úIP
#vi /etc/keepalived/keepalived.conf global_defs { notification_email { haohailuo@163.com } notification_email_from haohailuo@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 } } virtual_server 192.168.1.200 3306 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.1.202 3306 { weight 3 notify_down /usr/local/MySQL/bin/MySQL.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
±àд¼ì²â·þÎñdownºóËùÒªÖ´ÐеĽű¾
#vi /usr/local/MySQL/bin/MySQL.sh #!/bin/sh pkill keepalived #chmod +x /usr/local/MySQL/bin/MySQL.sh
Æô¶¯keepalived
#/usr/local/keepalived/sbin/keepalived ¨CD #ps -aux | grep keepalived
²âÊÔ
Í£Ö¹MySQL·þÎñ£¬¿´keepalived½¡¿µ¼ì²é³ÌÐòÊÇ·ñ»á´¥·¢ÎÒÃDZàдµÄ½Å±¾
Èý¡¢²âÊÔ
MySQLÔ¶³ÌµÇ¼²âÊÔ
ÎÒÃÇÕÒһ̨°²×°ÓÐMySQL¿Í»§¶ËµÄwindows£¬È»ºóµÇ¼VIP£¬¿´ÊÇ·ñÄܵǼ£¬ÔڵǼ֮Á½Ì¨MySQL·þÎñÆ÷¶¼ÒªÊÚȨÔÊÐí´ÓÔ¶³ÌµÇ¼
MySQL> grant all privileges on *.* to 'root'@'%' identified by '123456'; Query OK, 0 rows affected (0.00 sec) MySQL> flush privileges; Query OK, 0 rows affected (0.00 sec)ʹÓÿͻ§¶ËµÇ¼VIP²âÊÔ
C:\MySQL\bin>MySQL.exe -uroot -p123456 -h192.168.1.200 -P3306 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 224 Server version: 5.0.89-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL>
keepalived¹ÊÕÏ×ªÒÆ²âÊÔ
¡ùÔÚwindows¿Í»§¶Ëһֱȥping VIP£¬È»ºó¹Ø±Õ192.168.1.201ÉϵÄkeepalived£¬Õý³£Çé¿öÏÂVIP¾Í»áÇл»µ½192.168.1.202ÉÏÃæÈ¥
¡ù¿ªÆô192.168.1.201ÉϵÄkeepalived£¬¹Ø±Õ192.168.1.202ÉϵÄkeepalived£¬¿´ÊÇ·ñÄÜ×Ô¶¯Çл»£¬Õý³£Çé¿öÏÂVIPÓÖ»áÊôÓÚ192.168.1.201
×¢£ºkeepalivedÇл»ËÙ¶È»¹ÊǷdz£¿éµÄ£¬Õû¸öÇл»¹ý³ÌÖ»Ðè1-3Ãë
¡ñ MySQL¹ÊÕÏ×ªÒÆ²âÊÔ
¡ùÔÚ192.168.1.201ÉϹرÕMySQL·þÎñ£¬¿´VIPÊÇ·ñ»áÇл»µ½192.168.1.202ÉÏ
¡ù¿ªÆô192.168.1.201ÉϵÄMySQLºÍkeepalived£¬È»ºó¹Ø±Õ192.168.1.202ÉϵÄMySQL£¬¿´VIPÊÇ·ñ»áÇл»µ½192.168.1.201ÉÏ
ÏÂÃæÊÇÓÃwindows¿Í»§¶ËÁ¬½ÓµÄMySQLµÄVIP£¬ÔÚÇл»Ê±ÎÒÖ´ÐÐÁËÒ»¸öMySQL²éѯÃüÁ´ÓÖ´ÐÐshow databasesµ½ÏÔʾ³ö½á¹ûʱ¼äΪ3-5Ã루´ó¼Ò¿ÉÒÔ¿´µ½ÉÏÃæÓиö´íÎóÌáʾ£¬²»¹ý²»Óõ£ÐÄ£¬ÒòΪÎÒÃǵÄkeepalivedÇл»´ó¸ÅΪ3Ãë×óÓÒ£¬Õâ3 Ãë×óÓÒVIPÊÇ˶¼²»ÊôÓڵģ©
MySQL> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 592 Current database: *** NONE *** +--------------------+ | Database | +--------------------+ | information_schema | | MySQL | | test | +--------------------+ 3 rows in set (9.01 sec)ºó»°£ºÊÀ¼äÍòÊÂÍòÎ¶¼²»¾ß±¸¾ø¶ÔµÄÍêÃÀ£¬¾ÍÏñÉÏÃæµÄMySQL-HAÒ»Ñù£¬keepalivedÖ»ÄÜ×öµ½¶Ô3306µÄ½¡¿µ¼ì²é£¬µ«ÊÇ×ö²»µ½±ÈÈçÏñ MySQL¸´ÖÆÖеÄslave-SQL¡¢slave-IO½ø³ÌµÄ¼ì²é¡£ËùÒÔÒªÏë×öµ½Ò»Ð©Ï¸ÖµĽ¡¿µ¼ì²é£¬»¹µÃÐèÒª½èÖú¶îÍâµÄ¼à¿Ø¹¤¾ß£¬±ÈÈçnagios£¬ È»ºóÓÃnagiosʵÏÖ¶ÌÐÅ¡¢Óʼþ±¨¾¯£¬´Ó¶øÄܹ»ÓÐЧµØ½â¾öÎÊÌâ¡£
ÍÆ¼öÐÅÏ¢
- linuxÃüÁîѧϰ±Ê¼Ç£¨11£©£ºnlÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨5£©£ºrmÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨4£©£ºmkdirÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨1£©£ºlsÃüÁî
- ½«CentosµÄyumÔ´¸ü»»Îª¹úÄڵİ¢ÀïÔÆÔ´
- ʹÓÃNginxÌí¼Óheader·ÀÖ¹ÍøÒ³±»frame
- linuxϼÓËÙscp´«Êä´óÎļþµÄËÙ¶È
- linuxϵͳÉ϶ÔnginxÈÕÖ¾·Ö¸î´¦Àí
- lnmp/nginxÏµÍ³ÕæÕýÓÐЧµÄͼƬ·ÀµÁÁ´ÍêÕûÉèÖÃÏê½â
- Í»ÆÆÊ®Íò²¢·¢µÄNginxµÄÅäÖü°ÓÅ»¯
ÈÈÃÅÐÅÏ¢
- nohup: redirecting stderr to stdou....
- ʹÓÃlog_formatΪNginx·þÎñÆ÷ÉèÖøüÏêϸµÄÈÕÖ¾¸ñʽ
- jquery easyUI--dataGrid-Json
- [Ô´´]·ÂGoogle Reader¡¢ÐÂÀË΢²©¡¢ÌÚѶ΢²©µ....
- ÀûÓÃKeepalived+mysql¹¹½¨¸ß¿ÉÓÃMySQLË«Ö÷×Ô¶....
- Nginx+keepalivedʵÏÖ¸ºÔؾùºâºÍË«»úÈȱ¸¸ß¿ÉÓÃ
- jqueryʵÏÖÒ³Ãæ¼ÓÔØ½ø¶ÈÌõ
- Rolling cURL: PHP²¢·¢×î¼Ñʵ¼ù
- codeigniter ·ÓÉÖÕ¼«ÓÅ»¯(url rewrite)
- linuxÏÂÉèÖÃsshÎÞÃÜÂëµÇ¼
×î½ü¸üÐÂ
- ²éÕÒ²¢É¾³ý.svnĿ¼Îļþ
- redis ÆßÖÖÊý¾ÝÀàÐ͵ÄʹÓó¡¾°
- linux ÏÂÎļþ¸´ÖƵ½windowsÏÂÂÒÂëµÄ½â¾ö°ì·¨
- nginx³öÏÖ502 upstream sent too big he....
- linuxÏÂsudoÅäÖÃÏê½â
- linuxÃüÁîѧϰ±Ê¼Ç£¨15£©£ºtailÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨14£©£ºheadÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨13£©£ºlessÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨12£©£ºmoreÃüÁî
- ¼ÓÃÜËã·¨±È½Ï3DES AES RSA ECC MD5 SHA1µÈ
ÆÀÂÛ