国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

MySQL高可用運維的示例分析

發(fā)布時(shí)間:2021-09-14 18:07 來(lái)源:億速云 閱讀:0 作者:小新 欄目: Mysql 歡迎投稿:712375056

這篇文章將為大家詳細講解有關(guān)高可用運維的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、基本知識介紹

1、MHA定義

Master HA。是一個(gè)開(kāi)源的高可用程序,為MySQL的主從架構提供了故障自動(dòng)恢復的功能。主從復制期間,當MHA監測到MySQL的Master節點(diǎn)故障時(shí),會(huì )自動(dòng)提升復制集群中的某個(gè)Slave節點(diǎn)成為新的Master節點(diǎn)。在切換期間,也會(huì )通過(guò)從其他節點(diǎn)中獲取額外信息來(lái)避免數據一致性問(wèn)題。除此之外,MHA還提供了master節點(diǎn)的在線(xiàn)故障切換功能,可以按照需要來(lái)切換Master/Slave節點(diǎn)。

2、MHA結構

MHA中的所有節點(diǎn)主要有兩種角色,即:管理節點(diǎn)和數據節點(diǎn)。
管理節點(diǎn)(MHA Manager):一般單獨部署在一臺機器上,用來(lái)管理多個(gè)master和slave集群,而每個(gè)master和slave組成的集群稱(chēng)之為一個(gè)application。
數據節點(diǎn)(MHA Node):運行在每一臺MySQL上,通過(guò)監控具有解析和清理logs功能的腳本來(lái)加速節點(diǎn)的故障轉移。

3、HMA組件
(1)Manager組件

masterha_check_sh:MHA依賴(lài)的ssh環(huán)境監測工具
masterha_check_repl:MySQL復制環(huán)境監測工具
masterha_manager:MHA服務(wù)主程序
masterha_check_status:MHA運行狀態(tài)探測工具
masterha_master_monitor:MySQL master節點(diǎn)可用性監測工具
masterha_master_switch:master節點(diǎn)切換工具
masterha_conf_host:添加或刪除配置的節點(diǎn)
masterha_stop:關(guān)閉MHA服務(wù)的工具

(2)Node組件

save_binary_logs:保存和賦值master的二進(jìn)制日志
apply_diff_relay_logs:識別差異的中繼日志并應用于其他slave
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已經(jīng)不再使用這個(gè)工具)
purge_relay_logs:清除中繼日志(不會(huì )阻塞SQL線(xiàn)程)

(3)自定義擴展

secondary_check_script:通過(guò)多條網(wǎng)絡(luò )路由監測master的可用性
master_ip_failover_script:更新application使用的masterip
shutdown_script:強制關(guān)閉master節點(diǎn)
report_script:發(fā)送報告
init_conf_load_script:加載初始配置參數
master_ip_online_change_script:更新master節點(diǎn)ip地址

二、MHA搭建

1、環(huán)境準備
操作系統:CentOS6.9_X86_64
MySQL版本:MySQL5.6.39通用二進(jìn)制
服務(wù)器規劃:
主節點(diǎn)Master:192.168.199.104(mysql-master,master)

從節點(diǎn)1:192.168.199.105(mysql-slave01,slave01)
從節點(diǎn)2:192.168.199.106(mysql-slave02,slave02)
管理節點(diǎn):192.168.199.107(mysql-manager,manager)

2、搭建
(1)配置各個(gè)節點(diǎn)的host,在后面使用起來(lái)會(huì )比較方便,不用每次手寫(xiě)IP

[root@mysql-master ~]# vim /etc/hosts
#添加如下內容:
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.104 mysql-master master
192.168.199.105 mysql-slave01 slave01
192.168.199.106 mysql-slave02 slave02
192.168.199.107 mysql-manager manager

(2)將配置好的host文件復制到其他三個(gè)節點(diǎn)上

[root@mysql-master ~]# scp /etc/hosts slave01:/etc/
[root@mysql-master ~]# scp /etc/hosts slave02:/etc/
[root@mysql-master ~]# scp /etc/hosts manager:/etc/

(3)配置主從同步,slave01和slave02為master的從庫
開(kāi)啟master的二進(jìn)制日志

[root@mysql-master ~]# vim /etc/my.cnf
#在[mysqld]下面添加如下內容:
server-id = 104
skip-name-resolve
log_bin=/mysql_data/mysql-bin
log_bin_index=/mysql_data/mysql-bin.index
binlog_format = mixed

在master上查看當前的二進(jìn)制日志點(diǎn)位置,并創(chuàng )建復制賬戶(hù)

[root@mysql-master ~]# mysql -uroot –proot
#查看當前二進(jìn)制日志點(diǎn)的位置
mysql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
             File: mysql-bin.000090
         Position: 120
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)
#創(chuàng  )建從庫的復制賬戶(hù)
mysql> GRANT REPLICATION SLAVE ,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.199.%' IDENTIFIED BY 'repl';
#刷新權限
mysql> FLUSH PRIVILEGES;

在slave01上開(kāi)啟二進(jìn)制日志和中繼日志,并配置為master的從庫

[root@mysql-slave01 ~]# vim /etc/my.cnf
#在[mysqld]下添加如下內容:
server-id = 105
log_bin = /mysql_data/mysql-bin
log_bin_index = /mysql_data/mysql-bin.index
relay_log = /mysql_data/mysql-relay
relay_log_index = /mysql_data/mysql-relay.index
read_only
relay_log_purge = 0

參數解釋?zhuān)?/p>

relay_log_purge:該參數表示不自動(dòng)清理中繼日志,因為MHA需要根據slave的中繼日志判斷slave同步master的binlog到什么位置了
read_only:表示是只讀,MHA需要根據這個(gè)參數來(lái)識別主從庫
bin_log:開(kāi)啟從庫的二進(jìn)制日志,因為在主節點(diǎn)出現故障時(shí),需要將其中某個(gè)從庫提升為主庫,所以需要開(kāi)啟從庫的二進(jìn)制日志

啟動(dòng)slave01節點(diǎn),并將需要同步的主節點(diǎn)信息指向master節點(diǎn):

[root@mysql-slave01 ~]# service mysqld restart
[root@mysql-slave01 ~]# mysql -uroot –proot
#使用change master命令將主庫指向master節點(diǎn)
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.199.104',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000090',MASTER_LOG_POS=120;
mysql> START SLAVE;
#查看是否同步成功
mysql> SHOW SLAVE STATUS \G
看到如下信息表示同步成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以同樣的方式配置第二臺從庫,可以直接將slave01上的配置文件直接復制到第二臺slave上,然后修改即可。

[root@mysql-slave01 ~]# scp /etc/my.cnf slave02:/etc/
[root@mysql-slave02 ~]# vim /etc/my.cnf
#修改server-id即可:
server-id = 106

修改完成之后,保存退出,并重啟mysql,然后配置slave02為master的從庫

[root@mysql-slave02 ~]# mysql -uroot –proot
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.199.104',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000090',MASTER_LOG_POS=120;
mysql> START SLAVE;
#查看是否同步成功
mysql> SHOW SLAVE STATUS \G
看到如下信息表示同步成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

(4)創(chuàng )建具有管理權限的用戶(hù)賬號

#在主節點(diǎn)master上創(chuàng  )建管理賬號,使其可以同步到其他連個(gè)從節點(diǎn),注意:這個(gè)管理賬號需要能夠遠程連接MySQL
mysql> GRANT ALL ON *.* TO 'mha'@'192.168.199.%' IDENTIFIED BY 'mha';
mysql> FLUSH PRIVILEGES;

(5)由于MHA架構需要各個(gè)節點(diǎn)之間可以進(jìn)行互信通信,所以需要將各個(gè)節點(diǎn)之間配置為無(wú)秘鑰登錄,由于節點(diǎn)比較多,單個(gè)生成并復制比較麻煩,可以在主節點(diǎn)上生成秘鑰對,然后讓每個(gè)主機都具有同樣的私鑰

#在master上生成秘鑰對
[root@mysql-master ~]# ssh-keygen -t rsa -P ''
#首先保存到本機的秘鑰文件中,使得本機可以無(wú)秘鑰使用ssh方式登陸本機
[root@mysql-master ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
#使用ssh登陸本機測試,發(fā)現可以無(wú)密碼登陸
[root@mysql-master ~]# ssh 192.168.199.104
#修改authorized_keys文件的權限,只能屬主查看,同組用戶(hù)和其他用戶(hù)不可查看
[root@mysql-master ~]# chmod go= .ssh/authorized_keys

將秘鑰對和私鑰文件復制到其他三個(gè)節點(diǎn)上,注意:保證其原有的權限

[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys slave01:/root/.ssh/
[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys slave02:/root/.ssh/
[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys manager:/root/.ssh/
#測試無(wú)密碼登陸,在主節點(diǎn)上執行如下命令,查看slave01節點(diǎn)的ip地址
[root@mysql-master ~]# ssh slave01 'ifconfig eth0'
#能夠查看到slave01的ip地址表示無(wú)秘鑰登陸配置成功,其他倆節點(diǎn)可以自己驗證

(6)下載mha4mysql-manager和mha4mysql-node安裝包
此處使用的軟件包版本如下:

管理節點(diǎn):mha4mysql-manager-0.56.tar.gz
數據節點(diǎn):mha4mysql-node-0.56.tar.gz

(7)配置epel,因為mha4mysql有的包是來(lái)自于base中,有的包是來(lái)自于epel中

[root@mysql-master ~]# rpm –ivh  http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

(8)解壓,并使用perl命令執行Makefile.PL腳本

[root@mysql-master ~]# tar xf mha4mysql-manager-0.56.tar.gz
[root@mysql-master ~]# cd mha4mysql-manager-0.56
[root@mysql-master mha4mysql-manager-0.56]# perl Makefile.PL

注意:執行Makefile.PL過(guò)程中,如果出現類(lèi)似于如下的錯誤,則需要安裝perl程序所依賴(lài)的庫文件:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at inc/Module/Install/Makefile.pm line 4.
BEGIN failed--compilation aborted at inc/Module/Install/Makefile.pm line 4

出現上述錯誤,則需要安裝依賴(lài):

[root@mysql-master ~]# yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker cpan perl-Time-HiRes perl-DBI perl-DBD-MySQL

(9)確?!眕erl MakeFile.PL”正確執行之后,使用make命令完成安裝。注:可以使用”echo $?”查看上此命令的執行結果來(lái)判斷上條命令是否正確執行完成。通常0代表正確完成。

[root@mysql-master mha4mysql-manager-0.56]# make
[root@mysql-master mha4mysql-manager-0.56]# make install

(10)master上的manager安裝完成之后,按照同樣的方式編譯安裝mha4mysql-node

[root@mysql-manager ~]# tar xf mha4mysql-node-0.56.tar.gz
[root@mysql-manager ~]# cd mha4mysql-node-0.56
[root@mysql-manager mha4mysql-node-0.56]# perl Makefile.PL
#判斷Makefile.PL是否正常執行完成
[root@mysql-manager mha4mysql-node-0.56]# echo $?
0
[root@mysql-manager mha4mysql-node-0.56]# make && make install

(11)在其他三臺服務(wù)器上(master,slave01,slave02)上安裝mha4mysql-node

[root@mysql-slave01 ~]# tar mha4mysql-node-0.56.tar.gz
[root@mysql-slave01 ~]# cd mha4mysql-node-0.56
[root@mysql-slave01 mha4mysql-node-0.56]# perl Makefile.PL
[root@mysql-slave01 mha4mysql-node-0.56]# make && make install

其他兩個(gè)節點(diǎn)安裝方式相同,此處略。

(12)安裝完成,可以看到在/usr/local/bin下有一些腳本,就是mha4mysql生成的腳本文件

(13)初始化MHA
編輯mha的配置文件,主要有以下兩類(lèi):
global配置:為各個(gè)application提供默認配置
application配置:用來(lái)指定有哪些服務(wù)器

#創(chuàng  )建目錄并編輯配置文件
[root@mysql-manager ~]# mkdir -pv /etc/masterha/
[root@mysql-manager ~]# vim /etc/masterha/app01.conf

寫(xiě)入如下內容:

[server default]
user=mha  #管理用戶(hù)的用戶(hù)名
password=mha  #管理用戶(hù)密碼
manager_workdir=/data/masterha/app01  #manager節點(diǎn)的工作目錄,用來(lái)存放一些二進(jìn)制日志,不存在會(huì )自動(dòng)創(chuàng  )建
manager_log=/data/masterha/app01/manager.log #日志文件位置
remote_workdir=/data/masterha/app01  #遠程的每一個(gè)節點(diǎn)的工作目錄,沒(méi)有會(huì )自動(dòng)生成
ssh_user=root  #需要使用ssh來(lái)完成一些管理操作
repl_user=repl  #擁有復制權限的用戶(hù)名
repl_password=repl  #擁有復制權限的密碼
ping_interval=1  #每隔多長(cháng)時(shí)間監測一次主節點(diǎn)是否在線(xiàn),心跳信息監測
#其他主機
[server1]
hostname=192.168.199.104
#ssh_port=3306  #如果MySQL沒(méi)有使用默認端口號,則此處需要指定,使用默認端口不需要指定
candidate_master=1  #表示該節點(diǎn)是否在主節點(diǎn)故障之后參與成為主節點(diǎn)
master_binlog_dir=/mysql_data/ #指定mysql的binlog日志路徑
[server2]
hostname=192.168.199.105
candidate_master=1
master_binlog_dir=/mysql_data/
[server3]
hostname=192.168.199.106
#no_master=1  #表示主節點(diǎn)故障之后,該節點(diǎn)不參與成為主節點(diǎn)
master_binlog_dir=/mysql_data/

(14)檢查各個(gè)節點(diǎn)之間的通信是否正常

[root@mysql-manager ~]# masterha_check_ssh --conf=/etc/masterha/app01.conf

錯誤1:Can't locate Config/Tiny.pm in @INC (@INC contains:XXX
原因:這種錯誤是因為缺少依賴(lài)包
解決辦法:安裝提示的依賴(lài)包
如下的幾個(gè)rpm包如果操作系統本身沒(méi)有自帶,需要自己從網(wǎng)上下載,可以從
http://rpmfind.net/ 下載所需要的rpm包。以下的rpm包都是針對CentOS6.9 X86_64的:

perl-Mail-Sender-0.8.16-3.el6.noarch.rpm 
perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm 
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm

下載完成之后,使用yum命令安裝即可,因為其中可能還會(huì )依賴(lài)其他包。


錯誤2:master_check_ssh執行中的錯誤:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
原因:/root/.ssh/下的文件內容不一樣或者文件的權限有問(wèn)題,我遇到的是文件內容有問(wèn)題。
解決辦法:重新將其他主機上的秘鑰對和私鑰拷貝一份就正常了。


(15)檢查主從復制環(huán)境是否正常

[root@mysql-manager ~]# masterha_check_repl --conf=/etc/masterha/app01.conf

錯誤1:

Sat Jun  2 03:07:26 2018 - [error][/usr/local/share/perl5/MHA/ServerManager.pm, ln301] install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 27) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.

原因:缺少perl-DBD-MySQL依賴(lài)庫
解決辦法:

[root@mysql-manager ~]# yum install -y perl-DBD-MySQL*

錯誤2:

Sat Jun  2 03:11:06 2018 - [error][/usr/local/share/perl5/MHA/ServerManager.pm, ln188] There is no alive server. We can't do failover

錯誤3:

Failed to save binary log: Binlog not found from /var/lib/mysql,/var/log/mysql! If you got this error at MHA Manager, please set "master_binlog_dir=/path/to/binlog_directory_of_the_master

原因:mysql的binlog日志目錄沒(méi)有在默認的/var/log/mysql下,而是在其他地方,導致目錄找不到。
解決辦法:在manager節點(diǎn)的配置文件中每個(gè)節點(diǎn)下制定二進(jìn)制日志的目錄路徑。

[server1]
hostname=192.168.199.105
candidate_master=1
master_binlog_dir=/mysql_data/  #指定二進(jìn)制日志文件目錄

錯誤4:

Can't exec "mysqlbinlog": No such file or directory at /usr/local/share/perl5/MHA/BinlogManager.pm line 106.
mysqlbinlog version command failed with rc 1:0, please verify PATH, LD_LIBRARY_PATH, and client options

原因:使用ssh連接之后找不到mysqlbinlog命令
解決辦法:將/usr/local/mysql-5.6.39/目錄連接到/usr/bin下

[root@mysql-master ~]# ln –s /usr/local/mysql-5.6.39/bin /usr/bin
[root@mysql-slave01 ~]# ln –s /usr/local/mysql-5.6.39/bin /usr/bin
[root@mysql-slave02 ~]# ln –s /usr/local/mysql-5.6.39/bin /usr/bin

(16)啟動(dòng)MHA

#前臺啟動(dòng),日志會(huì )直接打印在控制臺上
[root@mysql-manager app01]# masterha_manager --conf=/etc/masterha/app01.conf
#后臺啟動(dòng)
[root@mysql-manager app01]# nohup masterha_manager --conf=/etc/masterha/app01.conf &

(17)驗證高可用故障自動(dòng)轉移

#停止master節點(diǎn)的mysqld服務(wù)
[root@mysql-master ~]# killall mysqld mysqld_safe

#查看原來(lái)的兩個(gè)slave節點(diǎn)信息,發(fā)現已經(jīng)有slave01被提升為master了
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.199.105
                  Master_User: repl
                  ...
#查看slave01的read_only屬性,發(fā)現已經(jīng)被修改為OFF了
mysql> SHOW VARIABLES LIKE 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | OFF   |
+---------------+-------+

注意:當某一個(gè)master故障之后,從庫提升為主庫,原來(lái)的manager節點(diǎn)上的manager服務(wù)會(huì )自動(dòng)退出。需要手動(dòng)重啟。
(18)故障的服務(wù)器再次恢復時(shí),需要使用”CHANGE MASTER”命令手動(dòng)將其加入到從節點(diǎn)中
(19)manager節點(diǎn)啟動(dòng)之后,可以使用masterha_check_status命令查看當前的主節點(diǎn)狀態(tài)信息

[root@mysql-manager ~]# masterha_check_status --conf=/etc/masterha/app01.conf 
    app01 (pid:20582) is running(0:PING_OK), master:192.168.199.105

MHA的其他用法,如在線(xiàn)主從切換等,可以自行參考官方文檔,此處不再介紹。另外還有MHA的manager節點(diǎn)的自動(dòng)重啟功能,報警功能,故障主機徹底摘除功能等可以通過(guò)shell腳本實(shí)現,后面有時(shí)間會(huì )繼續介紹。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

浓毛欧美老妇乱子伦视频| 色婷婷亚洲婷婷八月中文字幕| 东北粗壮熟女丰满高潮| 国产AV一区二区三区最新精品| 无码天堂亚洲国产AV| 18禁超污无遮挡无码免费游戏|