使用MHA做MySQL的高可用


主库: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

  • 1
  • 2
  • 3
  • 下一页

相关内容