MMM+Amoeba搭建MySQL高可用負載平衡群集

來源:互聯網
上載者:User

標籤:ntp.conf   實驗   利用   char   mct   pes   原理   data   size   

MySQL的主從複製和MySQL的讀寫分離兩者有著緊密聯絡,首先要部署主從複製,只有主從複製完成了,才能在此基礎上進行資料的讀寫分離。MySQL的讀寫分離就是只在主伺服器上寫,只在從伺服器上讀。基本原理就是讓主要資料庫處理事務性查詢,而從伺服器處理select查詢。資料庫複寫被用來事務性查詢導致的變更同步到群集中的從資料庫。
Amoeba主要為應用程式層訪問MySQL時充當sql路由,並具有負載平衡、高可用性、SQL過濾、讀寫分離、可路由相關到目標資料庫、可並發請求多台資料庫。通過Amoeba能夠完成資料來源的高可用、負載平衡和資料切片等功能。
MMM(MySQL主主複製管理器)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一台備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,可以說MMM這套指令碼程式一方面實現了故障切換的功能,另一方面其內部附加的工具指令碼也可以實現多個Slave的read負載平衡。

amooeba在實際使用中存在單點故障的問題,所以在學習了MMMM之後,我就嘗試了使用mmm+amoeba的架構來避免主庫的單點故障,接下來我就為大家在虛擬機器上類比服務的搭建過程

項目環境
  • 使用六台伺服器類比搭建,拓撲圖如下:
  • 虛擬機器規劃
主機 作業系統 IP地址 VIP 主要軟體
Master1 CentOS-7 192.168.100.101 192.168.100.200 mysql-5.7、mysql-mmm
Master1 CentOS-7 192.168.100.102 192.168.100.200 mysql-5.7、mysql-mmm
Slave1 CentOS-7 192.168.100.111 192.168.100.166 mysql-5.7、mysql-mmm
Slave2 CentOS-7 192.168.100.112 192.168.100.188 mysql-5.7、mysql-mmm
Amoeba CentOS-7 192.168.100.130 jdk、amoeba、mysql
MMM CentOS-7 192.168.100.120 mysql-mmm
項目實施安裝MySQL

本次實驗中我所使用的MySQL版本為MySQL5.7,有關於mysql5.7的安裝方式,請參考Centos7中編譯安裝MySQL(mysql-5.7)

搭建MySQL-MMM雙主雙從架構

之前我有寫過一篇MariaDB-MMM高可用群集,MariaDB與MySQL同屬一脈。MariaDB是完全相容MySQL的,包括API和命令列,使其能輕鬆成為MySQL的代替品,所以有關於MMM的搭建方式自然也是一樣的,請參考前文。
經過本人手動測試,方法都是共通的,關於搭建MySQL-MMM架構與MariaDB-MMM唯一的不同點就是/etc/my.cnf設定檔的修改.[mysqld]修改為如下內容。

[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket = /usr/local/mysql/mysql.sockserver-id = 1binlog-ignore-db=mysql,information_schemalog_bin=mysql_binlog_slave_updates=truesync_binlog=1auto_increment_increment=2auto_increment_offset=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
搭建MySQL讀寫分離

MySQL的主從複製在搭建MMM架構時已經完成,此時我們只需要利用Amoeba搭建讀寫分離即可。

建立時間同步建立時間同步環境,在Master1上搭建時間同步伺服器
yum -y install ntp
配置NTP伺服器

修改ntp設定檔,添加配置。

vim /etc/ntp.confserver 127.127.100.0      //本地是時鐘源,本地地址為192.168.100.101,此處地址則也為100段fudge 127.127.100.0 stratum 8   //stratum 8 時間層級為8(限制在15內)
關閉防火牆
systemctl disable firewalld.service systemctl stop firewalld.servicesetenforce 0
啟動服務
systemctl start ntpd
在master2、slave1、slave2上進行時間同步
yum -y install ntp ntpdate            //若是使用centos7系統,一般都已預設安裝systemctl stop firewalld.servicesetenforce 0systemctl start ntpd                  //三台伺服器的建立方式一致/usr/sbin/ntpdate 192.168.100.101     //與主伺服器進行時間同步,IP地址為主伺服器地址

搭建Amoeba伺服器關閉防火牆及selinux
systemctl stop firewalld.servicesetenforce 0
安裝環境(jdk1.6)
cp /opt/jdk-6u14-linux-x64.bin /usr/local/cd /usr/local./jdk-6u14-linux-x64.binmv jdk1.6.0_14/ /usr/local/jdk1.6
設定環境變數
#vim /etc/profileexport JAVA_HOME=/usr/local/jdk1.6export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/binexport AMOEBA_HOME=/usr/local/amoebaexport PATH=$PATH:$AMOEBA_HOME/bin#source /etc/profile       //重新整理使環境變數立即生效
安裝amoeba
tar zxf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba        chmod -R 755 /usr/local/amoeba/        //解壓即完成安裝/usr/local/amoeba/bin/amoeba           //測試amoeba是否安裝成功

在MySQL上為Amoeba授權

這裡授權的賬戶和密碼是方便amoeba串連後台資料庫所設定的密碼,只需授權一主兩從即可,雙主之間是相互複製的,資料都會完全同步。使用者名稱和密碼自訂。

mysql>grant all on *.* to [email protected]‘192.168.100.%‘ identified by ‘123123‘;
配置Amoeba伺服器修改/usr/local/amoeba/conf/amoeba.xml
<property name="user">amoeba</property><property name="password">123456</property>     //訪問amoeba的賬戶和密碼<property name="defaultPool">master</property><property name="writePool">master</property><property name="readPool">slaves</property>


修改/usr/local/amoeba/conf/dbServers.xml
  • 修改的是Amoeba訪問資料庫的使用者名稱和密碼,因為系統預設的使用者是test,當你不使用預設帳號時,就需要對預設帳號進行注釋,或者修改為“mysql”
    <!-- mysql schema --><property name="schema">mysql</property>   //修改或者直接刪除<!-- mysql user --><property name="user">chen</property><property name="password">123123</property>

  • 設定資料庫伺服器地址
    <dbServer name="master"  parent="abstractServer">   //資料庫名稱master<factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.100.200</property>  //此處填寫的為VIP地址,方便故障切換</factoryConfig></dbServer><dbServer name="slave1"  parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.100.166</property>   //slave1,地址為vip地址</factoryConfig></dbServer><dbServer name="slave2"  parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.100.188</property>   //slave2,地址為VIP地址</factoryConfig></dbServer><dbServer name="slaves" virtual="true">     //讀資料庫池<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property>     //1 代表輪詢<!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">slave1,slave2</property>   //包括slave1,slave2

    啟動Amoeba
    /usr/local/amoeba/bin/amoeba start&netstat -anpt | grep java

    測試可用性安裝mysql用戶端
    yum install -y mysql
    登陸測試測試是否正常訪問
    mysql -u amoeba -p123456 -h 192.168.100.130 -P8066  //IP地址為amoeba伺服器位址show databases;

    測試資料是否同步
    use pythoncreate table java (id int,name varchar(10),sorce decimal(5,2));  //在python庫中建立java表

    登陸各台伺服器,python庫中的Java表都存在,則表明雙主雙重同步成功

    測試讀寫分離
    insert into java (id,name,sorce) values (1,‘master‘,1);//在master1表中插入一條資料insert into java (id,name,sorce) values (2,‘slave1‘,2);//在slave1表中插入一條資料insert into java (id,name,sorce) values (3,‘slave2‘,3);//在slave2表中插入一條資料mysql -u amoeba -p123456 -h 192.168.100.130 -P8066use pythonselect * from java;     //登陸amoeba查看資料庫中資料

    測試單點故障
    systemctl stop mysqld    //關閉master1

    VIP 發生遷移

MMM+Amoeba搭建MySQL高可用負載平衡群集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.