MySQL高可用群集--MMM高可用架構

來源:互聯網
上載者:User

標籤:isa   iter   結合   資料庫管理   利用   gen   none   host   時間   

為什麼要使用MySQL高可用群集
  • 在實際生產環境中,當普通的MySQL主從複製和讀寫分離不能滿足實際需求時,就需要考慮MySQL的高可用群集,出於安全形度考慮,當資料訪問量過大帶來主伺服器負載增大,當出現主伺服器宕機一個時,保證資料服務不會中斷的情況下,從伺服器會自動尋找另一主伺服器,而從伺服器也會像主伺服器一樣,當其中一個宕機時,依舊可以保證服務不會中斷。
MMM高可用架構

什麼是MMM?
  • MMM(Master-Master replication manager for MySQL)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一台備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套指令碼程式一方面實現了故障切換的功能,另一方面其內部附加的工具指令碼也可以實現多個slave的read負載平衡。
  • MMM提供了自動和手動兩種方式移除一組伺服器中複寫延遲較高的伺服器的虛擬ip,同時它還可以備份資料,實現兩節點之間的資料同步等。由於MMM無法完全的保證資料一致性,所以MMM適用於對資料的一致性要求不是很高,但是又想最大程度的保證業務可用性的情境。對於那些對資料的一致性要求很高的業務,非常不建議採用MMM這種高可用架構。
MySQL-MMM優缺點
  • 優點: 高可用性,擴充性好,出現故障自動切換,對於主主同步,在同一時間只提供一台資料庫寫操作,保證的資料的一致性。

  • 缺點: Monitor節點是單點,可以結合Keepalived實現高可用,對主機的數量有要求,需要實現讀寫分離,對程式來說是個挑戰。
MMM工作原理
  • MMM(Master-Master replication managerfor Mysql,Mysql主主複製管理器)是一套靈活的指令碼程式,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。
MMM高可用架構說明
  • 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使用者。
實驗部署什麼是Mariadb?
  • MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全相容MySQL,包括API和命令列,使之能輕鬆成為MySQL的代替品。在儲存引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。
  • MariaDB基於事務的Maria儲存引擎,替換了MySQL的MyISAM儲存引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發人員希望提供訪問即將到來的MySQL 5.4 InnoDB效能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX儲存引擎。
  • 這裡我們為了實驗方便,不再一台一台伺服器去安裝MySQL,這樣將消耗大量時間,選擇利用Mariadb臨時代替MySQL,但實驗操作與MySQL伺服器相同。
實驗環境
伺服器 作業系統 IP地址 所需軟體
master1 centos7.3 x86_64 192.168.144.128 mariadb、MySQL-MMM
master2 centos7.3 x86_64 192.168.144.145 mariadb、MySQL-MMM
slave1 centos7.3 x86_64 192.168.144.141 mariadb、MySQL-MMM
slave2 centos7.3 x86_64 192.168.144.129 mariadb、MySQL-MMM
monitor centos7.3 x86_64 192.168.144.136 MySQL-MMM
搭建YUM源
  • 由於centos預設沒有MySQL-MMM軟體包,因此我們需要通過配置YUM源以及通過使用epel源選擇線上安裝。
  • 首先在每一台需要做群集的伺服器上搭建雲源,然後安裝epel-release源。
  • 這裡需要注意的是我們選擇Mariadb替代MySQL。

  • 配置ALI雲源,安裝epel源:

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

  • 清除原有yum緩衝與重新緩衝yum元

yum clean all && yum makecache

安裝Mariadb
  • 在每一台伺服器上安裝Mariadb替代MySQL

yum -y install mariadb-server mariadb
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0

  • 配置每一台MySQL伺服器主設定檔

vim /etc/my.cnf

[mysqld]log_error=/var/lib/mysql/mysql.errlog=/var/lib/mysql/mysql_log.loglog_slow_queries=/var/lib/mysql_slow_queris.logbinlog-ignore-db=mysql,information_schemacharacter_set_server=utf8log_bin=mysql_binserver_id=1        //這裡需要區分每台伺服器ID需不同log_slave_updates=truesync_binlog=1auto_increment_increment=2auto_increment_offset=1
設定主主同步master1同步master2

mysql>show master status;

MariaDB [(none)]> show master status;+------------------+----------+--------------+--------------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |+------------------+----------+--------------+--------------------------+| mysql_bin.000001 |      577 |              | mysql,information_schema |+------------------+----------+--------------+--------------------------+1 row in set (0.00 sec)
  • 在m1上為m2授予從的許可權,在m2上也要為m1授予從的許可權

mysql>grant replication slave on . to ‘replication‘@‘192.168.144.%‘ identified by ‘123456‘; //兩台主都執行,從不需要

  • 設定相互同步,注意兩台主伺服器之間的位置參數

mysql>change master to master_host=‘192.168.144.145‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=577;
mysql>start slave; //主主之間開啟相互slave模式
mysql>flush privileges;
mysql>show slave status\G; //查看狀態

mater2同步master1
  • 操作步驟同上
設定主從同步
  • 兩台從伺服器只需要跟其中一台主伺服器同步,另外一台主伺服器也會自動同步。

mysql>change master to master_host=‘192.168.144.128‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=577;

mysql>start slave;

mysql>show slave status\G;

  • 主從同步此處不再贅述,詳細內容可參見MySQL主從同步服務詳解
在所有伺服器上安裝MySQL-MMM

yum -y install mysql-mmm*

  • 安裝完成後, 對MMM進行配置

cd /etc/mysql-mmm/
vi mmm_common.conf //所有主機上都要配置

  • 切記,對於每台安裝了MySQL-MMM的伺服器都需要配置位址集區
<host default>    cluster_interface       ens33    pid_path                /run/mysql-mmm-agent.pid    bin_path                /usr/libexec/mysql-mmm/    replication_user        replication         //MMM伺服器切換驗證    replication_password    123456    agent_user              mmm_agent           //MMM訪問資料庫代理驗證    agent_password          123456</host><host db1>                          //資料庫位址集區的設定    ip      192.168.144.128    mode    master    peer    db2</host><host db2>    ip      192.168.144.145    mode    master    peer    db1</host><host db3>    ip      192.168.144.141    mode    slave</host><host db4>    ip      192.168.144.129    mode    slave</host><role writer>                   //設定僅可在主伺服器上寫入    hosts   db1, db2    ips     192.168.144.200     //設定主伺服器虛擬IP    mode    exclusive</role><role reader>                   //設定僅可在從伺服器上讀取    hosts   db3, db4    ips     192.168.144.201, 192.168.144.202   //設定從伺服器虛擬IP    mode    balanced</role>
  • 按照上面的修改,為每一台伺服器確定db序號

vi /etc/mysql-mmm/mmm_agent.conf

this db1 //根據規划進行逐一調整
  • 在所有資料庫伺服器上為mmm_agent授權,方便故障點切換

mysql>grant super, replication client, process on . to ‘mmm_agent‘@‘192.168.144.%‘ identified by ‘123456‘;

  • 在所有資料庫上為mmm_moniter授權,讓monitor可以監控伺服器

mysql>grant replication client on . to ‘mmm_monitor‘@‘192.168.144.%‘ identified by ‘123456‘;

mysql>flush privileges;

  • 在所有資料庫伺服器上啟動MySQL-MMM服務

systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service 加入開機自啟動

在monitor上配置

cd /etc/mysql-mmm/ //改密碼

vi 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.128,192.168.144.145,192.168.144.141,192.168.144.129  //設定監控位址集區    auto_set_online     10   //設定自動上線時間10S······<host default>    monitor_user        mmm_monitor    monitor_password    123456</host>
  • 啟動監控服務

systemctl start mysql-mmm-monitor.service

  • 查看各伺服器狀態

mmm_control show

  • 顯示的均為設定好的虛擬IP
    [[email protected] mysql-mmm]# mmm_control showdb1(192.168.144.128) master/ONLINE. Roles: writer(192.168.144.200)db2(192.168.144.145) master/ONLINE. Roles: db3(192.168.144.141) slave/ONLINE. Roles: reader(192.168.144.202)db4(192.168.144.129) slave/ONLINE. Roles: reader(192.168.144.201)
故障測試停止m1 確認 虛擬位址 200 是否移動到 m2 上。注意:主不會搶佔
mmm_control show  db1(192.168.144.128) master/HARD_OFFLINE. Roles:  db2(192.168.144.145) master/ONLINE. Roles: writer(192.168.144.200)
在m1伺服器上為監控機地址授權登入

mysql>grant all on . to ‘testdba‘@‘192.168.144.136‘ identified by ‘123456‘;
flush privileges;

在監控伺服器上登入

mysql -utestdba -p -h 192.168.144.200 //虛擬位址

  • 建立資料,測試同步情況。

MySQL高可用群集--MMM高可用架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.