新聞中心
接上期,MySQL主從同步我們已經(jīng)部署完成,接下來(lái),我們開(kāi)始部署本期的核心---MMM高可用集群
網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開(kāi)源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺(jué)化效果。
四、MMM高可用集群部署
1、安裝依賴包
由于mmm 是用perl語(yǔ)言寫的腳本程序,因此需要在5臺(tái)服務(wù)器中分別安裝 perl 和 perl-CPAN
[root@cluster-mysqlb ~]# yum -y install perl perl-CPAN
2、yum 安裝 mmm
a、在4臺(tái) MySQL 服務(wù)器中安裝 mysql-mmm-agent
[root@cluster-mysqla ~]# yum -y install gcc gcc-c++ mysql-mmm-agent
b、在 monitor 服務(wù)器中安裝 mysql-mmm-monitor
[root@cluster-proxy ~]# yum -y install gcc gcc-c++ mysql-mmm-monitor
3、配置 mmm
mysql-mmm 的配置文件在 /etc/mysql-mmm目錄下,進(jìn)入該目錄
mysql-mmm-agent 配置文件
mysql-mmm-monitor 配置文件
如圖,mysql-mmm-agent 的配置文件只有2個(gè),mmm_agent.conf 和 mmm_common.conf,而 mysql-mmm-monitor 的配置文件有4個(gè),原本是3個(gè),因?yàn)槲疫@里安裝了 mysql-mmm-tools ,因此多了一個(gè)mmm_tools.conf
a、修改公共配置文件 mmm_common.conf
[root@cluster-mysqla mysql-mmm]# vim mmm_common.conf
如圖:
(1)、字段解釋
active_master_role writer #主動(dòng)的master角色標(biāo)示,所有數(shù)據(jù)庫(kù)服務(wù)器都需要開(kāi)啟 read_only 參數(shù),而對(duì)于 Write 服務(wù)器,監(jiān)控服務(wù)器會(huì)自動(dòng)將 read_only 屬性關(guān)閉,也就是將其值設(shè)為1 cluster_interface eth0 #集群網(wǎng)絡(luò)接口 pid_path /run/mysql-mmm-agent.pid #mmm-agent進(jìn)程pid文件路徑 bin_path /usr/libexec/mysql-mmm/ #可執(zhí)行文件路徑 replication_user slaveuser #復(fù)制用戶 replication_password 123456 #復(fù)制用戶的密碼 agent_user mmmagent #代理用戶 agent_password 123456 #代理用戶的密碼 ip 192.168.20.134 #mastera 的 IP 地址 mode master #角色模式:master 表示主庫(kù) peer masterb #與 mastera 同等的主庫(kù)的主機(jī)名稱,也就是說(shuō)向 mastera 同步數(shù)據(jù)的數(shù)據(jù)庫(kù)的主機(jī)的名稱,因此為 masterb ip 192.168.20.128 mode master peer mastera ip 192.168.20.129 #從庫(kù)的 IP 地址 mode slave #角色模式:該主機(jī)為 masterb 的從數(shù)據(jù)庫(kù),因此為 slave mode slave hosts mastera, masterb #具有寫操作的主機(jī)名稱,這里的配置可以寫單個(gè),也可以寫多個(gè),寫單個(gè)的時(shí)候,可以避免在網(wǎng)絡(luò)延遲過(guò)大時(shí)切換Write,但是當(dāng)master出現(xiàn)故障時(shí),就無(wú)法進(jìn)行write了,只能對(duì)外提供read操作了 ips 192.168.20.254 #對(duì)外提供寫操作的虛擬 IP 地址 mode exclusive #模式,exclusive 表示只允許存在一個(gè)主數(shù)據(jù)庫(kù),也就是只能寫 一個(gè)虛擬 IP 地址 hosts slavea, slaveb #對(duì)外提供 read 操作的服務(wù)器的主機(jī)的名稱,這里也可以寫master進(jìn)來(lái),寫進(jìn)來(lái)時(shí),master也對(duì)外提供 read 操作 ips 192.168.20.253, 192.168.20.252 #對(duì)外提供 read 操作的虛擬 IP 地址,為了實(shí)現(xiàn)負(fù)載均衡,這里的虛擬 IP 地址至少應(yīng)該和 read 數(shù)據(jù)庫(kù)服務(wù)器數(shù)量相同 mode balanced #模式,balanced 表示負(fù)載均衡 |
(2)、mmm_common.conf配置文件修改
如果在服務(wù)器中有多張網(wǎng)卡,則需要在 cluster_interface 字段中指定網(wǎng)卡名稱
按照上面的格式修改公共配置文件,修改完后復(fù)制到其他4臺(tái)服務(wù)器中
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm
(3)、mmm_agent.conf配置文件修改
[root@cluster-mysqla mysql-mmm]# vim mmm_agent.conf
如圖,改配置文件只需要修改圖中標(biāo)示部分,因此,如果服務(wù)器是 mastera ,就改為 this mastera ,如果服務(wù)器是 masterb ,就改為 this masterb ,以此類推
(4)、修改 mysql-mmm-monitor 的配置文件 mmm_mon.conf
[root@cluster-proxy mysql-mmm]# vim mmm_mon.conf
如上圖,字段解釋
include mmm_common.conf #調(diào)用 mmm_common.conf 配置文件 ip 192.168.20.131 #監(jiān)控主機(jī) IP 地址 pid_path /run/mysql-mmm-monitor.pid #監(jiān)控進(jìn)程 pid 文件目錄 bin_path /usr/libexec/mysql-mmm #可執(zhí)行文件目錄 status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 192.168.20.134, 192.168.20.128, 192.168.20.129, 192.168.20.130 #這里寫4臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的 IP 地址 auto_set_online 60 # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host # monitor_user monitor #監(jiān)控用戶 monitor_password 123456 #監(jiān)控用戶密碼 debug 0 |
按照上面的格式,配置好 mmm_mond.conf
b、啟動(dòng) mmm 服務(wù)
在4臺(tái) MySQL 服務(wù)器中啟動(dòng) mysql-mmm-agent 服務(wù)
[root@cluster-mysqla mysql-mmm]# mmm_agentd start
在監(jiān)控服務(wù)器中驅(qū)動(dòng) mysql-mmm-monitor 服務(wù)
[root@cluster-proxy mysql-mmm]# mmm_mond start
c、在 monitor 服務(wù)器查看其他4臺(tái)服務(wù)器的狀態(tài)
[root@cluster-proxy mysql-mmm]# mmm_control show
如上圖,表示4臺(tái)數(shù)據(jù)庫(kù)服務(wù)器配置 mmm 配置 OK。
d、測(cè)試虛擬 IP 地址是否能夠 ping 通
如果能夠 ping 通,說(shuō)明 mysql-mmm 部署成功,如果無(wú)法 ping 通,則說(shuō)明在主機(jī)上虛擬 IP 地址沒(méi)有設(shè)置成功,這時(shí)候,我們需要在 5 臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行以下命令
[root@cluster-mysqla mysql-mmm]# perl -MCPAN -e shell
如圖:
cpan[1]> install Net::ARP
如果在執(zhí)行 perl -MCPAN -e shell 該命令時(shí)報(bào)錯(cuò) Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).
說(shuō)明,我們沒(méi)有安裝 perl-CPAN,用 yum 安裝即可
執(zhí)行完上述命令之后,在分別在4臺(tái)服務(wù)器中執(zhí)行下列命令
mastera
[root@cluster-mysqla mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254
masterb
[root@cluster-mysqlb mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254
slavea
[root@cluster-mysqlc mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.253
slaveb
[root@cluster-mysqld mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.252
執(zhí)行上面命令之后,在 ping 虛擬 IP 地址,ping 測(cè)試 OK,能夠 ping 通
最后,在查看4臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的狀態(tài)
[root@cluster-proxy mysql-mmm]# mmm_control checks all
如圖:
如果全是 OK ,說(shuō)明我們的 mysql-mmm 服務(wù)部署成功
上面的地2列的意思分別是:
ping:ping 測(cè)試,可以 ping 通時(shí) OK,否則,請(qǐng)按照上述操作檢查
mysql:mysql server 在線時(shí) OK,否則,請(qǐng)檢查 mysql server 是否有停止
rep_threadh:復(fù)制線程正在運(yùn)行時(shí) OK,否則請(qǐng)排查復(fù)制線程未運(yùn)行的原因,常見(jiàn)可能原因?yàn)椋?、監(jiān)控和復(fù)制所用的用戶名、密碼錯(cuò)誤;2、主從同步出現(xiàn)故障
rep_backlog:復(fù)制擠壓的日志很少時(shí) OK,否則可能是服務(wù)器處理速度太慢或者數(shù)據(jù)量太大
e、mmm_control 名詞解釋
如圖:
check:查看指定 host 或者所有主機(jī)的指定狀態(tài)或者所有狀態(tài)
show:查看當(dāng)前集群狀態(tài)
set_online:把 host 的狀態(tài)由AWAITING_RECOVERY或者ADMIN_OFFLINE恢復(fù)到ONLINE
set_offline:把 host 的狀態(tài)手動(dòng)設(shè)置為ADMIN_OFFLINE,并且會(huì)停止mysql復(fù)制
mode:打印當(dāng)前monitor的運(yùn)行模式
set_active:切換monitor進(jìn)程為主動(dòng)模式
set_passive:切換monitor進(jìn)程為被動(dòng)模式
set_manual:切換monitor進(jìn)程為手動(dòng)模式
move_role:將write角色切換到其他主機(jī)
f、測(cè)試mysql-mmm在服務(wù)故障情況下是否能夠自動(dòng)切換,這里值提供方法
測(cè)試方法為:
停止 mastera 的 mysql 服務(wù),查看 writer(192.168.20.254) 是否能夠切換到 masterb,隨后開(kāi)啟 mastera 的 mysql 服務(wù),在手動(dòng)停止 masterb 的 mysql 服務(wù),查看 writer(192.168.20.254) 是否能夠切換到 mastera ,如果都能,則說(shuō)明,我們的mysql-mmm集群部署時(shí)OK的,如果不能,請(qǐng)檢查mmm_common.conf配置文件是否有錯(cuò)。當(dāng)然還有其他測(cè)試思路,這里就不一一列舉了。
五、連接MMM集群
部署完 mysql-mmm 集群,這時(shí)候我們就迫不及待的想要用我們現(xiàn)有的應(yīng)用服務(wù)去連接
首先,我們?cè)趍astera新建一個(gè)MySQL賬號(hào)game
mysql> grant all privileges on *.* to game@"%" identified by "123456";
mysql> flush privileges;
然后,我們?cè)谖覀兊膽?yīng)用服務(wù)器上連接虛擬 IP(192.168.20.254、192.168.20.253、192.168.20.252)
a、連接192.168.20.254創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)
[root@weba ~]# mysql -h292.168.20.254 -ugame -p123456
MySQL [(none)]> create database web;
b、連接192.168.20.253、192.168.20.252查看剛才創(chuàng)建的數(shù)據(jù)庫(kù)是否存在
[root@webb ~]# mysql -h292.168.20.253 -ugame -p123456
[root@webb ~]# mysql -h292.168.20.252 -ugame -p123456
有圖可見(jiàn),我們連接192.168.20.254創(chuàng)建的數(shù)據(jù)庫(kù),在連接192.168.20.253和192.168.20.252后也能看得到,說(shuō)明一切OK
注意:連接192.168.20.254時(shí),最好能夠切換 mastera 和 masterb 進(jìn)行連接建庫(kù)測(cè)試,在這期間有可能會(huì)出現(xiàn)以下報(bào)錯(cuò):
1209 - The MySQL server is running with the --read-only option so it cannot execute this statement
出現(xiàn)這個(gè)錯(cuò)誤原因是,mmm 將主數(shù)據(jù)庫(kù)設(shè)置成了只讀模式,我們只需要執(zhí)行 set global read_only=0; 即可
到此為止,我們的MySQL主從同步+MMM高可用集群部署完成,我們也列舉了一些在部署過(guò)程中可能會(huì)踩到的坑,但是,在線上部署中,需要具體問(wèn)題具體分析,所以,在以后的生活中,小弟還會(huì)和大佬們共同成長(zhǎng)。
對(duì)于以上部署過(guò)程,若有疑問(wèn),可參照 官方安裝文檔 。
本節(jié)完。
文章標(biāo)題:MySQL+MMM高可用集群部署(二)
URL網(wǎng)址:http://fisionsoft.com.cn/article/pphjjs.html