溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL架構(gòu)——mmm部署實例

發(fā)布時間:2020-05-30 04:16:35 來源:網(wǎng)絡 閱讀:2517 作者:SiceLc 欄目:系統(tǒng)運維

mmm架構(gòu)的來源

  • 眾所周知,MySQL自身提供了主從復制,然后可以很輕松實現(xiàn)master-master雙向復制,同時再為其中一個Master節(jié)點搭建一個Slave庫。這樣就實現(xiàn)了MySQL-MMM架構(gòu)的基礎:master1和master2之間雙向復制,同時Master1和Slave1之間是主從復制。
  • 這樣整個體系中存在兩個Master,正常情況下只有一個master對外提供寫服務。如果對外提供服務的master意外宕機了,這是MySQL本身并不具備failover切換的能力,盡管集群中仍然有一個正常的master節(jié)點,但應用仍不可用。mysql-mmm就是為了解決這個問題誕生的。

mmm架構(gòu)的原理

  • MySQL-MMM是Master-Master Replication Manager for MySQL(mysql主主復制管理器)的簡稱,是Google的開源項目(Perl腳本),主要用來監(jiān)控mysql主主復制并做失敗轉(zhuǎn)移
  • 其原理是將真實數(shù)據(jù)庫節(jié)點的IP(RIP)映射為虛擬IP(VIP)集,在這個虛擬的IP集中,有一個專用于write的IP,多個用于read的IP,這個用于Write的VIP映射著數(shù)據(jù)庫集群中的兩臺master的真實IP(RIP),以此來實現(xiàn)Failover的切換,其他read的VIP可以用來均衡讀(balance)。

mmm機構(gòu)優(yōu)缺點

優(yōu)點

  • 使用Perl腳本語言開發(fā)及完全開源
  • 提供了讀寫VIP(虛擬IP),使服務器角色的變更對前端應用透明
  • MMM提供了從服務器的延遲監(jiān)控
  • MMM提供了主數(shù)據(jù)庫故障轉(zhuǎn)移后從服務器對新主的重新同步功能
  • 很容易對發(fā)生故障的主數(shù)據(jù)庫重新上線

缺點

  • 發(fā)布時間比較早不支持MySQL新的復制功能(基于GTID的復制)
  • 沒有讀負載均衡的功能
  • 在進行主從切換時,容易造成數(shù)據(jù)丟失
  • MMM監(jiān)控服務存在單點故障

mmm架構(gòu)原理圖

MySQL架構(gòu)——mmm部署實例

實驗部署

環(huán)境部署

master1IP地址:192.168.144.167
master2IP地址:192.168.144.151
slave1IP地址:192.168.144.168
slave2IP地址:192.168.144.145
monitorIP地址:192.168.144.164

在master1\master2\slave1\slave2服務器中安裝MYSQL數(shù)據(jù)庫

[root@master1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   //獲取源地址
[root@master1 ~]# yum -y install epel-release      //安裝epel源
[root@master1 ~]# yum clean all && yum makecache     //yum緩存清空
[root@master1 ~]# yum -y install mariadb-server mariadb      //安裝mariadb數(shù)據(jù)庫
[root@master1 ~]# systemctl stop firewalld.service       //關(guān)閉防火墻
[root@master1 ~]# setenforce 0
[root@master1 ~]# systemctl start mariadb.service        //開啟數(shù)據(jù)庫

修改master1數(shù)據(jù)庫配置文件

[root@master1 ~]# 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     //man日志
binlog-ignore-db=mysql,information_schema         //二進制文件
character_set_server=utf8        //字符集
log_bin=mysql_bin             //二進制日志文件
server_id=11            //服務id(不能相同)
log_slave_updates=true   //允許從服務器更新
sync_binlog=1            //同步日志
auto_increment_increment=2    //自增列
auto_increment_offset=1               //起始點
[root@master1 ~]# systemctl restart mariadb.service   //重啟數(shù)據(jù)庫

使用scp復制數(shù)據(jù)庫配置文件到其他MySQL服務,并在其他MySQL服務器中修改server_id

[root@master1 ~]# scp /etc/my.cnf root@192.168.144.151:/etc/   (server-id=22)
[root@master1 ~]# scp /etc/my.cnf root@192.168.144.168:/etc/   (server-id=33)
[root@master1 ~]# scp /etc/my.cnf root@192.168.144.145:/etc/   (server-id=44)
[root@master1 ~]# netstat -anpt | grep 3306       //查看端口3306
tcp      0   0 0.0.0.0:3306     0.0.0.0:*         LISTEN      4235/mysqld  

配置主主復制

master1
[root@master1 ~]# mysql   ##進入數(shù)據(jù)庫

MariaDB [(none)]> show master status;   ##查看主服務器的狀態(tài)信息
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      245 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.144.%' identified by '123456';     //授權(quán)給144段的網(wǎng)段復制的權(quán)限用戶名replication密碼123456
Query OK, 0 rows affected (0.00 sec)
master2
MariaDB [(none)]> change master to master_host='192.168.144.167',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;     //在master2上同步master1服務器
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.144.%' identified by '123456';    //在master2上授權(quán)復制權(quán)限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show master status;       //查看master2的服務器的狀態(tài)信息
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      410 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> flush privileges;     //刷新權(quán)限
Query OK, 0 rows affected (0.00 sec)
master1
MariaDB [(none)]> change master to master_host='192.168.144.151',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=410;       //master1同步master2服務器數(shù)據(jù)庫
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
master1,master2上開啟同步
MariaDB [(none)]> start slave;              //開啟同步
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G;       //查看同步狀態(tài)信息
                         ...
                         Slave_IO_Running: Yes
                        Slave_SQL_Running: Yes
                        ...

slave1,slave2做主從同步

MariaDB [(none)]> change master to master_host='192.168.144.167',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;       //在從服務器上同步master1主服務器
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;       //刷新權(quán)限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> start slave;       //開啟同步
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G;        //查看同步的狀態(tài)信息
                             ...
                             Slave_IO_Running: Yes
                            Slave_SQL_Running: Yes
                            ...

測試主主,主從的同步狀態(tài)

主服務器master1
MariaDB [(none)]> create database school;   //創(chuàng)建數(shù)據(jù)庫
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;   //查看數(shù)據(jù)庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| test               |
+--------------------+
5 rows in set (0.00 sec)
slave服務器上查看數(shù)據(jù)庫
MariaDB [(none)]> show databases;    //實現(xiàn)主主,主從同步
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| test               |
+--------------------+
5 rows in set (0.00 sec)

monitor服務器上配置epel-release源清空緩存,然后安裝MMM

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

yum -y install mysql-mmm*

所有MySQL服務器上安裝mmm

yum -y install mysql-mmm*

所有服務器上對mmm進行配置

 [root@master1 ~]# vim /etc/mysql-mmm/mmm_common.conf     //所有主機上都要配置,直接復制多份

……
<host default>
        cluster_interface       ens33    //修改網(wǎng)卡
        …
        replication_user        replication      //修改用戶名
        replication_password    123456         //密碼
        agent_user              mmm_agent
        agent_password          123456         //密碼

<host db1>
        ip      192.168.144.167   //master1地址
        mode    master
        peer    db2
</host>

<host db2>
        ip      192.168.144.151   //master2地址
        mode    master
        peer    db1
</host>

<host db3>
        ip      192.168.144.168   //slave1地址
        mode    slave
</host>

<host db4>
        ip      192.168.144.145   //slave2地址
        mode    slave
</host>

<role writer>
        hosts   db1, db2      ##寫服務器虛擬ip
        ips     192.168.144.250
        mode    exclusive
</role>

<role reader> 
        hosts   db3, db4    ##讀服務器虛擬ip
        ips     192.168.144.251, 192.168.144.252
        mode    balanced
</role>

##復制到其他的服務器中
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf root@192.168.144.151:/etc/mysql-mmm/
root@192.168.144.151's password: 
mmm_common.conf                               100%  836   267.1KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf root@192.168.144.168:/etc/mysql-mmm/
root@192.168.144.168's password: 
mmm_common.conf                               100%  836   863.2KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf root@192.168.144.145:/etc/mysql-mmm/
root@192.168.144.145's password: 
mmm_common.conf                               100%  836   904.7KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf root@192.168.144.164:/etc/mysql-mmm/

在monitor服務器上配置

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
<host default>
        monitor_user        mmm_monitor
        monitor_password    123456    ##修改monitor的密碼
</host>

在所有數(shù)據(jù)庫上為mmm_agent代理授權(quán),為mmm_monitor授權(quán)監(jiān)控

MariaDB [(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'192.168.144.%' identified by '123456';     //授權(quán)代理
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant replication client on *.* to 'mmm_monitor'@'192.168.144.%' identified by '123456';        //授權(quán)監(jiān)控
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;       //刷新權(quán)限
Query OK, 0 rows affected (0.00 sec)

修改所有數(shù)據(jù)庫的mmm_agent.conf

[root@master1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db1 //根據(jù)規(guī)劃進行逐一調(diào)整
[root@master2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db2 //根據(jù)規(guī)劃進行逐一調(diào)整
[root@slave1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db3 //根據(jù)規(guī)劃進行逐一調(diào)整
[root@slave2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db4 //根據(jù)規(guī)劃進行逐一調(diào)整
##所有數(shù)據(jù)庫開啟
[root@master1 ~]systemctl start mysql-mmm-agent.service        //開啟代理服務
[root@master1 ~]systemctl enable mysql-mmm-agent.service        //加入開機自啟動

在monitor上配置

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.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.144.167,192.168.144.151,192.168.144.168,192.168.144.145    //所有數(shù)據(jù)庫服務器地址
        auto_set_online     10        //自動在線時間
[root@monitor ~]# systemctl stop firewalld.service        //關(guān)閉防火墻
[root@monitor ~]# setenforce 0
[root@monitor ~]# systemctl start mysql-mmm-monitor.service       /開啟監(jiān)控服務
[root@monitor ~]# mmm_control show            //查看主從的飄逸地址
    db1(192.168.144.167) master/ONLINE. Roles: writer(192.168.144.250)
    db2(192.168.144.151) master/ONLINE. Roles: 
    db3(192.168.144.168) slave/ONLINE. Roles: reader(192.168.144.252)
    db4(192.168.144.145) slave/ONLINE. Roles: reader(192.168.144.251)

測試漂移地址

[root@master1 ~]# systemctl stop mariadb.service     //模擬停止master1服務器

monitor服務器上查看

[root@monitor ~]# mmm_control show
    db1(192.168.144.167) master/HARD_OFFLINE. Roles: 
    db2(192.168.144.151) master/ONLINE. Roles: writer(192.168.144.250)
    db3(192.168.144.168) slave/ONLINE. Roles: reader(192.168.144.252)
    db4(192.168.144.145) slave/ONLINE. Roles: reader(192.168.144.251)
(重啟master1數(shù)據(jù)庫服務,虛擬地址不會被搶占到master1)
mmm_control checks all //需要各種OK
mmm_control move_role writer db1      //可以切換虛擬地址

在monitor上安裝MySQL作為測試機用虛擬ip登錄數(shù)據(jù)庫

[root@monitor ~]# yum install mysql -y

//master1服務器上授權(quán)monitor地址訪問//

MariaDB [(none)]> grant all on *.* to 'testdba'@'192.168.144.164' identified by '123456';
##授權(quán)monitor地址訪問
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;   ##刷新權(quán)限
Query OK, 0 rows affected (0.00 sec)

[root@monitor ~]# mysql -utestdba -p -h 192.168.144.250   ##使用虛擬地址即可登錄數(shù)據(jù)庫
Enter password: 

MariaDB [(none)]> 
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI