mysql MHA 高可用架構部署
MHA簡介:即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL專家採用Perl語言編寫的一個指令碼管理工具,
該工具僅適用於MySQL Replication(二層)環境,目的在於維持Master主庫的高可用性。
在 MySQL 故障切換過程中,MHA 能做到 0~30 秒之內自動完成資料庫的故障
切換操作,並且在進行故障切換的過程中,MHA 能最大程度上保證資料庫的一致性,以達到
真正意義上的高可用。
MHA 由兩部分組成:MHA Manager(管理節點)和 MHA Node(資料節點)。MHA Manager
可以獨立部署在一臺獨立的機器上管理多個Master-Slave叢集,也可以部署在一臺Slave上。
當 Master 出現故障是,它可以自動將最新資料的 Slave 提升為新的 Master,然後將所有其他
的 Slave 重新指向新的 Master。整個故障轉移過程對應用程式是完全透明的。
[root@lvs-a ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm (6.5系統)
[root@lvs-a ~]# #rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm (5.8)
[root@lvs-a ~]# ls /etc/yum.repos.d/
base.repo epel.repo epel-testing.repo rhel-debuginfo.repo
[root@lvs-a ~]# yum -y install perl-DBD-MySQL ncftp
[root@lvs-a tarbag]# tar -zxf mha4mysql-node-0.56..tar.gz -C /usr/local ## node軟體解壓
[root@lvs-a tarbag]# cd /usr/local/mha4mysql-node-0.56
[root@lvs-a tarbag]# perl Makefile.PL
[root@lvs-a tarbag]# make && make install ## node安裝
[root@lvs-a tarbag]# yum -y install perl-Config-Tiny perl-Params-Validate perl-Log-Dispatch perl-Parallel-ForkManager
[root@lvs-a tarbag]# tar -zxf mha4mysql-manager-0.56.tar.gz -C /usr/local/
[root@lvs-a tarbag]# cd /usr/local/mha4mysql-manager-0.56 ##manager軟體安裝
[root@lvs-a mha4mysql-manager-0.56]# perl Makefile.PL
[root@lvs-a mha4mysql-manager-0.56]# make && make install
二:9.25主節點部署,只安裝node即可
[root@master1~]#rpm-ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@master1 ~]# ls /etc/yum.repos.d/
base.repo epel.repo epel-testing.repo rhel-debuginfo.repo
[root@master1 ~]# yum -y install perl-DBD-MySQL ncftp
[root@master1 tarbag]# tar -zxf mha4mysql-node-0.56..tar.gz -C /usr/local
[root@master1 tarbag]# cd /usr/local/mha4mysql-node-0.56
[root@master1 mha4mysql-node-0.56]# perl Makefile.PL
[root@master1 mha4mysql-node-0.56]# make && make install
[root@master1 mha4mysql-node-0.56]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
安裝mysql軟體 具體過程略過,參考: MySQL 主從同步複製架構搭建 文件
建立mha管理賬號
Mysql> grant all on *.* to 'admin'@'%' identified by '123456';
Mysql> flush privileges;
建立mysql主從管理賬號
Mysql> grant replication slave on *.* to 'repl'@'%' identified by '123456';
Mysql> flush privileges;
三、9.26主備節點部署(步驟同主庫一樣)
[root@master2~]#rpm-ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@master2 ~]# ls /etc/yum.repos.d/
base.repo epel.repo epel-testing.repo rhel-debuginfo.repo
[root@master2 ~]# yum -y install perl-DBD-MySQL ncftp
[root@master2 tarbag]# tar -zxf mha4mysql-node-0.56..tar.gz -C /usr/local
[root@master2 tarbag]# cd /usr/local/mha4mysql-node-0.56
[root@master2 mha4mysql-node-0.56]# perl Makefile.PL
[root@master2 mha4mysql-node-0.56]# make && make install
[root@master2 mha4mysql-node-0.56]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
建立mha管理賬號 其實可以不建立的,因為開始之前你要做讓master1去恢復別的mysql,只要master1上有即可。
Mysql> grant all on *.* to 'admin'@'%' identified by '123456';
Mysql> flush privileges;
建立mysql主從管理賬號
Mysql> grant replication slave on *.* to 'repl'@'%' identified by '123456';
Mysql> flush privileges;
四:9.29 從節點部署
[root@slave1~]#rpm-ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@slave1 ~]# ls /etc/yum.repos.d/
base.repo epel.repo epel-testing.repo rhel-debuginfo.repo
[root@slave1 ~]# yum -y install perl-DBD-MySQL ncftp
[root@slave1 tarbag]# tar -zxf mha4mysql-node-0.56..tar.gz -C /usr/local
[root@slave1 tarbag]# cd /usr/local/mha4mysql-node-0.56
[root@slave1 mha4mysql-node-0.56]# perl Makefile.PL
[root@slave1 mha4mysql-node-0.56]# make && make install
[root@slave1 mha4mysql-node-0.56]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
建立mha管理賬號
Mysql> grant all on *.* to 'admin'@'%' identified by '123456';
Mysql> flush privileges;
[root@lvs-a ~]# mkdir -p /etc/masterha
[root@lvs-a ~]# mkdir -p /masterha/app1
[root@lvs-a mha4mysql-manager-0.56]# cp samples/conf/* /etc/masterha/
[root@lvs-a ~]# cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
user=admin
password=123456
ssh_user=root
repl_user=repl
repl_password=123456
ping_interval=1 #每秒ping一次
shutdown_script=""
master_ip_failover_script="/usr/local/bin/master_ip_failover" ##這個指令碼接下來會建立
master_ip_online_change_script=""
report_script=""
[server1]
hostname=192.168.9.26
master_binlog_dir=/mysql/data/log
candidate_master=1 ##主庫要有這個引數
[server2]
hostname=192.168.9.25
master_binlog_dir=/mysql/data/log
candidate_master=1
[server3]
hostname=192.168.9.29
master_binlog_dir=/data/log
[server4]
hostname=192.168.9.30
master_binlog_dir=/data/log/ #對應路徑
#!/bin/bash
#--------------第一部分:變數及函式定義-----------------#
###Begin Variables define###
ssh_port=22
cmd=/sbin/ifconfig
vip=192.168.9.232
device=eth0:0
netmk=255.255.255.0
start_vip="${cmd} ${device} ${vip} netmask ${netmk} up"
stop_vip="${cmd} ${device} ${vip} netmask ${netmk} down"
###End Variables define###
###Begin Status Funciont###
status()
{
exit 0
}
###End Status Funciont###
###Begin Stop Or Stopssh Funciont###
stop()
{
exit 0
}
###End Stop Or Stopssh Funciont###
###Begin Start Funciont###
start()
{
/usr/bin/ssh -p ${ssh_port} ${ssh_user}@${orig_master_host} ""${stop_vip}""
/usr/bin/ssh -p ${ssh_port} ${ssh_user}@${new_master_host} ""${start_vip}""
exit 0
}
###End Start Funciont###
#--------------第一部分:變數及函式定義-----------------#
#--------------第二部分:命令列引數-----------------#
###Begin Get The Command-Line Parameters###
###eval set -- "`getopt -a -q -o n -l command::,ssh_user:,orig_master_host:,orig_master_ip:,orig_master_port:,new_master_host:,new_master_ip:,new_master_port:,new_master_user:,new_master_password: -- "$@"`"
eval set -- "`getopt -a -q -o n -l command::,ssh_user:,orig_master_host:,orig_master_ip:,new_master_host:,new_master_ip: -- "$@"`"
if [ $? != 0 ] ; then echo "Terminating..." >&2 ;exit 1;fi
while true
do
case "$1" in
--command)
command="${2}";
shift;;
--ssh_user)
ssh_user="${2}";
shift;;
--orig_master_host)
orig_master_host="${2}";
shift;;
--orig_master_ip)
orig_master_ip="${2}";
shift;;
--new_master_host)
new_master_host="${2}";
shift;;
--new_master_ip)
new_master_ip="${2}";
shift;;
--)
shift;
break;;
esac
shift
done
###End Get The Command-Line Parameters###
#--------------第二部分:命令列引數-----------------#
#--------------第三部分:函式呼叫-----------------#
if [ "${command}" == "status" ];
then
status;
fi
if [ "${command}" == "stop" ] || [ "${command}" == "stopssh" ] ;
then
stop;
fi
if [ "${command}" == "start" ];
then
start;
fi
[root@lvs-a ~]# ssh-keygen -t rsa
[root@lvs-a ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.25
[root@lvs-a ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.26
[root@lvs-a ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.29
[root@lvs-a ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.30
八:檢查mha配置是否正確。1.檢查ssh是否配置成功
[root@lvs-a ~]#masterha_check_ssh --conf=/etc/masterha/app1.cnf
最後顯示如下欄位說明成功:
Tue Jun 30 01:58:05 2015 - [info] All SSH connection tests passed successfully.
2.檢查mysql主從複製狀態是否成功
[root@lvs-a ~]#masterha_check_repl --conf=/etc/masterha/app1.cnf
最後出現MySQL Replication Health is OK.欄位說明成功。
3. 啟動管理節點程式
[root@lvs-a ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log < /dev/null 2>&1 &
[1] 10085
4. 檢查mha主從狀態
[root@lvs-a ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
顯示如下
app1 (pid:10085) is running(0:PING_OK), master:192.168.153.147
5. 停止mha
[root@lvs-a ~]# masterha_stop --conf=/etc/masterha/app1.cnf
九:安裝lvs+keepalived的具體過程參考,文件 LVS+keepalived的安裝部署 http://blog.itpub.net/29654823/viewspace-1844282/
十:驗證環境的正確性:
關閉現在的主(9.25),vip9.232 會自動飄向主備(9.26),從而實現了主的高可用,這時候,manger(9.27)程式也就死了,需要手動起來。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1966822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 高可用架構 - MHA環境部署記錄MySql架構
- mysql高可用架構MHA搭建MySql架構
- 部署MHA+keepalived+ProxySQL高可用架構SQL架構
- MySQL 實現高可用架構之 MHAMySql架構
- MySQL高可用架構-MMM、MHA、MGR、PXCMySql架構
- mysql高可用架構MHA搭建(centos7+mysql5.7.28)MySql架構CentOS
- 構建MHA實現MySQL高可用叢集架構MySql架構
- MySQL高可用架構之MHA 原理與實踐MySql架構
- MHA高可用架構的實現方式架構
- Mysql 5.7 MHA 高可用MySql
- MySQL高可用架構之Keepalived+主從架構部署MySql架構
- MySQL——MHA高可用群集部署及故障測試MySql
- MySQL高可用群集MHA部署及故障測試分析MySql
- MySQL叢集架構:MHA+MySQL-PROXY+LVS實現MySQL叢集架構高可用/高效能MySql架構
- Canal高可用架構部署架構
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- Mysql高可用架構方案MySql架構
- 基於 MHA 高可用的 MySQLMySql
- MySQL 高可用架構之 MMM 架構MySql架構
- MySQL 中常見的幾種高可用架構部署方案MySql架構
- MySQL高可用架構對比MySql架構
- 【DB寶45】MySQL高可用之MGR+Consul架構部署MySql架構
- MySQL高可用架構設計分析MySql架構
- 基於MySQL Cluster + LVS + KeepAlived部署負載均衡高可用架構MySql負載架構
- Mysql 高可用(MHA)-讀寫分離(Atlas)MySql
- MHA+MySQL主從配置實現MySQL高可用MySql
- MySQL高可用架構:mysql+keepalived實現MySql架構
- MySQL MHA部署 Part 5 MHA部署指南MySql
- MHA高可用架構工作原理?主庫當機處理過程架構
- MHA高可用+VIP漂移
- 高可用架構架構
- 【DB寶42】MySQL高可用架構MHA+ProxySQL實現讀寫分離和負載均衡MySql架構負載
- MySQL主從原理, 高可用架構與高效能架構MySql架構
- Mysql MHA部署-04MHA配置MySql
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- 【DB寶19】MySQL高可用之MHA功能測試MySql
- MySQL資料庫架構——高可用演進MySql資料庫架構
- 【DB寶19】在Docker中使用MySQL高可用之MHADockerMySql
- 附022.Kubernetes_v1.18.3高可用部署架構一架構