MMM+Amoeba搭建MySQL高可用負載均衡羣集

MySQL的主從複製和MySQL的讀寫分離二者有着緊密聯繫,首先要部署主從複製,只有主從複製完成了,才能在此基礎上進行數據的讀寫分離。MySQL的讀寫分離就是隻在主服務器上寫,只在從服務器上讀。基本原理就是讓主數據庫處理事務性查詢,而從服務器處理select查詢。數據庫複製被用來事務性查詢致使的變動同步到羣集中的從數據庫。
Amoeba主要爲應用層訪問MySQL時充當sql路由,並具備負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關到目標數據庫、可併發請求多臺數據庫。經過Amoeba可以完成數據源的高可用、負載均衡和數據切片等功能。
MMM(MySQL主主複製管理器)是一套支持雙主故障切換和雙主平常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫作雙主複製,可是業務上同一時刻只容許對一個主進行寫入,另外一臺備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,能夠說MMM這套腳本程序一方面實現了故障切換的功能,另外一方面其內部附加的工具腳本也能夠實現多個Slave的read負載均衡。java

amooeba在實際使用中存在單點故障的問題,因此在學習了MMMM以後,我就嘗試了使用mmm+amoeba的架構來避免主庫的單點故障,接下來我就爲你們在虛擬機上模擬服務的搭建過程python

項目環境

  • 使用六臺服務器模擬搭建,拓撲圖以下:
    MMM+Amoeba搭建MySQL高可用負載均衡羣集
  • 虛擬機規劃
主機 操做系統 IP地址 VIP 主要軟件
Master1 CentOS-7 192.168.100.101 192.168.100.200 mysql-5.七、mysql-mmm
Master1 CentOS-7 192.168.100.102 192.168.100.200 mysql-5.七、mysql-mmm
Slave1 CentOS-7 192.168.100.111 192.168.100.166 mysql-5.七、mysql-mmm
Slave2 CentOS-7 192.168.100.112 192.168.100.188 mysql-5.七、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

搭建MySQL-MMM雙主雙從架構

以前我有寫過一篇MariaDB-MMM高可用羣集,MariaDB與MySQL同屬一脈。MariaDB是徹底兼容MySQL的,包括API和命令行,使其能輕鬆成爲MySQL的代替品,因此有關於MMM的搭建方式天然也是同樣的,請參考前文。
通過本人手動測試,方法都是共通的,關於搭建MySQL-MMM架構與MariaDB-MMM惟一的不一樣點就是/etc/my.cnf配置文件的修改.[mysqld]修改成以下內容。linux

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
binlog-ignore-db=mysql,information_schema
log_bin=mysql_bin
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
sql_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搭建讀寫分離便可。sql

創建時間同步

創建時間同步環境,在Master1上搭建時間同步服務器

yum -y install ntp

配置NTP服務器

修改ntp配置文件,添加配置。數據庫

vim /etc/ntp.conf
server 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.service
setenforce 0

啓動服務

systemctl start ntpd

在master二、slave一、slave2上進行時間同步

yum -y install ntp ntpdate            //如果使用centos7系統,通常都已默認安裝
systemctl stop firewalld.service
setenforce 0
systemctl start ntpd                  //三臺服務器的建立方式一致
/usr/sbin/ntpdate 192.168.100.101     //與主服務器進行時間同步,IP地址爲主服務器地址

MMM+Amoeba搭建MySQL高可用負載均衡羣集

搭建Amoeba服務器

關閉防火牆及selinux

systemctl stop firewalld.service
setenforce 0

安裝環境(jdk1.6)

cp /opt/jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local
./jdk-6u14-linux-x64.bin
mv jdk1.6.0_14/ /usr/local/jdk1.6

設置環境變量

#vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export 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是否安裝成功

MMM+Amoeba搭建MySQL高可用負載均衡羣集

在MySQL上爲Amoeba受權

這裏受權的帳戶和密碼是方便amoeba鏈接後臺數據庫所設置的密碼,只需受權一主兩從便可,雙主之間是相互複製的,數據都會徹底同步。用戶名和密碼自定義。vim

mysql>grant all on *.* to chen@'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>

MMM+Amoeba搭建MySQL高可用負載均衡羣集
MMM+Amoeba搭建MySQL高可用負載均衡羣集

修改/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>

    MMM+Amoeba搭建MySQL高可用負載均衡羣集

  • 設置數據庫服務器地址
    <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

    MMM+Amoeba搭建MySQL高可用負載均衡羣集

    啓動Amoeba

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

    MMM+Amoeba搭建MySQL高可用負載均衡羣集

    測試可用性

    安裝mysql客戶端

    yum install -y mysql

    登錄測試

    測試是否正常訪問

    mysql -u amoeba -p123456 -h 192.168.100.130 -P8066  //IP地址爲amoeba服務器地址
    show databases;

    MMM+Amoeba搭建MySQL高可用負載均衡羣集

    測試數據是否同步

    use python
    create table java (id int,name varchar(10),sorce decimal(5,2));  //在python庫中建立java表

    登錄各臺服務器,python庫中的Java表都存在,則代表雙主雙重同步成功
    MMM+Amoeba搭建MySQL高可用負載均衡羣集centos

    測試讀寫分離

    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 -P8066
    use python
    select * from java;     //登錄amoeba查看數據庫中數據

    MMM+Amoeba搭建MySQL高可用負載均衡羣集

    測試單點故障

    systemctl stop mysqld    //關閉master1

    VIP 發生遷移
    MMM+Amoeba搭建MySQL高可用負載均衡羣集服務器

相關文章
相關標籤/搜索