docker-mysql高可用負載均衡集羣

  1. 安裝docker
  2. 安裝PXC鏡像
docker pull percona/percona-xtradb-cluster
  1. 本地安裝PXC鏡像
docker load < /home/soft/pxc.tar.gz
  1. 查看docker安裝的鏡像
docker images
  1. 修改鏡像名稱
docker tag percona/percona-xtradb-cluster pxc
  1. 刪除鏡像
docker rmi percona/percona-xtradb-cluster
  1. 給PXC集羣實例創建docker內部網絡
docker network net1
  • 查看
docker inspect net1
  • 刪除
docker rm net1
  • 創建網段
docker network create --subnet=172.18.0.0/24 net1
  • 查看網段
docker inspect net1
  • 刪除網段
docker network rm net1
  1. 容器中的PXC節點映射數據目錄的解決方案
    數據券v1
docker volume create --name v1
  • 查看數據券
docker inspect v1
  • 刪除數據券
docker volume rm v1
  1. 創建PXC容器
    -d 後臺運行
    -p端口映射
    3306:3306 數據機的端口L:容器端口
    -v路徑的映射
    -e 啓動參數
    –privileged 最高權限
    -e CLUSTER_JOIN 加入集羣
  • 主容器
docker run -d -p 3306:3306  -v v1:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=sqlpass  -e CLUSTER_NAME=PXC  -e XTRABACKUP_PASSWORD=sqlpass  --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc 
  • 副容器
docker run -d -p 3307:3306  -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=sqlpass  -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=sqlpass -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc

負載均衡配置

截屏2020-03-26下午5.03.20.png
截屏2020-03-26下午5.03.27.png

  1. 安裝Haproxy鏡像
docker pull haproxy
  • 創建Haproxy配置文件,宿主機
touch /home/soft/haproxy/haproxy.cfg

配置文件詳情參考
https://zhangge.net/5125.html

global
    #日誌文件,使用rsyslog服務中local5日誌設備(var/log/local5),等級info
    log 127.0.0.1   local5 info
    #守護進程運行
    daemon

defaults
   log     global
   #7層 http;4層tcp  如果要讓haproxy支持虛擬主機,mode 必須設爲http 
   mode    http
   #http 日誌格式
   option  httplog
   #日誌中不記錄負載均衡的心跳檢測記錄
   option  dontlognull
   #連接超時(毫秒)
   timeout connect      5000
   #客戶端超時(毫秒)
   timeout client      50000 
   #服務器超時(毫秒)
   timeout server     50000

#監控頁面
listen admin_stats
    #監控頁面的訪問的IP和端口
    bind 0.0.0.0:8888
    #訪問協議
    mode http
    #URI相對地址
    stats uri	/dbs
    #統計報告格式
    stats realm		Global\ statistics
    #登錄賬戶信息
    stats auth admin:admin

#數據庫負載均衡
listen proxy-mysql
	#訪問的IP和端口
	bind 0.0.0.0:3306
	#網絡協議
	mode tcp
	#負載均衡算法(輪詢算法)
	#輪詢算法:roundrobin
	#權重算法: static-rr
	#最少連接算法: leastconn
	#請求源IP算法: source
	balance roundrobin
	#日誌格式
	option	tcplog
	#在mysql中創建一個沒有權限的haproxy用戶,密碼爲空。haproxy使用這個賬戶對mysql進行心跳檢測
	option mysql-check user haproxy
	server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000
	server MySQL_3 172.18.0.3:3306 check weight 1 maxconn 2000
	#使用keepalive檢測死鏈
	option tcpka
  • 創建Haproxy容器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
  • 進入容器
docker exec -it h1 bash
  • 啓動容器,加載容器內的配置文件
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
  • 在主數據庫創建haproxy數據庫賬號
create user 'haproxy'@'%' IDENTIFIED BY '';
  • 在遊覽器登錄haproxy監控頁面
    192.168.99.4001/dbs
  • 關閉數據節點
docker stop node1
  • 通過haproxy隨機連接到任意數據庫節點 4002端口

負載均衡的高可用配置

截屏2020-03-26下午5.02.14.png

  1. 安裝Keepalived
    Keepalived必須要安裝在Haproxy所在的容器之內
  • 進入Haproxy容器
docker exec -it h1 bash
  • 安裝Haproxy
apt-get update
apt-get install keepalived
  • 退出容器
exit

keepalived的配置文件是 /etc/keepalived/keepalived.conf
在容器內安裝vim

apt-get install vim
vim /etc/keepalived/keepalived.conf

keepalived配置文件

vrrp_instance VI_1{
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication{
        auth_type PASS
        auth_pass sqlpass
    }
    virtual_ipaddress{
        172.18.0.201
    }
}

state 是keepalived的身份(MASTER主服務,BACKUP備服務器)。主服務要搶佔虛擬IP,備用服務器不會搶佔IP
interface 網卡設備
virtual_router_id 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。標識可以是 0 ~ 255
priority 權重
advert_int 心跳檢測秒,MASTER與BACKUP節點間同步檢查的時間間。主備之間必須一致。
authentication 主從服務器驗證方式。主備必須使用相同的密碼才能正常通信
virtual_ipaddress 虛擬IP地址,可以設置多個虛擬IP地址,每行一個

  • 啓動keepalived
service keepalived start

宿主機可以ping通虛擬IP

ping 172.18.0.201
  1. 全量數據熱備份和全量數據冷還原
  • 創建數據券
docker volume create backup
  • 選擇數據節點映射數據券
    • 先停止節點
docker stop node1
  • 刪除node1重新創建
docker rm node1
  • 創建node1
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=sqlpass -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=sqlpass -v v1:/var/lib/mysql -v backup:/data --privileged -e CLUSTER_JOIN=node2 --name=node1 --net=net1 --ip 172.18.0.2 pxc 
  • PXC容器中安裝XtraBackup,並執行備份
    進入節點
docker exec -it node1 bash

執行

apt-get update
apt-get install percona-xtrabackup-24

全量備份

innobackupex --user=root --password=sqlpass /data/backup/full

容器內備份數據

/data/backup/full
退出容器
exit
查看數據券目錄
docker inspect backup
進入備份目錄

  • 數據庫可以熱備份,但是不能熱還原。爲了避免恢復過程中的數據同步,採用空白的mysql還原數據,然後再建立PXC集羣
  • 冷還原數據,還原數據前要將未提交的事物回滾,還原數據之後重啓mysql
  • 指令
rm -rf /var/lib/mysql/*

事務回滾

innobackupex --user=root --password=sqlpass --apply-back /data/backup/full/2018-04-15_05-09-07/

全量數據冷還原

innobackupex --user=root --password=sqlpass --copy-back /data/backup/full/2018-04-15_05-09-07/
  • 具體冷還原流程
    停止所有PXC節點
docker stop node1 node2

刪除所有PXC節點

docker rm node1 node2

刪除映射的數據券

docker volume rm v1 v2

創建新的數據券v1

docker volume create v1

啓動一個PXC節點

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=sqlpass  -e CLUSTER_NAME=PXC  -e XTRABACKUP_PASSWORD=sqlpass -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc 

進入node1節點

docker exec -it node1 bash

執行冷還原命令

rm -rf /var/lib/mysql/*

事務回滾

innobackupex --user=root --password=sqlpass --apply-back /data/backup/full/2018-04-15_05-09-07/

全量數據冷還原

innobackupex --user=root --password=sqlpass --copy-back /data/backup/full/2018-04-15_05-09-07/

退出容器重啓節點

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