使用MHA做MySQL的高可用

2014-11-24 19:01:34 · 作者: · 浏览: 43

主库:192.168.0.11


备选主库:192.168.0.12


从库:192.168.0.13


监控机:192.168.0.10


首先在三台机器上安装mysql(监控机的mysql先不装,以后再说)。


我使用percona server(一个mysql的改进版。据说比mysql性能更好些)。


[root@cluster1 ~]# tar zxvf Percona-Server-5.5.21-rel25.1-234.Linux.i686.tar.gz -C /usr/local/


[root@cluster1 ~]# cd /usr/local/


[root@cluster1 local]# mv Percona-Server-5.5.21-rel25.1-234.Linux.i686 mysql


[root@cluster1 local]# useradd -s /bin/false -M mysql


[root@cluster1 mysql]# cd /usr/local/mysql/


[root@cluster1 mysql]# chown -R mysql.mysql .


[root@cluster1 mysql]# cp support-files/my-medium.cnf /etc/my.cnf


[root@cluster1 mysql]# ./scripts/mysql_install_db --user=mysql


[root@cluster1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld


[root@cluster1 mysql]# chmod +x /etc/init.d/mysqld


[root@cluster1 mysql]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf


[root@cluster1 mysql]# ldconfig


[root@cluster1 mysql]# /etc/init.d/mysqld start


[root@cluster1 mysql]# chkconfig --add mysqld


[root@cluster1 mysql]# chkconfig --level 235 mysqld on



注意“my.cnf”拷贝过去之后最好指定“basedir”和“datadir”以及二进制日志和“server-id


以上是三台机器安装mysql,一定记得“server-id”不能相同。



Mysql5.5以后新增了半同步复制功能。在使用replication时,主服务器把要提交的事物至少传给了一个备库。增加了主库和从库之间事物的一致性。MHA配合半同步复制效果更佳。虽然启用半同步复制会降低一些性能。但为保持整个系统的正常运行还是值得的。



开启半同步复制:


主库:


[root@cluster1 mysql]# cp /usr/local/mysql/lib/plugin/*.so /usr/local/mysql/lib/mysql/plugin/


不拷贝的话默认找不到模块文件。


mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';


mysql> set global rpl_semi_sync_master_enabled=1;


mysql> set global rpl_semi_sync_master_timeout=1000;


可以show一下验证是否打开了semisync功能。


mysql> show global status like 'rpl%';


为了让mysql在重启时自动加载该功能,在/etc/my.cnf中加入:


rpl_semi_sync_master_enabled=1


rpl_semi_sync_master_timeout=1000


10001000ms的超时时间。


备选主库(从库):


mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';


mysql> set global rpl_semi_sync_master_enabled=1;


mysql> set global rpl_semi_sync_master_timeout=1000;


mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';


mysql> set global rpl_semi_sync_slave_enabled=1;


/etc/my.cnf中加入:


rpl_semi_sync_master_enabled=1


rpl_semi_sync_master_timeout=1000


rpl_semi_sync_slave_enabled=1



从库:


mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';


mysql> set global rpl_semi_sync_slave_enabled=1;


/etc/my.cnf中加入:


rpl_semi_sync_slave_enabled=1



在备用节点和从节点的/etc/my.cnf中加入选项:


read_only=1
relay_log_purge=0