使用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

 

配置主從關係:

主庫上:

mysql> show master status;

記錄下 File”和“Position”即當前主庫使用的二進制日誌名稱和位置。

mysql> grant replication slave to repl@'192.168.0.%' identified by 'repl';

兩臺從庫上:

change master to master_host="192.168.0.11",master_user="repl",master_password="repl",master_log_file="mysql-bin-cluster1.000004",master_log_pos=255;

 

其中備選主庫也給它加一個replication的帳號:

mysql> grant replication slave to repl@'192.168.0.%' identified by 'repl';

 

在兩臺從庫上  mysql>start slavemysql>show slave status\G

查看Slave_IO_Running: Yes

Slave_SQL_Running: Yes

是否都爲yes。如果是則主從關係配置完畢。

 

可在主庫上再次驗證半同步複製是否正常開啓,並監聽到客戶端。

Mysql>show global status like “rpl%”;

可以看到Rpl_semi_sync_master_clients 2.說明半同步複製正常。

 

安裝MHA managerMHA node

 

在監控機上安裝這兩個組件

 

首先修改下主機名

[root@localhost ~]# hostname manager

[root@localhost ~]#vim /etc/sysconfig/network

把相應的HOSTNAME改成manager

[root@cluster1 ~]# cat > /etc/hosts << A

> 127.0.0.1   localhost.localdomain localhost

> 192.168.0.10   manager

> 192.168.0.11   cluster1

> 192.168.0.12   cluster2

> 192.168.0.13   slave

> A

 

其他三臺機器做同樣操作,最好加上時間同步 ntpdate ntp.api.bz

 

安裝第三方yum源,下載epelrpm包,安裝即可。epel源的包比較全,MHA依賴的perl包都能直接用yum安裝

 

監控機:

安裝依賴包

[root@manager ~]# yum install perl-DBD-MySQL

[root@manager ~]# yum install perl-Config-Tiny

[root@manager ~]# yum install perl-Log-Dispatch

[root@manager ~]# yum install perl-Parallel-ForkManager

[root@manager ~]# yum install perl-Config-IniFiles

安裝mha-node

[root@manager ~]# tar zxvf mha4mysql-node-0.53.tar.gz

[root@manager ~]# cd mha4mysql-node-0.53

[root@manager mha4mysql-node-0.53]# perl Makefile.PL;make;make install

安裝mha-manager

[root@manager ~]# tar zxvf mha4mysql-manager-0.53.tar.gz

[root@manager ~]# cd mha4mysql-manager-0.53

[root@manager mha4mysql-manager-0.53]# perl Makefile.PL ;make;make install

 

其他mysql節點只安裝perl-DBD-MySQLmha-node即可。

 

配置manager

拷貝樣例文件到/usr/local/bin

[root@manager mha4mysql-manager-0.53]# cp samples/scripts/* /usr/local/bin/

注意其中的master_ip_failover是不能直接使用的,需要進行修改。我不怎麼懂perl腳本,幸運的是我google到一個比較好用的腳本,稍作修改就行了。

編輯主配置文件:

[root@manager mha4mysql-manager-0.53]# vim /etc/app1.cnf

[server default]

manager_workdir=/masterha/app1

manager_log=/masterha/app1/manager.log

#remote_workdir=/usr/local/mysql

user=root

password=123456

ssh_user=root

repl_user=repl

repl_password=repl

ping_interval=1

shutdown_script=""

master_ip_failover_script=/usr/local/bin/master_ip_failover

master_ip_online_change_script=/usr/local/bin/master_ip_online_change_script

report_script=""

[server1]

hostname=192.168.0.11

master_binlog_dir=/usr/local/mysql/data

candidate_master=1

[server2]

hostname=192.168.0.12

master_binlog_dir=/usr/local/mysql/data

candidate_master=1

[server3]

hostname=192.168.0.13

master_binlog_dir=/usr/local/mysql/data

no_master=1

[root@manager ~]# mkdir -p /masterha/app1/

 

基本上監控機的安裝配置算是完成了。

 

Mysql節點的配置:

主節點

mysql> grant all on *.* to [email protected] identified by '123456';

mysql> grant all on *.* to root@cluster1 identified by '123456';

mysql> grant all on *.* to [email protected] identified by '123456';

 

備選主機點(從節點)

mysql> grant all on *.* to [email protected] identified by '123456';

mysql> grant all on *.* to root@cluster2 identified by '123456';

mysql> grant all on *.* to [email protected] identified by '123456';

 

從節點

mysql> grant all on *.* to [email protected] identified by '123456';

mysql> grant all on *.* to root@slave identified by '123456';

mysql> grant all on *.* to [email protected] identified by '123456';

 

到監控機,建立ssh無密碼登錄環境

 

[root@manager ~]# ssh-keygen -t rsa

[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

 

在主機點11

[root@cluster1 ~]# ssh-keygen -t rsa

[root@cluster1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@cluster1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

 

備選主節點12

[root@cluster2 ~]# ssh-keygen -t rsa

[root@cluster2 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@cluster2 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

 

在從節點上

[root@slave ~]# ssh-keygen -t rsa

[root@slave ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@slave ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

再回到監控機

[root@manager ~]# masterha_check_ssh --conf=/etc/app1.cnf

檢查ssh登錄是否完全正確

[root@manager ~]# masterha_check_repl --conf=/etc/app1.cnf

檢查複製情況是否完全正確。

 

都無誤後可以啓動manager

[root@manager ~]# nohup masterha_manager --conf=/etc/app1.cnf < /dev/null > /masterha/app1/manager.log 2>&1 &

 

在備用主節點和從節點上加入計劃任務:

00 00 * * * /usr/local/bin/purge_relay_logs –user=root –password=123456 –disable_relay_log_purge >> /masterha/purge_relay_logs.log 2>&1

 

本文是在基本測試通過的情況下,回憶實施步驟寫下來的,可能有錯誤之處。實現了正常情況下,master主機用虛擬IP對外提供寫服務。master的mysql宕掉後的master轉移,虛擬ip轉移以及slave的轉移。其他測試正在進行中。有同樣興趣的朋友大家一起測試一下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章