MySQL-MMM高可用羣集(本篇使用MariaDB代替MySQL進行實驗部署)

1.MySQL-MMM概述

MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主平常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫作雙主複製,可是業務上同一時刻只容許對一個主進行寫入,另外一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,能夠說MMM這套腳本程序一方面實現了故障切換的功能,另外一方面其內部附加的工具腳本也能夠實現多個slave的read負載均衡。
MMM提供了自動和手動兩種方式移除一組服務器中複製延遲較高的服務器的虛擬ip,同時它還能夠備份數據,實現兩節點之間的數據同步等。因爲MMM沒法徹底的保證數據一致性,因此MMM適用於對數據的一致性要求不是很高,可是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,很是不建議採用MMM這種高可用架構。mysql

二、MySQL-MMM優缺點

優勢:高可用性,擴展性好,出現故障自動切換,對於主主同步,在同一時間只提供一臺數據庫寫操做,保證的數據的一致性。
缺點:Monitor節點是單點,能夠結合Keepalived實現高可用。sql

三、MySQL-MMM工做原理

MMM是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。數據庫

  • mmm_mond:監控進程,負責全部的監控工做,決定和處理全部節點角色活動。此腳本須要在監管機上運行。
  • mmm_agentd:運行在每一個mysql服務器上的代理進程,完成監控的探針工做和執行簡單的遠端服務設置。此腳本須要在被監管機上運行。
  • mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令。
    mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,經過監管的管理,這些IP會綁定在可用mysql之上,當某一臺mysql宕機時,監管會將VIP遷移至其餘mysql。

在整個監管過程當中,須要在mysql中添加相關受權用戶,以便讓mysql能夠支持監理機的維護。受權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,若是想使用mmm的備份工具則還要添加一個mmm_tools用戶。vim

系統環境

操做系統:CentOS 7.0 x86_64
數據庫分配緩存

Function IP Hostname Sever id
MySQL-monitor 192.168.100.163 monitor
master1 192.168.100.155 db1 1
master2 192.168.100.166 db2 2
slave1 192.168.100.159 db3 3
slave2 192.168.100.158 db4 4

虛擬IP地址(VIP)安全

IP role
192.168.100.170 writer
192.168.100.171 reader
192.168.100.172 reader

實驗部署

1、在master一、master二、slave一、slave2上安裝MariaDB,本實驗用MariaDB代替MySQL,實驗效果相同

1.配置ALI雲源,而後安裝epel-release源服務器

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache   //清空全部,從新更新元數據緩存

2.安裝MariaDB架構

yum -y install mariadb-server mariadb

3.關閉防火牆及加強安全設置負載均衡

systemctl stop firewalld.service
setenforce 0

在其餘三臺服務端上進行一樣的操做 ide

4.修改m1主配置文件

vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err               //錯誤日誌文件位置
log=/var/lib/mysql/mysql_log.log                 //訪問日誌文件位置
log_slow_queries=/var/lib/mysql_slow_queris.log  //慢日誌文件位置
binlog-ignore-db=mysql,information_schema        //mysql,information_schema這兩個數據庫不生成二進制日誌文件
character_set_server=utf8       //字體設置爲utf8
log_bin=mysql_bin                                //二進制日誌文件功能開啓
server_id=1                                  //本臺server_id爲1,其餘三臺server_id與本臺不一樣
log_slave_updates=true                           //開啓同步
sync_binlog=1                                    //1爲安全值
auto_increment_increment=2
auto_increment_offset=1

5.開啓服務並查看服務狀態

systemctl start mariadb
netstat -anpt | grep 3306

6.沒有問題後,把配置文件複製到其它3臺數據庫服務器上並啓動服務器,注意:配置文件中的server_id要修改

scp /etc/my.cnf root@192.168.100.166:/etc/
scp /etc/my.cnf root@192.168.100.159:/etc/
scp /etc/my.cnf root@192.168.100.158:/etc/

2、配置主主複製(兩臺主服務器相互複製)

1.分別在兩臺主服務器上查看日誌文件名稱和位置值

mysql               //登陸數據庫
>show master status;

2.在m1上爲m2授予從的權限,在m2上也要爲m1授予從的權限
MariaDB-m1:

grant replication slave on *.* to 'replication'@'192.168.100.%' identified by '123456';
//使用帳戶爲replication 密碼爲123456
change master to master_host='192.168.100.166',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;
//當在MariaDB-m1上執行時,master_host地址爲MariaDB-m2地址

MariaDB-m2:

grant replication slave on *.* to 'replication'@'192.168.100.%' identified by '123456';       
change master to master_host='192.168.100.155',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;
//當在MariaDB-m1上執行時,master_host地址爲MariaDB-m2地址

3.開啓同步,查看服務器的主從狀態

>start slave;
>show slave status\G;       //Slave_IO_Running: Yes、Slave_SQL_Running這兩個條目狀態爲yes

MySQL-MMM高可用羣集(本篇使用MariaDB代替MySQL進行實驗部署)
MySQL-MMM高可用羣集(本篇使用MariaDB代替MySQL進行實驗部署)
4.建庫測試主主同步

>create database dba;       //在m1上建立dba數據庫,應當在m2上能看到,不然主主同步失敗
>drop database dba;     //在m1上刪除後,m2上的dba也應當沒有

3、主從複製(slave一、slave2兩臺服務器操做相同)

1.登陸mariadb

>mysql

2.在兩臺從服務器上分別執行

change master to master_host='192.168.100.155',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;

3.開啓同步並查看從服務器狀態

>start slave;
>show slave status\G;       //需看到slave1和slave2的Slave_IO_Running: Yes、Slave_SQL_Running參數值爲yes

四、測試主從同步

在m1上建立數據庫dba,須要再slave1和slave2上看到一樣的數據庫dba出現,則主從同步成功

MySQL-MMM高可用羣集(本篇使用MariaDB代替MySQL進行實驗部署)

4、安裝MySQL-MMM服務器

1.安裝mysql-mmm軟件包

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    
yum -y install epel-release
yum -y install mysql-mmm*

2.配置MySQL-MMM

vim /etc/mysql-mmm/mmm_common.conf
active_master_role      writer
<host default>
cluster_interface       ens33
pid_path                /run/mysql-mmm-agent.pid
bin_path                /usr/libexec/mysql-mmm/
replication_user        replication
replication_password    123456
agent_user              mmm_agent
agent_password          123456
</host>
<host db1>
ip      192.168.100.155
mode    master
peer    db2
</host>
<host db2>
ip      192.168.100.166
mode    master
peer    db1
</host>
<host db3>
ip      192.168.100.159
mode    slave
</host>
<host db4>
ip      192.168.100.158
mode    slave
</host>
<role writer>
hosts   db1, db2
ips     192.168.100.170
mode    exclusive
</role>
<role reader>
hosts   db3, db4
ips     192.168.100.171, 192.168.100.172
mode    balanced
</role>

3.其餘服務器的mmm_common.conf文件內容相同,直接快速傳輸至其餘服務器

scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.166:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.159:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.158:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.163:/etc/mysql-mmm/

4.在monitor服務器上編輯mmm_mon.conf配置文件
vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf
<monitor>
ip                  127.0.0.1
pid_path            /run/mysql-mmm-monitor.pid
bin_path            /usr/libexec/mysql-mmm
status_path         /var/lib/mysql-mmm/mmm_mond.status
ping_ips            192.168.100.155,192.168.100.166,192.168.100.159,192.168.100.158
auto_set_online     10
# 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>
<host default>
monitor_user        mmm_monitor
monitor_password    123456
</host>
debug 0

5.啓動mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service   //啓動mysql-mmm-monitor

5、給四臺mysql服務器配置mysql-mmm代理

一、在四臺mysql服務器上爲mmm_agent受權

>grant super, replication client, process on *.* to 'mmm_agent'@'192.168.100.%' identified by '123456';

二、在全部數據庫上爲mmm_monitor受權

>grant replication client on *.* to 'mmm_monitor'@'192.168.100.%' identified by '123456';

3.刷新權限

>flush privileges;

四、修改各數據庫的mmm_agent.conf的主機名分別爲db一、db二、db三、db4

vi /etc/mysql-mmm/mmm_agent.conf
···
this db1            //其餘三個服務器分別爲db二、db三、db4

五、在全部服務器上啓動mysql-mmm-agent服務

systemctl enable mysql-mmm-agent
systemctl start mysql-mmm-agent

6、回到mmm-monitor上進行檢查

一、查看各節點狀況

mmm_control show
db1(192.168.100.155) master/ONLINE. Roles: writer(192.168.100.170)
db2(192.168.100.166) master/ONLINE. Roles:
db3(192.168.100.159) slave/ONLINE. Roles: reader(192.168.100.171)
db4(192.168.100.158) slave/ONLINE. Roles: reader(192.168.100.171)

二、檢查全部選項,需均爲OK

mmm_control checks all

三、使用下面命令可手動切換主服務器

mmm_control move_role writer db2

7、故障測試

一、中止m1服務器的mariadb服務,在檢查服務器狀態,看m2是否搶佔虛擬地址

systemctl stop mariadb
mmm_control show
db1(192.168.100.155) master/HARD_OFFLINE. Roles:
db2(192.168.100.166) master/ONLINE. Roles: writer(192.168.100.170)
db3(192.168.100.159) slave/ONLINE. Roles: reader(192.168.100.171)
db4(192.168.100.158) slave/ONLINE. Roles: reader(192.168.100.172)

這裏db1的虛擬ip地址已經漂移到db2上

二、暫停db3服務器的mariadb服務,在檢查狀態

systemctl stop mariadb
mmm_control show
db1(192.168.100.155) master/HARD_OFFLINE. Roles:
db2(192.168.100.166) master/ONLINE. Roles: writer(192.168.100.170)
db3(192.168.100.159) slave/HARD_OFFLINE. Roles: 
db4(192.168.100.158) slave/ONLINE. Roles: reader(192.168.100.171),reader(192.168.100.172)

三、恢復db一、db3服務器mariadb服務,在檢查狀態

mmm_control show
db1(192.168.100.155) master/ONLINE. Roles:
db2(192.168.100.166) master/ONLINE. Roles: writer(192.168.100.170)
db3(192.168.100.159) slave/ONLINE. Roles: reader(192.168.100.171)
db4(192.168.100.158) slave/ONLINE. Roles: reader(192.168.100.172)

注:當db1恢復後,並不會搶佔vip!

相關文章
相關標籤/搜索