溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中高可用的示例分析

發(fā)布時間:2021-07-05 09:21:51 來源:億速云 閱讀:103 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)MySQL中高可用的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、MHA

對主節(jié)點進行監(jiān)控,可實現(xiàn)自動故障轉(zhuǎn)移至其它從節(jié)點;通過提升某一從節(jié)點為新的主節(jié)點,基于主從復制實現(xiàn),還需要客戶端配合實現(xiàn),目前MHA主要支持一主多從的架構(gòu),要搭建MHA,要求一個復制集群中必須最少有三臺數(shù)據(jù)庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫。

1、MHA工作原理

  • 從宕機崩潰的master保存二進制日志事件(binlog events)

  • 識別含有最新更新的slave

  • 應用差異的中繼日志(relay log)到其他的slave

  • 應用從master保存的二進制日志事件(binlog events)

  • 提升一個slave為新的master

2、MHA軟件

MHA軟件由兩部分組成,Manager工具包和Node工具包;

Manager工具包主要包括以下幾個工具:

masterha_check_ssh 檢查MHA的SSH配置狀況masterha_check_repl 檢查MySQL復制狀況masterha_manger 啟動MHAmasterha_check_status 檢測當前MHA運行狀態(tài)masterha_master_monitor 檢測master是否宕機masterha_master_switch 故障轉(zhuǎn)移(自動或手動)masterha_conf_host 添加或刪除配置的server信息

Node工具包:這些工具通常由MHA Manager的腳本觸發(fā),無需人為操作

save_binary_logs 保存和復制master的二進制日志apply_diff_relay_logs 識別差異的中繼日志事件并將其差異的事件應用于其他的slavefilter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用此工具)purge_relay_logs 清除中繼日志(不會阻塞SQL線程)

提示:為了盡可能的減少主庫硬件損壞宕機造成的數(shù)據(jù)丟失,因此在配置MHA的同時建議配置成MySQL 5.5的半同步復制。

自定義擴展:

secondary_check_script:通過多條網(wǎng)絡路由檢測master的可用性master_ip_ailover_script:更新Application使用的masteripshutdown_script:強制關(guān)閉master節(jié)點report_script:發(fā)送報告init_conf_load_script:加載初始配置參數(shù)master_ip_online_change_script:更新master節(jié)點ip地址

下載地址:https://code.google.com/archive/p/mysql-master-ha/downloads

3、MHA的實現(xiàn)

MySQL中高可用的示例分析

環(huán)境:基于秘鑰認證,參考:https://www.cnblogs.com/L-dongf/p/9058265.html,時間必須同步,執(zhí)行:ntpdate cn.pool.ntp.org

1)manager節(jié)點

[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é)點
[server2]
hostname=192.168.0.8
candidate_master=1  #可以成為主節(jié)點
[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是工作在前臺的進程,不能用終端實時檢測
[root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf  #開始監(jiān)測

2)master節(jié)點

[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)建主從復制賬號,可能切換為主的節(jié)點都要創(chuàng)建此賬號
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é)點都已經(jīng)同步此賬號

3)slave節(jié)點

[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',  #此時主節(jié)點為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é)點

[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)測試

當master的服務停止:[root@master ~]# systemctl stop mariadb

在slave2上執(zhí)行:MariaDB [(none)]> SHOW SLAVE STATUS\G命令,看到Master_Server_Id: 2

說明:切換成功

4、MHA監(jiān)控重新上線

將故障的master修復后重新上線,手動配置成為現(xiàn)在主節(jié)點的從
[root@master ~]# systemctl start mariadb
MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.0.8',  #此時的主為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é)點:
[root@manager ~]# screen -S mha
[root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf  #重新開啟監(jiān)測

二、Galera Cluster

Galera Cluster:集成了Galera插件的MySQL集群,是一種新型的,數(shù)據(jù)不共享的,高度冗余的高可用方案,目前Galera Cluster有兩個版本,分別是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即采用multi-master的集群架構(gòu),是一個既穩(wěn)健,又在數(shù)據(jù)一致性、完整性及高性能方面有出色表現(xiàn)的高可用解決方案

MySQL中高可用的示例分析

三個節(jié)點組成了一個集群,與普通的主從架構(gòu)不同,它們都可以作為主節(jié)點,三個節(jié)點是對等的,稱為multi-master架構(gòu),當有客戶端要寫入或者讀取數(shù)據(jù)時,連接哪個實例都是一樣的,讀到的數(shù)據(jù)是相同的,寫入某一個節(jié)點之后,集群自己會將新數(shù)據(jù)同步到其它節(jié)點上面,這種架構(gòu)不共享任何數(shù)據(jù),是一種高冗余架構(gòu)

特性:

  • 多主架構(gòu):真正的多點讀寫的集群,在任何時候讀寫數(shù)據(jù),都是最新的;

  • 同步復制:集群不同節(jié)點之間數(shù)據(jù)同步,沒有延遲,在數(shù)據(jù)庫掛掉之后,數(shù)據(jù)不會丟失;

  • 并發(fā)復制:從節(jié)點APPLY數(shù)據(jù)時,支持并行執(zhí)行,更好的性能;

  • 故障切換:在出現(xiàn)數(shù)據(jù)庫故障時,因支持多點寫入,切換容易;

  • 熱插拔:在服務期間,如果數(shù)據(jù)庫掛了,只要監(jiān)控程序發(fā)現(xiàn)的夠快,不可服務時間就會非常少。在節(jié)點故障期間,節(jié)點本身對集群的影響非常?。?/p>

  • 自動節(jié)點克?。涸谛略龉?jié)點,或者停機維護時,增量數(shù)據(jù)或者基礎數(shù)據(jù)不需要人工手動備份提供,Galera Cluster會自動拉取在線節(jié)點數(shù)據(jù),最終集群會變?yōu)橐恢拢?/p>

工作原理:

MySQL中高可用的示例分析

參考官方文檔:

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/

至少需要三臺節(jié)點,不能安裝 mariadb-server 包,需要安裝特定的軟件包

Galera Cluster的實現(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)啟動

[root@mysql-1 ~]# /etc/init.d/mysql start --wsrep-new-cluster #第一臺啟動加此參數(shù)
[root@mysql-2 ~]# /etc/init.d/mysql start #后續(xù)服務直接啟動即可
[root@mysql-3 ~]# /etc/init.d/mysql start

5)測試

在任何一個節(jié)點上操作數(shù)據(jù)庫,其他節(jié)點同步操作;如果發(fā)生同時操作同條記錄,則只有一臺節(jié)點操作成功。

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     |  #集群中有三臺節(jié)點在線
+--------------------+-------+

感謝各位的閱讀!關(guān)于“MySQL中高可用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI