使用環境:
node
實驗環境 兩從一主
mysql
四臺centos 6.7
linux
mha manager 192.168.2.32
sql
master 192.168.2.36數據庫
slave 192.168.2.38vim
slave 192.168.2.40centos
MAH用的用到的軟件版本號是: (注意:裝這兩個包的時候會有不少依賴包的,須要提早把epel源裝上,而後用yum 來安裝)
服務器
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 阿里雲的epel源session
mha4mysql-manager-0.56-0.el6.noarch.rpmapp
mha4mysql-node-0.56-0.el6.noarch.rpm
連接:https://pan.baidu.com/s/1nvta8Ut 密碼:fv3b
MAH:
HA是一位日本MySQL大牛用Perl寫的一套MySQL故障切換方案,來保證數據庫系統的高可用.在宕機的時間內(一般10—30秒內),完成故障切換,部署MHA,可避免主從一致性問題,節約購買新服務器的費用,不影響服務器性能,易安裝,不改變現有部署。
先在master 和slave 作好主從,最好在其中一臺slave上作半同步!
在實驗環境裏面配置以前記得必定要把防火牆和selinux先關閉!
若是在真實環境中在iptables裏把相對應的端口開啓,不然由於這個致使你實驗不成功!
master 配置
編輯/etc/my.cnf
[mysqld]
server_id = 1
log_bin = master-bin
relay_log = realy-bin
配置好以後重啓mysqld服務
# service mysqld restart
在master上安裝半同步
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
開啓半同步模式;
mysql> set global rpl_semi_sync_master_enabled=1;
查看是否開啓:
mysql> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
查看狀態
mysql> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
建立主從複製用到的賬號,及MHA管理用到的賬號密碼
mysql> grant replication slave, replication client on *.* to 'repluser'@'192.168.2.%' identified by '123456';
mysql> grant all on *.* to 'mhauser'@'192.168.2.%' identified by '123456';
Slave 配置 (192.168.2.38)
在/etc/my.cnf
[mysqld]
server_id = 2
relay_log = relay-bin
read_only = 1
relay_log_purge = 0
log_bin = master-bin
重啓mysqld服務
# service mysqld restart
Shutting down MySQL. [ OK ]
Starting MySQL.. [ OK ]
配置半同步slave端:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
開啓半同步:
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
鏈接master端的配置
mysql> change master to master_host='192.168.2.36',master_user='repluser',master_password='123456',master_log_file='master-bin.000001',master_log_pos=107;
啓動以及查看是否正常工做
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.36
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 499
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 646
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 499
Relay_Log_Space: 796
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
在master上查看半同步是否已經接受到客戶端了
mysql> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
第二臺slave配置主從複製;(192.168.2.40)
在/etc/my.cnf
[mysqld]
server_id = 2
relay_log = relay-bin
read_only = 1
relay_log_purge = 0
log_bin = master-bin
鏈接master端
mysql> change master to master_host='192.168.2.36',master_user='repluser',master_password='123456',master_log_file='master- bin.000001',master_log_pos=107;
查看鏈接信息:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.36
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 499
Relay_Log_File: relay-bin.000003
Relay_Log_Pos: 646
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
在MAH manager端啓用ssh無密鑰鏈接各臺服務器;
# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
87:fb:6d:2e:f8:f7:72:5d:28:41:01:54:f4:48:7c:12 root@xiong.cn
The key's randomart image is:
+--[ RSA 2048]----+
| .o=Eo |
| .+o. |
| ..o. |
| . . |
| S . . . |
| o . . .|
| .. . ..|
| ....+ . .|
| .o=o+. |
+-----------------+
本機也要一份密鑰
# cat .ssh/id_rsa.pub > .ssh/authorized_keys
修改.ssh/authorized_keys 爲600權限
chmod go= .ssh/authorized_keys
把密鑰複製給其它幾個節點
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.36:/root/.ssh
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.38:/root/.ssh
# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.2.40:/root/.ssh
而後驗證每一個節點是否能正常登陸
# ssh root@192.168.2.36 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.39 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
# ssh root@192.168.2.38 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.38 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
# ssh root@192.168.2.40 'ifconfig eth0'
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:44:84
inet addr:192.168.2.40 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:4484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
192.168.2.32 MAH manager :
上傳mha4mysql-manager和mha4mysql-node包 以前說過 裝這兩個會有依賴包的並且都在epel源裏面
]# yum -y install mha4mysql-*
已安裝:
mha4mysql-manager.noarch 0:0.56-0.el6 mha4mysql-node.noarch 0:0.56-0.el6
做爲依賴被安裝:
perl-Config-Tiny.noarch 0:2.12-7.1.el6 perl-DBD-MySQL.x86_64 0:4.013-3.el6 perl-Email-Date-Format.noarch 0:1.002-5.el6 perl-Log-Dispatch.noarch 0:2.27-1.el6
perl-MIME-Lite.noarch 0:3.027-2.el6 perl-MIME-Types.noarch 0:1.28-2.el6 perl-Mail-Sender.noarch 0:0.8.16-3.el6 perl-Mail-Sendmail.noarch 0:0.79-12.el6
perl-MailTools.noarch 0:2.04-4.el6 perl-Parallel-ForkManager.noarch 0:0.7.9-1.el6 perl-Params-Validate.x86_64 0:0.92-3.el6 perl-TimeDate.noarch 1:1.16-13.el6
master 安裝node 包 和 slave 安裝node包 都是同樣的 這裏就寫一條就好了
]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
Installed:
mha4mysql-node.noarch 0:0.56-0.el6
Dependency Installed:
perl-DBD-MySQL.x86_64 0:4.013-3.el6
Complete!
在manager建立相關的目錄以及配置文件
# mkdir /etc/masterha
# vim /etc/masterha/app1.cnf
[server default]
user=mhauser
password=123456
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1
[server1]
hostname=192.168.2.36
candidate_master=1
master_binlog_dir = "/mydata/data"
[server2]
hostname=192.168.2.38
candidate_master=1
master_binlog_dir = "/mydata/data"
[server3]
hostname=192.168.2.40
在manager上檢查ssh鏈接是否正常
# masterha_check_ssh --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:51:30 2016 - [debug] ok.
Tue Jun 7 05:51:30 2016 - [info] All SSH connection tests passed successfully.
檢查腳本是否有誤
# masterha_check_repl --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:53:23 2016 - [info] Slaves settings check done.
Tue Jun 7 05:53:23 2016 - [info]
192.168.2.36(192.168.2.36:3306) (current master)
+--192.168.2.38(192.168.2.38:3306)
+--192.168.2.40(192.168.2.40:3306)
Tue Jun 7 05:53:23 2016 - [info] Checking replication health on 192.168.2.38..
Tue Jun 7 05:53:23 2016 - [info] ok.
Tue Jun 7 05:53:23 2016 - [info] Checking replication health on 192.168.2.40..
Tue Jun 7 05:53:23 2016 - [info] ok.
Tue Jun 7 05:53:23 2016 - [warning] master_ip_failover_script is not defined.
Tue Jun 7 05:53:23 2016 - [warning] shutdown_script is not defined.
Tue Jun 7 05:53:23 2016 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
這裏沒有問題 能夠啓動mha了,注意它是在前臺顯示的而後若是master掛了以後 它會自動切換到一臺從服務器來充當master,而後它mha 也會中止 而後修好掛掉的服務器以後配置好 而後在啓動mha 也能夠寫個腳本在後臺自動檢測。
# masterha_manager --conf=/etc/masterha/app1.cnf
Tue Jun 7 05:56:42 2016 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Jun 7 05:56:42 2016 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Tue Jun 7 05:56:42 2016 - [info] Reading server configuration from /etc/masterha/app1.cnf..
而後測試的話 把master中止掉 就行 看mha自動切換從庫爲主!這裏我就不測試了