mha的搭建步驟(一主一從架構)


所需腳本文件到這里下載:http://note.youdao.com/share/web/file.html?id=ae8b11a61f7a8aa7b52aac3fcf0c4b83&type=note

 

環境:

centos 6.5 x64

192.168.0.32  # master

192.168.0.33  #管理節點和從節點slave

VIP:192.168.0.62

 

iptables打開mysql端口

selinx關閉:

shell > vim /etc/selinux/config

SELINUX=disabled

 

1.安裝mysql 5.5.x以上的版本(如果是5.6以上的版本,不建議開啟GTID復制),並搭建好雙主復制,復制用戶:repl,復制用戶密碼:123456

主從復制搭建好后,從庫執行下面兩個命令(不要加入到my.cnf中,因為從庫隨時可能被提升為master)

mysql -e 'set global read_only=1;set global relay_log_purge=0;'

 

如果是剛剛初始化安裝完成的mysql,建議進行安全清理:

mysql > delete from mysql.user where user!='root' or host !='localhost';

mysql > truncate table mysql.db;

mysql > drop database test;

mysql > flush privileges;

 

 

2.所有服務器之間建立ssh互信(如果管理節點和數據節點共用,要自己能免密鑰登錄自己):

master上:

shell > ssh-keygen -t rsa  #創建密鑰

shell > ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.33  #發送ssh密鑰到其他服務器

shell > ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.32  #發送ssh密鑰到自己

 

slave上:

shell > ssh-keygen -t rsa  #創建密鑰

shell > ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.32  #發送ssh密鑰到其他服務器

shell > ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.33  #發送ssh密鑰到自己

 

3.安裝epel源(所有節點):

shell > rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
shell > rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  

  

4.安裝mha(一主一從的架構建議兩個節點都安裝manager和node包)

MHA的配置,只需要在manager節點上配置即可正常工作,配置文件最少一個,一般可以分成兩個部分,這樣一個manager管理多個集群時可以少寫一點配置(當然,為了方便故障時快速恢復manager,可以在備主上也進行配置一,只是需要把配置里的主動關系做對應修改):

master:

shell > yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

 

解壓mha_packge.zip:
shell > cd packge

shell > rpm -Uvh mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm

shell > cp -ar masterha /etc/

shell > mkdir /var/log/masterha/app1 -p

 

slave安裝:

shell > yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

 

解壓mha_packge.zip:
shell > cd packge

shell > rpm -Uvh mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm

shell > cp -ar masterha /etc/

shell > mkdir /var/log/masterha/app1 -p

 

5.配置Mha

master(master中的MHA配置只是用來做備用的,不需要啟動管理節點,在主庫切換成從庫之后,就可以快速切換管理節點,不需要重新配置),全局配置文件內容如下:

shell > cd /etc/masterha

shell > cat masterha_default.conf  #修改全局配置文件

[server default]

#MySQL的用戶和密碼

user=root

password=4testHIGH

 

#系統ssh用戶

ssh_user=root

 

#復制用戶

repl_user=repl

repl_password= 123456

  

#監控

ping_interval=1

#shutdown_script=""

 

#切換調用的腳本

master_ip_failover_script= /etc/masterha/master_ip_failover

master_ip_online_change_script= /etc/masterha/master_ip_online_change

  

修改集群配置文件:

shell > cat app1.conf

[server default]

user=root

password=4testHIGH

 

#mha manager工作目錄

manager_workdir = /var/log/masterha/app1

manager_log = /var/log/masterha/app1/app1.log

remote_workdir = /var/log/masterha/app1

 

[server1]

hostname=192.168.0.33  #主庫的配置上,把從庫寫成主節點

master_binlog_dir = /data/mysql/data

port=3306

 

[server2]

hostname=192.168.0.32 #主庫的配置上,把主庫寫成備節點

master_binlog_dir=/data/mysql/data

port=3306

candidate_master=1

check_repl_delay = 0     #用防止master故障時,切換時slave有延遲,卡在那里切不過來。

 

注:如果有一主多從架構,那么只需要在app1/conf文件后面再多添加幾個配置即可,類似如下:

 

[server3]

hostname=192.168.0.x

port=3306

master_binlog_dir=/data/mysql/data
 
 

6.修改master_ip_failover文件中的VIP和綁定網卡

shell > vim /etc/masterha/master_ip_failover

 

修改master_ip_online_change文件中的VIP和綁定網卡:

shell > vim /etc/masterha/master_ip_online_change

 

7.把drop_vip.sh和init_vip.sh中的網卡和VIP都改過來

把腳本賦予執行權限:shell > chmod +x drop_vip.sh init_vip.sh master_ip_*

 

8.這里我為了故障時能快速恢復MHA管理節點,在備主(slave)上也配置了manager,但是不啟動:

shell > cd /etc/masterha

shell > cat masterha_default.conf  #修改全局配置文件

[server default]

#MySQL的用戶和密碼

user=root

password=4testHIGH

 

#系統ssh用戶

ssh_user=root

 

#復制用戶

repl_user=repl

repl_password= 123456

  

#監控

ping_interval=1

#shutdown_script=""

 

#切換調用的腳本

master_ip_failover_script= /etc/masterha/master_ip_failover

master_ip_online_change_script= /etc/masterha/master_ip_online_change

  

修改集群配置文件:

shell > cat app1.conf

[server default]

user=root

password=4testHIGH

 

#mha manager工作目錄

manager_workdir = /var/log/masterha/app1

manager_log = /var/log/masterha/app1/app1.log

remote_workdir = /var/log/masterha/app1

 

[server1]

hostname=192.168.0.32 #從庫上的配置,主庫就是主節點

master_binlog_dir = /data/mysql/data

port=3306

 

[server2]

hostname=192.168.0.33 #從庫上的配置,從庫就是備節點

master_binlog_dir=/data/mysql/data

port=3306

candidate_master=1

check_repl_delay = 0     #用防止master故障時,切換時slave有延遲,卡在那里切不過來。

 

修改master_ip_failover文件中的VIP和綁定網卡

shell > vim /etc/masterha/master_ip_failover

 

 

修改master_ip_online_change文件中的VIP和綁定網卡:

shell > vim /etc/masterha/master_ip_online_change

 

drop_vip.sh和init_vip.sh中的網卡和VIP都改過來

把腳本賦予執行權限:shell > chmod +x drop_vip.sh init_vip.sh master_ip_*

 

9.配置文件測試(一主一從架構的主庫和從庫上的管理節點建議都要進行測試,不單單只測試從庫上的管理節點):

測試ssh連通性:

shell > masterha_check_ssh --conf=/etc/masterha/app1.conf

注意:如果你是用虛擬機做實驗,很可能碰到這步驟報錯,碰到兩邊都無法ssh或者一邊可以,一邊不可以,此時,可以重新創建密鑰試試,如果多次嘗試仍然不行,那么就把發起ssh連接而失敗的虛擬機換一台再試。或者,看看你的架構是不是把管理節點和數據節點放一起,而管理節點上又沒有配置自己到自己免密鑰登錄。

看到最后提示:[info] All SSH connection tests passed successfully.表示測試通過

 

測試集群中的主從復制:

shell > masterha_check_repl --conf=/etc/masterha/app1.conf  --global_conf=/etc/masterha/masterha_default.conf

注意:執行這個檢測命令的時候使用的是user=root帳號去檢測,注意user=root帳號也要有遠程權限,另外,把mysql目錄下的命令做個鏈接:ln -s /usr/local/mysql/bin/* /usr/bin/

看到最后提示:MySQL Replication Health is OK.表示測試通過

 

10.啟動管理節點(只在從庫上啟動管理節點):

啟動管理節點最好使用screen啟動:

shell > nohup masterha_manager --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf  --remove_dead_master_conf --ignore_last_failover> /tmp/mha_manager.log 2>&1 &

 

sh /etc/masterha/init_vip.sh
確認VIP 綁定成功,如果業務按VIP 配置的訪問DB,應該已經可以正常訪問

 

注意:
第一次起動,主庫上的VIP 不會自動綁定,需要手功調用init_vip.sh 去綁定,主庫發生故障切換會進行vip 的漂移

 

11.啟動之后查看控制台輸出日志:

/tmp/mha_manager.log

查看app1日志輸出:

/var/log/masterha/app1/app1.log

查看master的健康狀況日志:

/var/log/masterha/app1/app1.master_status.health

 

檢查是否啟動成功:

shell > masterha_check_status --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf

 

12.切換測試:

1).在線手工切換(維護切換,需要把MHA監控進程關掉):

shell > masterha_master_switch --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=192.168.0.33 --orig_master_is_new_slave --running_updates_limit=10000

--orig_master_is_new_slave:把舊的master配置為從庫

--running_updates_limit=10000:如果主從庫同步延遲在10000s內都允許切換,但是但是切換的時間長短是由recover時relay 日志的大小決定

 

切換成功需要看到類似下面的提示:

info] Switching master to 192.168.0.33(192.168.0.33:3306) completed successfully

同時要查看VIP是否已經漂移到了新的主庫上面

 

2).故障手工切換(MHA進程沒啟動或者掛了的同時主庫也掛了):

shell > masterha_master_switch --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf --dead_master_host=old_ip --master_state=dead --new_master_host=new_ip --ignore_last_failover

切換成功需要看到類似如下提示:

Started manual(interactive) failover.

Invalidated master IP address on 192.168.0.32(192.168.0.32:3306)

The latest slave 192.168.0.33(192.168.0.33:3306) has all relay logs for recovery.

Selected 192.168.0.33(192.168.0.33:3306) as a new master.

192.168.0.33(192.168.0.33:3306): OK: Applying all logs succeeded.

192.168.0.33(192.168.0.33:3306): OK: Activated master IP address.

Generating relay diff files from the latest slave succeeded.

192.168.0.33(192.168.0.33:3306): Resetting slave info succeeded.

Master failover to 192.168.0.33(192.168.0.33:3306) completed successfully.

 

注意:如果是主庫服務器還活着,只是mysqld掛了的時候,VIP在切換的時候也會自動漂移,如果是服務器掛了,那么在掛掉的主庫重啟后,注意不要讓VIP隨開機啟動,因為此時VIP已經漂移到了從庫上,從庫上可能正在接管業務,故障主庫起來后,需要確認數據是否跟新的主庫一樣,如果一樣,那么就把故障主庫作為新的從庫加入新主庫下

 

3).故障自動切換(啟動MHA監控進程)手動把主庫mysqld停掉,觀察/var/log/masterha/app1.log日志輸出,看到如下信息:

Started automated(non-interactive) failover.

Invalidated master IP address on 192.168.0.32(192.168.0.32:3306)

The latest slave 192.168.0.33(192.168.0.33:3306) has all relay logs for recovery.

Selected 192.168.0.33(192.168.0.33:3306) as a new master.

192.168.0.33(192.168.0.33:3306): OK: Applying all logs succeeded.

192.168.0.33(192.168.0.33:3306): OK: Activated master IP address.

Generating relay diff files from the latest slave succeeded.

192.168.0.33(192.168.0.33:3306): Resetting slave info succeeded.

Master failover to 192.168.0.33(192.168.0.33:3306) completed successfully.

 

表示成功切換,切換成功后,查看VIP是否漂移到了從庫上(切換成功后,MHA進程會自動停止),同時查看/etc/masterha/app1.conf文件中的[server1]的配置是否都被刪除掉了

故障主庫起來后,需要確認數據是否跟新的主庫一樣,如果一樣,那么就把故障主庫作為新的從庫加入新主庫下。然后在故障主庫上啟動MHA進程。

 

附:

MHA 日常維護命令集:

1).查看ssh 登陸是否成功
shell > masterha_check_ssh --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf

2).查看復制是否建立好
shell > masterha_check_repl --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf

3).檢查啟動的狀態
shell > masterha_check_status--global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf

4).停止mha
shell > #masterha_stop --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf

5).啟動mha
shell > nohup masterha_manager --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf > /tmp/mha_manager.log < /dev/null 2>&1 &

注意:當有slave 節點宕掉的情況是啟動不了的,加上--ignore_fail_on_start 即使有節點宕掉也能啟動mha,需要在配置文件中設置ignore_fail=1

6).failover 后下次重啟
每次failover 切換后會在管理目錄生成文件app1.failover.complete ,下次在切換的時候會發現有這個文件導致切換不成功,需要手動清理掉。
shell > rm -rf /masterha/app1/app1.failover.complete
也可以加上參數--ignore_last_failover

7).手工failover
手工failover 場景,master 死掉,但是masterha_manager 沒有開啟,可以通過手工failover:
shell > masterha_master_switch --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf --dead_master_host=old_ip --master_state=dead --new_master_host=new_ip --ignore_last_failover

8).masterha_manager 是一種監視和故障轉移的程序。另一方面,masterha_master_switch 程序不監控主庫。masterha_master_switch 可以用於主庫故障轉移,也可用於在線總開關。

9).手動在線切換(master還或者,比如做維護切換時)
shell > masterha_master_switch --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=192.168.199.78 --orig_master_is_new_slave
或者
shell > masterha_master_switch --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=192.168.199.78 -orig_master_is_new_slave --running_updates_limit=10000
--orig_master_is_new_slave 切換時加上此參數是將原master 變為slave 節點,如果不加此參數,原來的master 將不啟動
--running_updates_limit=10000 切換時候選master 如果有延遲的話,mha 切換不能成功,加上此參數表示延遲在此時間范圍內都可切換(單位為s),但是切換的時間長短是由recover時relay 日志的大小決定

 

手動在線切換mha,切換時需要將在運行的mha 停掉后才能切換。
在備庫先執行DDL,一般先stop slave,一般不記錄mysql 日志,可以通過set SQL_LOG_BIN =0 實現。然后進行一次主備切換操作,再在原來的主庫上執行DDL。這種方法適用於增減索引,如果是增加字段就需要額外注意。


注意:Online master switch 開始只有當所有下列條件得到滿足。
1). IO threads on all slaves are running // 在所有slave 上IO 線程運行。
2). SQL threads on all slaves are running //SQL 線程在所有的slave 上正常運行。
3). Seconds_Behind_Master on all slaves are less or equal than --running_updates_limit
seconds // 在所有的slaves 上Seconds_Behind_Master 要小於等於running_updates_limit
seconds
4). On master, none of update queries take more than --running_updates_limit seconds in the
show processlist output // 在主上,沒有更新查詢操作多於running_updates_limit seconds


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM