MySQL主主复制+Keepalived 打造高可用MySQL集群(一)

2014-11-24 17:13:42 · 作者: · 浏览: 2

为了响应公司需求,打造出更安全的mysql集群,能够实现mysql故障后切换,研究了几天终于有了成果,一起分享一下。


首先介绍一下这套集群方案实现的功能


1、mysql服务器故障后自动转移,修好后自动切回


2、mysql服务故障自动转移,修好后自动切回


3、可以实现在几秒钟内转移


以下内容均是实验环境,请根据实际情况修改响应参数


实验环境


mysql1 ip:10.1.1.20


mysql2 ip:10.1.1.21


mysql vip:10.1.1.25


三台机器均安装centos 6.5 32位(虚拟机环境)


实验开始!!!


一、安装mysql,并打造主主同步。


相信主从同步大家都会做,一样的道理,主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。


安装mysql的过程不解释,yum就好啦


配置主主同步


1.配置 /etc/my.cnf


[mysqld]


datadir=/var/lib/mysql


socket=/var/lib/mysql/mysql.sock


user=mysql


# Disabling symbolic-links is recommended to prevent assorted security risks


symbolic-links=0


log-bin=binlog #开启binlog功能


log-bin-index=binlog.index


sync_binlog=0


server_id = 1 #两台机器不能重复,一个1 一个2 就好



[mysqld_safe]


log-error=/var/log/mysqld.log


pid-file=/var/run/mysqld/mysqld.pid



2.分别在两台机器上配置同步账号


10.1.1.20机器上:


[root@localhost ~]# mysql


Welcome to the MySQL monitor. Commands end with; or \g.


Your MySQL connection id is 2


Server version: 5.0.77-log Sourcedistribution



Type 'help;' or '\h' for help. Type '\c' toclear the buffer.



mysql> GRANT replication slave ON *.* TO'ab'@'%' identified by '123';


Query OK, 0 rows affected (0.00 sec)



mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)


10.1.1.21机器上:


[root@localhost ~]# mysql


Welcome to the MySQL monitor. Commands end with; or \g.


Your MySQL connection id is 2


Server version: 5.0.77-log Sourcedistribution



Type 'help;' or '\h' for help. Type '\c' toclear the buffer.



mysql> GRANT replication slave ON *.* TO'ab'@'%' identified by '123';


Query OK, 0 rows affected (0.00 sec)



mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)



注:由于本文是实验环境下编写,所以没考虑任何安全性问题,同步账号也是最高权限,请根据实际情况设置响应权限!!


3.设置同步


10.1.1.20机器上:


mysql> flush tables with read lock;


mysql> show master status;


+---------------+----------+--------------+------------------+


| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |


+---------------+----------+--------------+------------------+


| binlog.000003 | 365 | | |


+---------------+----------+--------------+------------------+


1 row in set (0.03 sec)


mysql> unlock tables;


Query OK, 0 rows affected (0.03 sec)


10.1.1.21机器上:


mysql> change master tomaster_host='10.1.1.20', master_port=3306, master_user='ab',master_password='123', master_log_file='binlog.000003',master_log_pos=365;


Query OK, 0 rows affected (0.06 sec)


mysql> start slave;


Query OK, 0 rows affected (0.00 sec)


mysql> show slave status \G #执行这命令后 注意观察下面这两个参数,必须要都是yes才行


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


同样的 反过来做相同操作


10.1.1.21机器上:


mysql> flush tables with read lock;


mysql> show master status;


+---------------+----------+--------------+------------------+


| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |


+---------------+----------+--------------+------------------+


| binlog.000004 | 207 | | |


+---------------+----------+--------------+------------------+


1 row in set (0.03 sec)


mysql> unlock tables;


Query OK, 0 rows affected (0.03 sec)


10.1.1.20机器上:



mysql> change master tomaster_host='10.1.1.21', master_port=3306, master_user='ab',master_password='123', master_log_file='binlog.000004',master_log_pos=207;


Query OK, 0 rows affected (0.06 sec)


mysql> start slave;


Query OK, 0 rows affected (0.00 sec)


mysql> show slave status \G #执行这命令后 注意观察下面这两个参数,必须要都是yes才行


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


介此,主主同步打造完成,可以简单测试一下,分别在两个机器上写数据 看看会不会同步到另一台机器上


PS:如果报错 Slave_IO_Running: NO 可以检查同步的账号是否创建正常!


二、安装k