對(duì)主節(jié)點(diǎn)進(jìn)行監(jiān)控,可實(shí)現(xiàn)自動(dòng)故障轉(zhuǎn)移至其它從節(jié)點(diǎn);通過提升某一從節(jié)點(diǎn)為新的主節(jié)點(diǎn),基于主從復(fù)制實(shí)現(xiàn),還需要客戶端配合實(shí)現(xiàn),目前MHA主要支持一主多從的架構(gòu),要搭建MHA,要求一個(gè)復(fù)制集群中必須最少有三臺(tái)數(shù)據(jù)庫服務(wù)器,一主二從,即一臺(tái)充當(dāng)master,一臺(tái)充當(dāng)備用master,另外一臺(tái)充當(dāng)從庫。
MHA軟件由兩部分組成,Manager工具包和Node工具包;
Manager工具包主要包括以下幾個(gè)工具:
masterha_check_ssh 檢查MHA的SSH配置狀況masterha_check_repl 檢查MySQL復(fù)制狀況masterha_manger 啟動(dòng)MHAmasterha_check_status 檢測當(dāng)前MHA運(yùn)行狀態(tài)masterha_master_monitor 檢測master是否宕機(jī)masterha_master_switch 故障轉(zhuǎn)移(自動(dòng)或手動(dòng))masterha_conf_host 添加或刪除配置的server信息
Node工具包:這些工具通常由MHA Manager的腳本觸發(fā),無需人為操作
save_binary_logs 保存和復(fù)制master的二進(jìn)制日志apply_diff_relay_logs 識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的slavefilter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用此工具)purge_relay_logs 清除中繼日志(不會(huì)阻塞SQL線程)
提示:為了盡可能的減少主庫硬件損壞宕機(jī)造成的數(shù)據(jù)丟失,因此在配置MHA的同時(shí)建議配置成MySQL 5.5的半同步復(fù)制。
自定義擴(kuò)展:
secondary_check_script:通過多條網(wǎng)絡(luò)路由檢測master的可用性master_ip_ailover_script:更新Application使用的masteripshutdown_script:強(qiáng)制關(guān)閉master節(jié)點(diǎn)report_script:發(fā)送報(bào)告init_conf_load_script:加載初始配置參數(shù)master_ip_online_change_script:更新master節(jié)點(diǎn)ip地址
下載地址:https://code.google.com/archive/p/mysql-master-ha/downloads
環(huán)境:基于秘鑰認(rèn)證,參考:https://www.cnblogs.com/L-dongf/p/9058265.html,時(shí)間必須同步,執(zhí)行:ntpdate cn.pool.ntp.org
1)manager節(jié)點(diǎn)
[root@manager ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm -y #安裝mha軟件 [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.7: [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.8: [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.9: [root@manager ~]# mkdir /etc/mha/ [root@manager ~]# vim /etc/mha/cluster1.cnf [server default] user=mhauser password=mhapass manager_workdir=/data/mastermha/cluster1/ manager_log=/data/mastermha/cluster1/manager.log remote_workdir=/data/mastermha/cluster1/ ssh_user=root repl_user=repluser repl_password=replpass ping_interval=1 #每秒檢測一次 [server1] hostname=192.168.0.7 candidate_master=1 #可以成為主節(jié)點(diǎn) [server2] hostname=192.168.0.8 candidate_master=1 #可以成為主節(jié)點(diǎn) [server3] hostname=192.168.0.9 [root@manager ~]# masterha_check_ssh --conf=/etc/mha/cluster1.cnf #檢查ssh秘鑰環(huán)境 All SSH connection tests passed successfully. [root@manager ~]# masterha_check_repl --conf=/etc/mha/cluster1.cnf #檢查MySQL狀態(tài) MySQL Replication Health is OK. [root@manager ~]# yum install screen -y [root@manager ~]# screen -S mha #mha是工作在前臺(tái)的進(jìn)程,不能用終端實(shí)時(shí)檢測 [root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf #開始監(jiān)測
2)master節(jié)點(diǎn)
[root@master ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y #安裝node包 [root@master ~]# vim /etc/my.cnf [mysqld] server_id=1 log_bin binlog_format=row skip_name_resolve [root@master ~]# systemctl start mariadb MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass'; #創(chuàng)建主從復(fù)制賬號(hào),可能切換為主的節(jié)點(diǎn)都要?jiǎng)?chuàng)建此賬號(hào) MariaDB [(none)]> SHOW MASTER LOGS; +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000001 | 401 | +--------------------+-----------+ MariaDB [(none)]> GRANT ALL ON *.* TO mhauser@'192.168.0.%' IDENTIFIED BY 'mhapass'; #創(chuàng)建mha的管理用戶,確保所有節(jié)點(diǎn)都已經(jīng)同步此賬號(hào)
3)slave節(jié)點(diǎn)
[root@slave ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y [root@slave ~]# vim /etc/my.cnf [mysqld] read_only=1 log_bin binlog_format=row server_id=2 relay_log_purge=0 skip_name_resolve=1 [root@slave ~]# systemctl start mariadb MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass'; MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='192.168.0.7', #此時(shí)主節(jié)點(diǎn)為0.7 -> MASTER_USER='repluser', -> MASTER_PASSWORD='replpass', -> MASTER_PORT=3306, -> MASTER_LOG_FILE='mariadb-bin.000001', -> MASTER_LOG_POS=401, -> MASTER_CONNECT_RETRY=10; MariaDB [(none)]> START SLAVE;
4)slave2節(jié)點(diǎn)
[root@slave2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y [root@slave2 ~]# vim /etc/my.cnf [mysqld] server_id=3 read_only=1 relay_log_purge=0 skip_name_resolve=1 [root@slave2 ~]# systemctl start mariadb MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='192.168.0.7', -> MASTER_USER='repluser', -> MASTER_PASSWORD='replpass', -> MASTER_PORT=3306, -> MASTER_LOG_FILE='mariadb-bin.000001', -> MASTER_LOG_POS=401, -> MASTER_CONNECT_RETRY=10; MariaDB [(none)]> START SLAVE;
4)測試
當(dāng)master的服務(wù)停止:[root@master ~]# systemctl stop mariadb
在slave2上執(zhí)行:MariaDB [(none)]> SHOW SLAVE STATUS\G命令,看到Master_Server_Id: 2
說明:切換成功
4、MHA監(jiān)控重新上線
將故障的master修復(fù)后重新上線,手動(dòng)配置成為現(xiàn)在主節(jié)點(diǎn)的從 [root@master ~]# systemctl start mariadb MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='192.168.0.8', #此時(shí)的主為0.8 -> MASTER_USER='repluser', -> MASTER_PASSWORD='replpass', -> MASTER_PORT=3306, -> MASTER_LOG_FILE='mariadb-bin.000001', -> MASTER_LOG_POS=482, -> MASTER_CONNECT_RETRY=10; MariaDB [(none)]> START SLAVE;
管理節(jié)點(diǎn): [root@manager ~]# screen -S mha [root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf #重新開啟監(jiān)測
Galera Cluster:集成了Galera插件的MySQL集群,是一種新型的,數(shù)據(jù)不共享的,高度冗余的高可用方案,目前Galera Cluster有兩個(gè)版本,分別是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即采用multi-master的集群架構(gòu),是一個(gè)既穩(wěn)健,又在數(shù)據(jù)一致性、完整性及高性能方面有出色表現(xiàn)的高可用解決方案
三個(gè)節(jié)點(diǎn)組成了一個(gè)集群,與普通的主從架構(gòu)不同,它們都可以作為主節(jié)點(diǎn),三個(gè)節(jié)點(diǎn)是對(duì)等的,稱為multi-master架構(gòu),當(dāng)有客戶端要寫入或者讀取數(shù)據(jù)時(shí),連接哪個(gè)實(shí)例都是一樣的,讀到的數(shù)據(jù)是相同的,寫入某一個(gè)節(jié)點(diǎn)之后,集群自己會(huì)將新數(shù)據(jù)同步到其它節(jié)點(diǎn)上面,這種架構(gòu)不共享任何數(shù)據(jù),是一種高冗余架構(gòu)
特性:
工作原理:
參考官方文檔:
http://galeracluster.com/documentation-webpages/galera-documentation.pdf
http://galeracluster.com/documentation-webpages/index.html
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
至少需要三臺(tái)節(jié)點(diǎn),不能安裝 mariadb-server 包,需要安裝特定的軟件包
Galera Cluster的實(shí)現(xiàn)
清華開源鏡像源:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/
# vim /etc/yum.repos.d/mariadb_galera_server.repo [mariadb] name=mariadb_galera_server.repo baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/ gpgcheck=0 # yum install MariaDB-Galera-server -y
1)mysql-1
[root@mysql-1 ~]# vim /etc/my.cnf.d/server.cnf [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9" #將所有IP都定義在此 binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_cluster_name='my_wsrep_cluster' wsrep_node_name='node1' wsrep_node_address='192.168.0.7'
2)mysql-2
[root@mysql-2 ~]# vim /etc/my.cnf.d/server.cnf [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_cluster_name='my_wsrep_cluster' wsrep_node_name='node2' wsrep_node_address='192.168.0.8'
3)mysql-3
[root@mysql-3 ~]# vim /etc/my.cnf.d/server.cnf [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_cluster_name='my_wsrep_cluster' wsrep_node_name='node3' wsrep_node_address='192.168.0.9'
4)啟動(dòng)
[root@mysql-1 ~]# /etc/init.d/mysql start --wsrep-new-cluster #第一臺(tái)啟動(dòng)加此參數(shù) [root@mysql-2 ~]# /etc/init.d/mysql start #后續(xù)服務(wù)直接啟動(dòng)即可 [root@mysql-3 ~]# /etc/init.d/mysql start
5)測試
在任何一個(gè)節(jié)點(diǎn)上操作數(shù)據(jù)庫,其他節(jié)點(diǎn)同步操作;如果發(fā)生同時(shí)操作同條記錄,則只有一臺(tái)節(jié)點(diǎn)操作成功。
6)查看工作狀態(tài)
MariaDB [(none)]> SHOW VARIABLES LIKE 'wsrep_%'\G MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%'\G MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | #集群中有三臺(tái)節(jié)點(diǎn)在線 +--------------------+-------+
到此這篇關(guān)于MySQL系列之十四 MySQL的高可用實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL的高可用實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:定西 溫州 無錫 福州 阿里 三明 揚(yáng)州 山西
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL系列之十四 MySQL的高可用實(shí)現(xiàn)》,本文關(guān)鍵詞 MySQL,系列,之,十四,的,高可用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。