Mysql主從同步+讀寫分離(centos7)

1、數據庫主從同步

2、amoeba proxy實現讀寫分離

實驗環境:

    Web:    192.168.1.14

    Mysql_proxy:      192.168.1.16

    Mysql_master:    192.168.1.18

    Mysql_slave:       192.168.1.2


主從同步

本地已經搭建好wordpress,搭建過程比較簡單,在此文略過。

圖片.png

每次實驗第一件事,時間同步!(略)



開啓主庫的binlog功能:
    vim /etc/my.cnf
        server-id = 1    #主從的id必須是唯一!
        log-bin = mybinlog

圖片.png


在主庫對從庫授權:
MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123123';
MariaDB [(none)]> flush privileges;

圖片.png


將主庫同步前的數據進行全備到從庫:
    首先要鎖庫!!!

    爲了防止在同步時有人對數據庫進行寫數據!!!

MariaDB [(none)]> flush tables with read lock;

圖片.png


systemctl restart mariadb  //重啓數據庫 不重啓日誌文件位置不會生成出來!

重啓過後進入數據庫查看binlog文件名與位置(從庫同步主庫需要這兩個參數!)

MariaDB [(none)]> show master status;

圖片.png


數據庫全備:

[root@mysql-master ~]# mysqldump -uroot -p -A --events > backup.sql

圖片.png



將備份的數據庫傳輸到從服務器:

[root@mysql-master ~]# scp backup.sql [email protected]:/root/

圖片.png


修改從庫id:

圖片.png



導入從庫:

[root@mysql-slave ~]# systemctl start mariadb
[root@mysql-slave ~]# mysql < backup.sql

圖片.png


進行主從複製配置:

MariaDB [(none)]> change master to \
    -> master_host = '192.168.1.18',
    -> master_port = 3306 ,
    -> master_user = 'slave' ,
    -> master_password = '123123' ,
    -> master_log_file = 'mybinlog.000001' ,
    -> master_log_pos = 245 ;
Query OK, 0 rows affected (0.01 sec)

圖片.png


開啓主從同步:

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> show slave status\G

圖片.png


解鎖主庫:

圖片.png



查看主從服務器數據庫文件:

主從同步成功!

圖片.png

圖片.png

主從配置步驟:
a)準備兩臺數據庫環境(多臺設備,用mysql多實例),確定能否正常啓動運行
b)配置my.cnf文件,主控配置binlog和serverid ,從庫配置serverid參數(不能和主庫一致),一般從庫不開啓binlog的(注意:配置參數必須重啓才生效)
c)登錄主庫增加用於從庫連接主庫同步的賬戶(授權),且授權replication slave權限
d)登錄主庫, 整庫鎖表 show master status進行查看binlog的位置狀態
e)Linux命令行備份(mysqldump),將數據拷貝到從庫上
f)解鎖主庫
g)把主庫已有數據導入到從庫,根據主庫獲取到的binlog的位置進行從庫同步change master to
h)開啓從庫同步 start slave
i)從庫show slave status,用於檢測同步狀態,並在主庫去測試




amoeba proxy實現讀寫分離


        Amoeba是一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。

        Amoeba相當於一個SQL請求的路由器,目的是爲負載均衡、讀寫分離、高可用性提供機制,而不是完全實現它們。用戶需要結合使用MySQL的 Replication等機制來實現副本同步等功能。


JDK下載地址:https://www.lanzous.com/i1zcztc

Amoeba下載地址:https://www.lanzous.com/i1zcvuj

圖片.png



安裝JDK:

[root@LB ~]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@LB ~]# cd /usr/local/

[root@LB local]# ls

bin  etc  games  include  jdk1.6.0_14  jdk-6u14-linux-x64.bin  lib  lib64  libexec  sbin  share  src

[root@LB ~]# chmod a+x jdk-6u14-linux-x64.bin

[root@LB ~]# ./jdk-6u14-linux-x64.bin  //安裝的時候會有個協議,一直翻到最下面然後 輸入 yes 開始安裝

圖片.png


做個軟連接:(看個人習慣,可以不做)

[root@LB local]# ln -s jdk1.6.0_14/  jdk1.6

圖片.png


添加系統環境變量:

[root@LB ~]# 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

圖片.png


重新讀取生效/etc/profile

[root@LB ~]# source /etc/profile

圖片.png



二進制安裝amoeba:

[root@LB ~]# mkdir /usr/local/amoeba
[root@LB ~]# chmod 775 /usr/local/amoeba

[root@LB ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/    //解壓二進制安裝文件 不需要安裝 解壓就能用!!!

[root@LB amoeba]# bin/amoeba
amoeba start|stop


在mysql server上給amoebe權限,amoeba將以這個身份登錄mysql:

MariaDB [(none)]> grant all on *.* to "amoeba"@"192.168.1.%" identified by "123123";
MariaDB [(none)]> flush privileges;

圖片.png


修改amoeba主配置文件:

[root@LB ~]# vim /usr/local/amoeba/conf/amoeba.xml

---30行--
 <property name="user">amoeba</property>
----32行---------
 <property name="password">123123</property>            //提供客戶端連接amoeba時需要使用這裏設定的賬號

(這裏的賬號密碼和amoeba連接後端數據庫服務器的密碼無關)

---117-去掉註釋-
 <property name="defaultPool">master</property>   //默認數據庫池爲master


 <property name="writePool">master</property>   //設置可寫入數據池的服務器爲master
 <property name="readPool">slaves</property>    //設置可讀數據庫服務器池爲slaves

圖片.png

圖片.png



配置amoeba訪問數據庫配置文件

[root@LB ~]# vim /usr/local/amoeba/conf/dbServers.xml

                        <!-- mysql port -->
                        <property name="port">3306</property>

                        <!-- mysql schema -->
                        <property name="schema">wordpress</property>   //配置默認的缺省數據庫(這個數據庫就是後端指定的庫)

                        <!-- mysql user -->
                        <property name="user">amoeba</property>  //設置amoeba連接後端數據庫服務器的賬號和密碼,在所有後端數據庫上創建該用戶,並授權amoeba服務器可連接
                        <!--  mysql password -->
                        <property name="password">123123</property>

____________________________________________________________________________________   

     <dbServer name="master"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.1.18</property>
                </factoryConfig>
        </dbServer>

        <dbServer name="slave1"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.1.2</property>
                </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>

                        <!-- Separated by commas,such as: server1,server2,server1 -->
                        <property name="poolNames">slave1</property>   //這裏定義slaves池中的所有成員
                </poolConfig>

    圖片.png圖片.png



啓動amoeba服務:

            [root@LB ~]# /usr/local/amoeba/bin/amoeba start

圖片.png

            [root@LB ~]# netstat -anpt | grep java

圖片.png



將web數據庫中的數據庫連接地址改成amoeba代理的地址,端口改爲8066:

[root@WEB ~]# vim /var/www/html/wp-config.php
[root@WEB ~]# systemctl restart httpd

圖片.png

成功!

圖片.png



還可以通過下面的方法來驗證amoeba代理是否成功

[root@mysql-master ~]# mysql -h192.168.1.16 -uroot -p -P8066  //-P 通過amoeba的8066端口代理到後端數據庫的3306

圖片.png





總結:其實amoeba是自帶數據庫同步的,不需要手動配置的同步數據庫,但是會手動配置同步很重要!

注意在第一次同步後,在從服務器上是沒有寫的權限的!!!

實驗過程很艱難,如有錯誤,還請各位大佬指點!感謝!







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章