- 安裝docker
- 安裝PXC鏡像
docker pull percona/percona-xtradb-cluster
- 本地安裝PXC鏡像
docker load < /home/soft/pxc.tar.gz
- 查看docker安裝的鏡像
docker images
- 修改鏡像名稱
docker tag percona/percona-xtradb-cluster pxc
- 刪除鏡像
docker rmi percona/percona-xtradb-cluster
- 給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
- 容器中的PXC節點映射數據目錄的解決方案
數據券v1
docker volume create --name v1
- 查看數據券
docker inspect v1
- 刪除數據券
docker volume rm v1
- 創建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
負載均衡配置
- 安裝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端口
負載均衡的高可用配置
- 安裝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
- 全量數據熱備份和全量數據冷還原
- 創建數據券
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