1. 程式人生 > >超詳細MySQL主主復制+MMM實現高可用

超詳細MySQL主主復制+MMM實現高可用

mnt 更新 nat mount iad com 基於 read p12

簡介

MMM(Master-Master Replication Manager for MySQL, MySQL主主復制管理器)是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master復制的配置。註意同一時間只有一個節點是可寫。MMM的監管端會提供多個虛擬IP(VIP)包括一個可寫VIP,多個可讀VIP,通過監管的管理,這些IP會綁定在可用mysql之上,當某一臺mysql宕機時,會將VIP遷移至其他mysql。
技術分享圖片

mmm_mond:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此腳本需要在監管機上運行;

mmm_agentd:運行在每個mysql服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置。此腳本需要在被監管機上運行;
mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令

實驗環境

主機名稱 操作系統 IP地址 虛擬IP 主要軟件 網絡連接模式
master01 CentOS_7.4_x86_64 192.168.100.71 192.168.100.100 mariadb、mysql-mmm NAT
master02 CentOS_7.4_x86_64 192.168.100.72 192.168.100.100 mariadb、mysql-mmm NAT
monitor、客戶端 CentOS_7.4_x86_64 192.168.100.73 mariadb、mysql-mmm NAT
slave01 CentOS_7.4_x86_64 192.168.100.74 192.168.100.102 mariadb、mysql-mmm NAT
slave02 CentOS_7.4_x86_64 192.168.100.75 192.168.100.101 mariadb、mysql-mmm NAT

準備工作

一、準備工作

1、編輯主機名

[root@localhost ~]# hostnamectl set-hostname master01
[root@localhost ~]# hostnamectl set-hostname master02

[root@localhost ~]# hostnamectl set-hostname monitor
[root@localhost ~]# hostnamectl set-hostname slave01
[root@localhost ~]# hostnamectl set-hostname slave02
[root@localhost ~]# bash

2、三臺主機關閉防火墻及selinux

[root@master01 ~]# systemctl stop firewalld.service
[root@master01 ~]# systemctl disable firewalld.service
[root@master01 ~]# vim /etc/sysconfig/selinux
技術分享圖片

3、重啟服務

[root@master01 ~]# reboot

一、搭建、配置mysql01主服務器

1、配置本地yum源

[root@master01 ~]# cd /etc/yum.repos.d/
[root@master01 yum.repos.d]# mkdir bak #創建備份目錄
[root@master01 yum.repos.d]# mv CentOS-* bak/ #將系統yum源倉庫進行備份

[root@master01 yum.repos.d]# vim local.repo#創建自建yum源

#添加以下參數:
[local]                           #容器名稱
name=local                  #容器說明
baseurl=file:///mnt/sr0  #yum源地址即掛載點
gpgcheck=0                 #"0"代表rpm數字證書驗證不生效
enabled=1                    #"1"代表此容器生效

[root@master01 ~]# mkdir /mnt/sr0/
[root@master01 ~]# mount /dev/sr0 /mnt/sr0/ #掛載光盤
技術分享圖片

2、安裝epel源

[root@master01 ~]# yum -y install wget #wget命令用來從指定的URL下載文件
[root@master01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #將官網的yum源下載至本地網絡yum源
[root@master01 ~]# yum -y install epel-release #下載epel源擴展
[root@master01 ~]# cat /etc/yum.repos.d/epel.repo
技術分享圖片

3、替換鏡像源

[root@master01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #將epel源的服務器IP地址換成阿裏

4、五臺主機安裝相關軟件包

[root@master01 ~]# yum -y install mariadb-server mariadb mysql-mmm*

#解析:
mysql-mmm*:主主復制管理器
mariadb:客戶端
mariadb-server:服務器端

5、修改mariadb配置文件

[root@master01 ~]# 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/mysql_slow_queris.log    #慢查詢日誌路徑
binlog-ignore-db=mysql,information_schema                #不需要同步的數據庫名稱
character_set_server=utf8                                #設置默認字符集
log_bin=mysql_bin                                        #啟用二進制的日誌 !!!!!主從復制核心
server_id=1                                              #服務器id,方便區分,註意每臺機子id都不一樣
log_slave_updates=true                                   #允許從服務器進行日誌更新
sync_binlog=1                                            #允許從服務器同步二進制日誌
auto_increment_increment=2                               #字段一次遞增多少
auto_increment_offset=1                                  #自增字段的起始值:1,3,5,7……等奇數ID
[client]
default_character_set=utf8                               #設置默認字符集

6、啟動mysql服務器

[root@master01 ~]# systemctl start mariadb.service
[root@master01 ~]# netstat -anpt | grep ‘:3306‘
技術分享圖片

7、設置初始密碼

[root@master01 ~]# mysqladmin -uroot password ‘123‘

二、搭建、配置其余三臺數據庫服務器

其他服務器安裝和master01服務器安裝相同,安裝過程,略……

1、master01服務器上傳配置文件

!!!!!!!!!!!一定要註意配置文件參數其他都是一樣,server-id一定要改成不一樣的

[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf

三、配置mysql主主復制

1、配置master01服務器

[root@master02 ~]# mysql -u root -p123 -e "show master status;" #查看master02服務器狀態
技術分享圖片

[root@master01 ~]# mysql -u root -p123 #登陸mariadb
MariaDB [(none)]> grant replication slave on . to ‘replication‘@‘192.168.100.%‘ identified by ‘123456‘;
#授權從服務器復制權限

MariaDB [(none)]> change master to master_host=‘192.168.100.72‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000001‘,master_log_pos=388;
#指定master02服務器為主服務器

2、配置master02服務器

MariaDB [(none)]> show master status; #查看master01服務器狀態
技術分享圖片

[root@master02 ~]# mysql -u root -p123 #登陸mariadb
MariaDB [(none)]> grant replication slave on . to ‘replication‘@‘192.168.100.%‘ identified by ‘123456‘;

MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=554;
#指定master02服務器為主服務器

3、開啟兩臺主主服務器同步功能

MariaDB [(none)]> start slave;

4、查看同步結果

MariaDB [(none)]> show slave status\G; #查看master01服務器狀態
技術分享圖片

MariaDB [(none)]> show slave status\G; #查看master02服務器狀態
技術分享圖片

四、配置slave01、slave02作為master01的從庫

1、查看master01服務器二進制日誌文件名稱以及位置

[root@master01 ~]# mysql -u root -p -e "show master status;"
技術分享圖片

2、設置slave01作為master01的從庫

[root@slave01 ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=720;
#指定master01作為主服務器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
技術分享圖片

3、再次查看master01服務器狀態

技術分享圖片

4、設置slave02作為master01的從庫

[root@slave01 ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘replication‘,master_password=‘123456‘, master_log_file=‘mysql_bin.000006‘,master_log_pos=720;
#指定master01作為主服務器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
技術分享圖片

五、測試主主同步、主從同步

1、master01服務器創建測試數據

[root@master01 ~]# mysql -uroot -p
MariaDB [(none)]> create database test_db;
技術分享圖片

2、查看其他三臺數據庫服務器

技術分享圖片

技術分享圖片

技術分享圖片

六、配置MySQL-MMM

1、五臺主機編輯common配置文件

[root@master01 ~]# cd /etc/mysql-mmm/
[root@master01 mysql-mmm]# vim mmm_common.conf

#添加、編輯以下參數:
active_master_role      writer
<host default>  #編輯主機默認設置
    cluster_interface       ens33                    #群集接口,這裏用的是CentOS7,修改自己對應的網卡名稱
    pid_path                /run/mysql-mmm-agent.pid #運行agent保存的pid位置
    bin_path                /usr/libexec/mysql-mmm/  #可執行命令
    replication_user        replication              #Mariadb給予權限的用戶           
    replication_password    123456                   #Mariadb給予權限的用戶密碼
    agent_user              mmm_agent                #agent客戶端代理用戶(需要在所有mysql服務器上設置)
    agent_password          123456                   #agent客戶端代理用戶密碼
</host>

<host db1>  #第一個數據庫
    ip      192.168.100.71       
    mode    master
    peer    db2 #db1和db2數據庫是一對,互相切換
</host>

<host db2>  #第二個數據庫
    ip      192.168.100.72
    mode    master
    peer    db1
</host>

<host db3>  #第三個數據庫(第一個從數據庫)
    ip      192.168.100.74
    mode    slave
</host>

<host db4>  #第四個數據庫(第二個從數據庫)
    ip      192.168.100.75
    mode    slave
</host>

<role writer> #設置主服務器角色(寫操作)
    hosts   db1, db2
    ips     192.168.100.100 #指定虛擬IP
    mode    exclusive #指定模式,db1和db2只能存在一個IP地址,只能有一臺主機進行寫入操作
</role>

<role reader> #設置從服務器角色(讀操作)
    hosts   db3,db4
    ips     192.168.100.101, 192.168.100.102 #指定虛擬IP
    mode    balanced  #負載均衡,讀取操作會從db3、db4主機進行
</role>

2、將common配置文件上傳至其他4臺主機上

[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/

3、monitor服務器編輯mmm_mon.conf文件

[root@monitor ~]# cd /etc/mysql-mmm/
[root@monitor mysql-mmm]# vim mmm_mon.conf

<host default>
    monitor_user        mmm_monitor
    monitor_password    123456 #修改密碼,方便mysql授權
</host>

4、四臺數據庫服務器授權agent、monitor

[root@master01 ~]# mysql -u root -p
#授權agent
mysql> grant super,replication client,process on . to ‘mmm_agent‘@‘192.168.100.%‘ identified by ‘123456‘;
#授權monitor
mysql> grant replication client on . to ‘mmm_monitor‘@‘192.168.100.%‘ identified by ‘123456‘;
#刷新權限
mysql> flush privileges;

5、修改agent文件

[root@master01 ~]# cd /etc/mysql-mmm/
[root@master01 mysql-mmm]# vim mmm_agent.conf
技術分享圖片

6、五臺服務器啟動agent服務

[root@master01 ~]# systemctl start mysql-mmm-agent.service
[root@master01 ~]# systemctl enable mysql-mmm-agent.service

7、monitor服務器編輯mmm_mon文件

[root@monitor ~]# cd /etc/mysql-mmm/
[root@monitor mysql-mmm]# vim mmm_mon.conf

#編輯以下參數
ping_ips            192.168.100.71,192.168.100.72,192.168.100.74,192.168.100.75  #約第8行,添加所有數據庫IP地址
auto_set_online     10   #約第9行,代表10秒鐘上線

8、monitor服務器啟動mmm

[root@monitor ~]# systemctl start mysql-mmm-monitor.service
[root@monitor ~]# mmm_control show
技術分享圖片

[root@monitor ~]# mmm_control checks all
技術分享圖片

[root@monitor ~]# mmm_control move_role writer db2 #指定db2服務器綁定虛擬IP
[root@monitor ~]# mmm_control show
技術分享圖片

七、模擬故障

1、宕掉master01服務器

[root@monitor ~]# mmm_control move_role writer db1 #指定db1服務器綁定虛擬IP
[root@master01 ~]# systemctl stop mariadb.service
[root@monitor ~]# mmm_control show
技術分享圖片

2、恢復master01綁定虛擬IP

[root@master01 ~]# systemctl start mariadb.service
[root@monitor ~]# mmm_control move_role writer db1
[root@monitor ~]# mmm_control show
技術分享圖片

3、宕掉slave01服務器

[root@slave01 ~]# systemctl stop mariadb.service
[root@monitor ~]# mmm_control show
技術分享圖片

4、恢復slave01綁定虛擬IP

[root@slave01 ~]# systemctl start mariadb.service
[root@monitor ~]# mmm_control show
技術分享圖片

超詳細MySQL主主復制+MMM實現高可用