主庫:192.168.0.11node
備選主庫:192.168.0.12mysql
從庫:192.168.0.13sql
監控機:192.168.0.10vim
首先在三臺機器上安裝mysql(監控機的mysql先不裝,之後再說)。api
我使用percona server(一個mysql的改進版。聽說比mysql性能更好些)。服務器
[root@cluster1 ~]# tar zxvf Percona-Server-5.5.21-rel25.1-234.Linux.i686.tar.gz -C /usr/local/app
[root@cluster1 ~]# cd /usr/local/dom
[root@cluster1 local]# mv Percona-Server-5.5.21-rel25.1-234.Linux.i686 mysqlssh
[root@cluster1 local]# useradd -s /bin/false -M mysqlide
[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
1000爲1000ms的超時時間。
備選主庫(從庫):
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 slave;mysql>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 manager和MHA 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源,下載epel的rpm包,安裝便可。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-MySQL和mha-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 root@192.168.0.10 identified by '123456';
mysql> grant all on *.* to root@cluster1 identified by '123456';
mysql> grant all on *.* to root@192.168.0.11 identified by '123456';
備選主機點(從節點)
mysql> grant all on *.* to root@192.168.0.10 identified by '123456';
mysql> grant all on *.* to root@cluster2 identified by '123456';
mysql> grant all on *.* to root@192.168.0.12 identified by '123456';
從節點
mysql> grant all on *.* to root@192.168.0.10 identified by '123456';
mysql> grant all on *.* to root@slave identified by '123456';
mysql> grant all on *.* to root@192.168.0.13 identified by '123456';
到監控機,創建ssh無密碼登陸環境
[root@manager ~]# ssh-keygen -t rsa
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.11
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.12
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.13
在主機點11上
[root@cluster1 ~]# ssh-keygen -t rsa
[root@cluster1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.12
[root@cluster1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.13
備選主節點12上
[root@cluster2 ~]# ssh-keygen -t rsa
[root@cluster2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.11
[root@cluster2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.13
在從節點上
[root@slave ~]# ssh-keygen -t rsa
[root@slave ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.11
[root@slave ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.12
再回到監控機
[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的轉移。其餘測試正在進行中。有一樣興趣的朋友你們一塊兒測試一下。