1. 程式人生 > >MySQL-MMM 高可用

MySQL-MMM 高可用

所有 搭建 表示 path offset 個數 d3d text rest

簡介
MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)復制,雖然叫做雙主復制,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slave的read負載均衡。

MMM提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬ip,同時它還可以備份數據,實現兩節點之間的數據同步等。由於MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,非常不建議采用MMM這種高可用架構。

實驗拓撲圖
技術分享圖片

實驗目標:
搭建mysql高可用群集

實驗環境

技術分享圖片
在5臺服務器上關閉防火墻,安全性
setenforce 0
systemctl stop firewalld.service

實驗步驟
一、master01、master02、slave01、slave02、monitor 5臺mysql服務器配置
1.配置all雲源(yum源)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.配置epel源(最新版本)
yum -y install epel-release

3.加載元數據緩存
yum clean all && yum makecache

4.安裝mariadb數據庫和mysql-mmm軟件包
yum install mariadb-sever mariadb mysql-mmm* -y

5.修改mariadb數據庫主配置文件

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     #不生成二進制日誌文件
  character_set_server=utf8       #字符集
  log_bin=mysql_bin            #開啟二進制文件
  server_id=1                   #id號是唯一的
  log_slave_updates=true         #同步開啟
  sync_binlog=1                  #同步二進制日誌,1設為安全值
  auto_increment_increment=2      #自增列,起點為1,增量為2
  auto_increment_offset=1

備註:分別修改master02、slave01、slave02的配置文件server_id參數

6.啟動mariadb 服務

systemctl enable mariadb       #開機自啟動mariadb
systemctl start mariadb.service  #啟動mariadb 服務

二、主、主復制(主服務器之間相互復制)
1.登錄mariadb,在主服務器master1上授權

mysql
grant replication slave on *.* to ‘replication‘@‘192.168.65.%‘ identified by ‘123456‘;

技術分享圖片

2.在master1上指定master2的日誌和位置參數

change master to master_host=‘192.168.65.142‘,master_user=‘replication‘,master_password
=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;

3.開啟同步
start slave;
技術分享圖片

4.在主服務器master2上授權

mysql
grant replication slave on *.* to ‘replication‘@‘192.168.65.%‘ identified by ‘123456‘;

技術分享圖片

5.在master2上指定master1的日誌和位置參數

change master to 
master_host=‘192.168.65.159‘,master_user=‘replication‘,master_password=‘123456‘,
master_log_file=‘mysql_bin.000003‘,master_log_pos=245;

6.開啟同步

start slave;
show slave status\G

技術分享圖片

7.從服務器同步主(兩臺從服務器都指向同一臺主服務器)
兩臺從服務器同樣操作:

mysql
change master to master_host=‘192.168.65.159‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;(# 註意主服務器位置參數變化)
start slave;   #開啟同步

技術分享圖片
技術分享圖片

8.測試:四臺全部同步
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

三、配置mysql-MMM服務器(5臺服務器都配置)
1.編輯mysql-mmm的配置文件

vim mmm_common.conf          #所有主機都要配置,復制
<host default>
    cluster_interface         ens33    #修改網卡為ens33
    pid_path               /run/mysql-mmm-agent.pid
    bin_path               /usr/libexec/mysql-mmm/
    replication_user         replicantion
    replication_password     123456   #修改Mariadb給予權限的用戶密碼
    agent_user             mmm_agent
    agent_password         123456    #修改agent客戶端代理用戶密碼
</host>

<host db1>  #指定第一個數據庫
    ip      192.168.65.159   #指定IP地址
    mode    master   #模式為主服務器
    peer    db2    #與db2互為切換
</host>

<host db2>  #指定第二個數據庫
    ip      192.168.65.142  #指定IP地址
    mode    master  #模式為主服務器
    peer    db1   #與db1互為切換
</host>

<host db3>  #指定第二個數據庫
    ip      192.168.65.165  #指定IP地址
    mode    slave  #模式為從服務器
</host>

<host db4>   #指定第二個數據庫 
    ip      192.168.65.152  #指定IP地址
    mode    slave   #模式為從服務器
</host>

<role writer>  #指定寫入服務器
    hosts   db1, db2  #指定db1,db2為寫入服務器
    ips     192.168.65.100  #指定寫入虛擬ip地址
    mode    exclusive  #模式為單獨的(只能有一個)
</role>

<role reader>  #指定讀取服務器
    hosts   db3, db4  #指定db1,db2為寫入服務器
    ips     192.168.65.101, 192.168.100.65.102  #指定讀取虛擬ip地址
mode    balanced  #模式為負載均衡,讀取操作會從db3、db4主機進行

2.將配置文件傳輸到其它4臺數據庫服務器上

scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/

備註:一定要去其它4臺服務器上確認已修改!

3.monitor配置

cd /etc/mysql-mmm/
vim mmm_mon.conf          #改密碼
  ping_ips            192.168.65.159,192.168.65.142,192.168.65.152,192.168.65.165
  auto_set_online     10   #修改為10,表示10秒鐘上線
...... 省略部分內容
  <host default>
    monitor_user        mmm_monitor     #監控機用戶名
    monitor_password    123456           #修改密碼
</host>

4.在所有數據庫上為mmm_agent授權
grant super,replication client,process on *.* to ‘mmm_agent‘@‘192.168.65.%‘ identified by ‘123456‘;

6在所有數據庫上為mmm_monitor授權

grant replication client on *.* to ‘mmm_monitor‘@‘192.168.65.%‘ identified by ‘123456‘;
flush privileges; #刷新生效

7.在4臺數據庫上分別修改mmm_agent.conf

vim mmm_agent.conf 
   this is db1/2/3/4  #在4臺數據庫分別修改

8啟動mysql-mmm-agent

systemctl restart mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service

9.啟動mysql-mmm-monitor
systemctl start mysql-mmm-monitor.service #啟動服務

10.檢查所有選項

mmm_control show    #查看各節點情況
mmm_control checks all  

技術分享圖片

11.可以手動切換主服務器
mmm_control move_role writer db2
技術分享圖片

四、模擬故障
1.先停止db1,db3
systemctl stop mariadb
技術分享圖片
技術分享圖片

2.再查看mysql-mmm服務器狀態
mmm_control show
技術分享圖片

3.恢復db1,db3上線
技術分享圖片

4.再查看mysql-mmm服務器狀態
mmm_control show
技術分享圖片
5.當db1服務器恢復後,並不會搶占vip地址,而是作為備用機在等待著,
當db2下線後,再次查看
技術分享圖片

MySQL-MMM 高可用