MySql主從複製,讀寫分離—基於Docker+Atlas實現

前言

 自備docker環境,可參考我之前的博客。

一、流程

二、環境

IP 服務
106.13.147.84(A) master(主mysql)
106.13.50.149(B) slave(從mysql)+ atlas (代理服務)

三、搭建主從環境

  1、搭建主節點

 在A中安裝mysql,docker 一條命令即可。

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7

 進入容器中,修改配置

 

#進入容器
docker exec -it mysql /bin/bash

#登陸mysql
mysql -uroot -proot

#開啓遠程訪問
grant all privileges on *.* to root@"%" identified by "root" with grant option;

#刷新
flush privileges;

在容器中是沒有vim的,所以要先安裝vim

#先更新
apt-get update

#在安裝
apt-get install vim

  修改 mysql.conf配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

 添加兩行

重啓容器,在windows上連接該數據庫

執行如下SQL

 

 注意 記錄二進制文件名(mysql-bin.000001)和位置(767)等會要用到的

  2、搭建從節點

在B如上配置,mysqld.conf配置文件中只需要配置server-id即可,注意要唯一!

重啓後在windows上連接該數據庫

Slave_IO_Running列和Slave_SQL_Running列的值爲yes即可

主從到此已搭建完畢,可自行測試。

四、配置Atlas

先在B中創建目錄

/usr/local/mysql-proxy/conf

 創建配置文件

vim test.conf

 內容

[mysql-proxy]

#帶#號的爲非必需的配置項目

#管理接口的用戶名
admin-username = root

#管理接口的密碼
admin-password = root

#Atlas後端連接的MySQL主庫的IP和端口,可設置多項,用逗號分隔
proxy-backend-addresses = 106.13.147.84:3306

#Atlas後端連接的MySQL從庫的IP和端口,@後面的數字代表權重,用來作負載均衡,若省略則默認爲1,可設置多項,用逗號分隔
proxy-read-only-backend-addresses = 106.13.50.149:3306@1

#用戶名與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,下行的user1和user2爲示例,將其替換爲你的MySQL的用戶名和加密密碼
!
#pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=
pwds = root:DAJnl8cVzy8=

#設置Atlas的運行方式,設爲true時爲守護進程方式,設爲false時爲前臺方式,一般開發調試時設爲false,線上運行時設爲true,true後面不能有空格。
daemon = true

#設置Atlas的運行方式,設爲true時Atlas會啓動兩個進程,一個爲monitor,一個爲worker,monitor在worker意外退出後會自動將其重啓,設爲false時只有worker,
沒有monitor,一般開發調試時設爲false,線上運行時設爲true,true後面不能有空格。
keepalive = true

#工作線程數,對Atlas的性能有很大影響,可根據情況適當設置
event-threads = 8

#日誌級別,分爲message、warning、critical、error、debug五個級別
log-level = message
#日誌存放的路徑
log-path = /usr/local/mysql-proxy/log

#SQL日誌的開關,可設置爲OFF、ON、REALTIME,OFF代表不記錄SQL日誌,ON代表記錄SQL日誌,REALTIME代表記錄SQL日誌且實時寫入磁盤,默認爲OFF
sql-log = REALTIME

#慢日誌輸出設置。當設置了該參數時,則日誌只輸出執行時間超過sql-log-slow(單位:ms)的日誌記錄。不設置該參數則輸出全部日誌。
#sql-log-slow = 10

#實例名稱,用於同一臺機器上多個Atlas實例間的區分
instance = test

#Atlas監聽的工作接口IP和端口
proxy-address = 0.0.0.0:1234

#Atlas監聽的管理接口IP和端口
admin-address = 0.0.0.0:2345

#分表設置,此例中person爲庫名,mt爲表名,id爲分表字段,3爲子表數量,可設置多項,以逗號分隔,若不分表則不需要設置該項
#tables = person.mt.id.3

#默認字符集,設置該項後客戶端不再需要執行SET NAMES語句
charset = utf8

#允許連接Atlas的客戶端的IP,可以是精確IP,也可以是IP段,以逗號分隔,若不設置該項則允許所有IP連接,否則只允許列表中的IP連接
#client-ips = 127.0.0.1, 192.168.1

#Atlas前面掛接的LVS的物理網卡的IP(注意不是虛IP),若有LVS且設置了client-ips則此項必須設置,否則可以不設置
#lvs-ips = 192.168.1.1

 注意加密的密碼:註釋上寫的很詳細,待會進入容器後生成再改

安裝Atlas並啓動容器並進入容器

docker run -it --name atlas -v /usr/local/mysql-proxy/conf:/usr/local/mysql-proxy/conf -p 1234:1234 -p 2345:2345  mybbcat/docker-360atlas /bin/bash

可以去mysql-proxy/bin目錄中使用 encrypt 進行加密

./encrypt root

得到返回值然後。。。沒錯,出去修改配置文件。。

最好把容器刪除再重新執行run ,

進入/usr/local/mysql-proxy/bin目錄,執行下面的命令啓動、重啓或停止Atlas。

./mysql-proxyd test start      #啓動Atlas。

./mysql-proxyd test restart    #重啓Atlas。

./mysql-proxyd test stop       #停止Atlas。

之後退出,注意查看docker ps 容器中是否啓動成功了,如果沒有,則使用docker start 容器名字 啓動,測試外部是否能連接上1234端口,如不能則進入容器中自己手動啓動atlas.

五、測試

執行SQL

在B中進入Atlas容器中查看日誌

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