Heim > Datenbank > MySQL-Tutorial > keepalived构建高可用MySQL-HA_MySQL

keepalived构建高可用MySQL-HA_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-01 14:02:02
Original
807 Leute haben es durchsucht

  关于MySQL-HA,目前有多种解决方案,比如heartbeat、drbd、mmm、共享存储,但是它们各有优缺点。heartbeat、drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题;对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。使用MySQL双master+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换。

  下面,我把即将上线的一个生产环境中的架构与大家分享一下,看一下这个架构中,MySQL-HA是如何实现的,环境拓扑如下

 

<ol class="dp-xml">
<li class="alt">MySQL-VIP:192.168.1.200    </li>
<li>MySQL-master1:192.168.1.201    </li>
<li class="alt">MySQL-master2:192.168.1.202    </li>
<li>   </li>
<li class="alt">OS版本:CentOS 5.4    </li>
<li>MySQL版本:5.0.89    </li>
<li class="alt">Keepalived版本:1.1.20  </li>
</ol>
Nach dem Login kopieren

  一、MySQL master-master配置

  1、修改MySQL配置文件

  两台MySQL均如要开启binlog日志功能,开启方法:在MySQL配置文件[MySQLd]段中加上log-bin=MySQL-bin选项

  两台MySQL的server-ID不能一样,默认情况下两台MySQL的serverID都是1,需将其中一台修改为2即可

  2、将192.168.1.201设为192.168.1.202的主服务器

  在192.168.1.201上新建授权用户

 

<ol class="dp-xml">
<li class="alt">MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';    </li>
<li>Query OK, 0 rows affected (0.00 sec)    </li>
<li class="alt">   </li>
<li>MySQL> show master status;    </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |    </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>| MySQL-bin.000003 |      374 |              |                  |     </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>1 row in set (0.00 sec)  </li>
</ol>
Nach dem Login kopieren
Nach dem Login kopieren

  在192.168.1.202上将192.168.1.201设为自己的主服务器

 

<ol class="dp-xml">
<li class="alt">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;    </li>
<li>Query OK, 0 rows affected (0.05 sec)    </li>
<li class="alt">   </li>
<li>MySQL> start slave;    </li>
<li class="alt">Query OK, 0 rows affected (0.00 sec)    </li>
<li>   </li>
<li class="alt">MySQL> show slave status/G    </li>
<li>*************************** 1. row ***************************    </li>
<li class="alt">             Slave_IO_State: Waiting for master to send event    </li>
<li>                Master_Host: 192.168.1.201    </li>
<li class="alt">                Master_User: replication    </li>
<li>                Master_Port: 3306    </li>
<li class="alt">              Connect_Retry: 60    </li>
<li>            Master_Log_File: MySQL-bin.000003    </li>
<li class="alt">        Read_Master_Log_Pos: 374    </li>
<li>             Relay_Log_File: MySQL-master2-relay-bin.000002    </li>
<li class="alt">              Relay_Log_Pos: 235    </li>
<li>      Relay_Master_Log_File: MySQL-bin.000003    </li>
<li class="alt">           Slave_IO_Running: Yes    </li>
<li>          Slave_SQL_Running: Yes    </li>
<li class="alt">            Replicate_Do_DB:     </li>
<li>        Replicate_Ignore_DB:     </li>
<li class="alt">         Replicate_Do_Table:     </li>
<li>     Replicate_Ignore_Table:     </li>
<li class="alt">    Replicate_Wild_Do_Table:     </li>
<li>Replicate_Wild_Ignore_Table:     </li>
<li class="alt">                 Last_Errno: 0    </li>
<li>                 Last_Error:     </li>
<li class="alt">               Skip_Counter: 0    </li>
<li>        Exec_Master_Log_Pos: 374    </li>
<li class="alt">            Relay_Log_Space: 235    </li>
<li>            Until_Condition: None    </li>
<li class="alt">             Until_Log_File:     </li>
<li>              Until_Log_Pos: 0    </li>
<li class="alt">         Master_SSL_Allowed: No    </li>
<li>         Master_SSL_CA_File:     </li>
<li class="alt">         Master_SSL_CA_Path:     </li>
<li>            Master_SSL_Cert:     </li>
<li class="alt">          Master_SSL_Cipher:     </li>
<li>             Master_SSL_Key:     </li>
<li class="alt">      Seconds_Behind_Master: 0    </li>
<li>1 row in set (0.00 sec)  </li>
</ol>
Nach dem Login kopieren

  3、将192.168.1.202设为192.168.1.201的主服务器

  在192.168.1.202上新建授权用户

 

<ol class="dp-xml">
<li class="alt">MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';    </li>
<li>Query OK, 0 rows affected (0.00 sec)    </li>
<li class="alt">   </li>
<li>MySQL> show master status;    </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |    </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>| MySQL-bin.000003 |      374 |              |                  |     </li>
<li class="alt">+------------------+----------+--------------+------------------+    </li>
<li>1 row in set (0.00 sec)  </li>
</ol>
Nach dem Login kopieren
Nach dem Login kopieren

  在192.168.1.201上,将192.168.1.202设为自己的主服务器

 

<ol class="dp-xml">
<li class="alt">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;    </li>
<li>Query OK, 0 rows affected (0.05 sec)    </li>
<li class="alt">   </li>
<li>MySQL> start slave;    </li>
<li class="alt">Query OK, 0 rows affected (0.00 sec)    </li>
<li>   </li>
<li class="alt">MySQL> show slave status/G    </li>
<li>*************************** 1. row ***************************    </li>
<li class="alt">             Slave_IO_State: Waiting for master to send event    </li>
<li>                Master_Host: 192.168.1.202    </li>
<li class="alt">                Master_User: replication    </li>
<li>                Master_Port: 3306    </li>
<li class="alt">              Connect_Retry: 60    </li>
<li>            Master_Log_File: MySQL-bin.000003    </li>
<li class="alt">        Read_Master_Log_Pos: 374    </li>
<li>             Relay_Log_File: MySQL-master1-relay-bin.000002    </li>
<li class="alt">              Relay_Log_Pos: 235    </li>
<li>      Relay_Master_Log_File: MySQL-bin.000003    </li>
<li class="alt">           Slave_IO_Running: Yes    </li>
<li>          Slave_SQL_Running: Yes    </li>
<li class="alt">            Replicate_Do_DB:     </li>
<li>        Replicate_Ignore_DB:     </li>
<li class="alt">         Replicate_Do_Table:     </li>
<li>     Replicate_Ignore_Table:     </li>
<li class="alt">    Replicate_Wild_Do_Table:     </li>
<li>Replicate_Wild_Ignore_Table:     </li>
<li class="alt">                 Last_Errno: 0    </li>
<li>                 Last_Error:     </li>
<li class="alt">               Skip_Counter: 0    </li>
<li>        Exec_Master_Log_Pos: 374    </li>
<li class="alt">            Relay_Log_Space: 235    </li>
<li>            Until_Condition: None    </li>
<li class="alt">             Until_Log_File:     </li>
<li>              Until_Log_Pos: 0    </li>
<li class="alt">         Master_SSL_Allowed: No   </li>
<li>         Master_SSL_CA_File:     </li>
<li class="alt">         Master_SSL_CA_Path:     </li>
<li>            Master_SSL_Cert:     </li>
<li class="alt">          Master_SSL_Cipher:     </li>
<li>             Master_SSL_Key:     </li>
<li class="alt">      Seconds_Behind_Master: 0    </li>
<li>1 row in set (0.00 sec)  </li>
</ol>
Nach dem Login kopieren

  4、MySQL同步测试

  如上述均正确配置,现在任何一台MySQL上更新数据都会同步到另一台MySQL,MySQL同步在此不再演示

 

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage