- 安裝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集群實(shí)例創(chuàng)建docker內(nèi)部網(wǎng)絡(luò)
docker network net1
- 查看
docker inspect net1
- 刪除
docker rm net1
- 創(chuàng)建網(wǎng)段
docker network create --subnet=172.18.0.0/24 net1
- 查看網(wǎng)段
docker inspect net1
- 刪除網(wǎng)段
docker network rm net1
- 容器中的PXC節(jié)點(diǎn)映射數(shù)據(jù)目錄的解決方案
數(shù)據(jù)券v1
docker volume create --name v1
- 查看數(shù)據(jù)券
docker inspect v1
- 刪除數(shù)據(jù)券
docker volume rm v1
- 創(chuàng)建PXC容器
-d 后臺(tái)運(yùn)行
-p端口映射
3306:3306 數(shù)據(jù)機(jī)的端口L:容器端口
-v路徑的映射
-e 啟動(dòng)參數(shù)
--privileged 最高權(quán)限
-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
負(fù)載均衡配置
- 安裝Haproxy鏡像
docker pull haproxy
- 創(chuàng)建Haproxy配置文件,宿主機(jī)
touch /home/soft/haproxy/haproxy.cfg
配置文件詳情參考
https://zhangge.net/5125.html
global
#日志文件漆弄,使用rsyslog服務(wù)中l(wèi)ocal5日志設(shè)備(var/log/local5),等級(jí)info
log 127.0.0.1 local5 info
#守護(hù)進(jìn)程運(yùn)行
daemon
defaults
log global
#7層 http;4層tcp 如果要讓haproxy支持虛擬主機(jī)弧械,mode 必須設(shè)為http
mode http
#http 日志格式
option httplog
#日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄
option dontlognull
#連接超時(shí)(毫秒)
timeout connect 5000
#客戶端超時(shí)(毫秒)
timeout client 50000
#服務(wù)器超時(shí)(毫秒)
timeout server 50000
#監(jiān)控頁(yè)面
listen admin_stats
#監(jiān)控頁(yè)面的訪問(wèn)的IP和端口
bind 0.0.0.0:8888
#訪問(wèn)協(xié)議
mode http
#URI相對(duì)地址
stats uri /dbs
#統(tǒng)計(jì)報(bào)告格式
stats realm Global\ statistics
#登錄賬戶信息
stats auth admin:admin
#數(shù)據(jù)庫(kù)負(fù)載均衡
listen proxy-mysql
#訪問(wèn)的IP和端口
bind 0.0.0.0:3306
#網(wǎng)絡(luò)協(xié)議
mode tcp
#負(fù)載均衡算法(輪詢算法)
#輪詢算法:roundrobin
#權(quán)重算法: static-rr
#最少連接算法: leastconn
#請(qǐng)求源IP算法: source
balance roundrobin
#日志格式
option tcplog
#在mysql中創(chuàng)建一個(gè)沒(méi)有權(quán)限的haproxy用戶,密碼為空。haproxy使用這個(gè)賬戶對(duì)mysql進(jìn)行心跳檢測(cè)
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檢測(cè)死鏈
option tcpka
- 創(chuàng)建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
- 進(jìn)入容器
docker exec -it h1 bash
- 啟動(dòng)容器,加載容器內(nèi)的配置文件
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
- 在主數(shù)據(jù)庫(kù)創(chuàng)建haproxy數(shù)據(jù)庫(kù)賬號(hào)
create user 'haproxy'@'%' IDENTIFIED BY '';
- 在游覽器登錄haproxy監(jiān)控頁(yè)面
192.168.99.4001/dbs - 關(guān)閉數(shù)據(jù)節(jié)點(diǎn)
docker stop node1
- 通過(guò)haproxy隨機(jī)連接到任意數(shù)據(jù)庫(kù)節(jié)點(diǎn) 4002端口
負(fù)載均衡的高可用配置
- 安裝Keepalived
Keepalived必須要安裝在Haproxy所在的容器之內(nèi)
- 進(jìn)入Haproxy容器
docker exec -it h1 bash
- 安裝Haproxy
apt-get update
apt-get install keepalived
- 退出容器
exit
keepalived的配置文件是 /etc/keepalived/keepalived.conf
在容器內(nèi)安裝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主服務(wù),BACKUP備服務(wù)器)攻锰。主服務(wù)要搶占虛擬IP,備用服務(wù)器不會(huì)搶占IP
interface 網(wǎng)卡設(shè)備
virtual_router_id 虛擬路由標(biāo)識(shí)妓雾,MASTER和BACKUP的虛擬路由標(biāo)識(shí)必須一致娶吞。標(biāo)識(shí)可以是 0 ~ 255
priority 權(quán)重
advert_int 心跳檢測(cè)秒,MASTER與BACKUP節(jié)點(diǎn)間同步檢查的時(shí)間間械姻。主備之間必須一致妒蛇。
authentication 主從服務(wù)器驗(yàn)證方式。主備必須使用相同的密碼才能正常通信
virtual_ipaddress 虛擬IP地址楷拳,可以設(shè)置多個(gè)虛擬IP地址绣夺,每行一個(gè)
- 啟動(dòng)keepalived
service keepalived start
宿主機(jī)可以ping通虛擬IP
ping 172.18.0.201
- 全量數(shù)據(jù)熱備份和全量數(shù)據(jù)冷還原
- 創(chuàng)建數(shù)據(jù)券
docker volume create backup
- 選擇數(shù)據(jù)節(jié)點(diǎn)映射數(shù)據(jù)券
- 先停止節(jié)點(diǎn)
docker stop node1
- 刪除node1重新創(chuàng)建
docker rm node1
- 創(chuàng)建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,并執(zhí)行備份
進(jìn)入節(jié)點(diǎn)
docker exec -it node1 bash
執(zhí)行
apt-get update
apt-get install percona-xtrabackup-24
全量備份
innobackupex --user=root --password=sqlpass /data/backup/full
容器內(nèi)備份數(shù)據(jù)
/data/backup/full
退出容器
exit
查看數(shù)據(jù)券目錄
docker inspect backup
進(jìn)入備份目錄
- 數(shù)據(jù)庫(kù)可以熱備份欢揖,但是不能熱還原陶耍。為了避免恢復(fù)過(guò)程中的數(shù)據(jù)同步,采用空白的mysql還原數(shù)據(jù)她混,然后再建立PXC集群
- 冷還原數(shù)據(jù)烈钞,還原數(shù)據(jù)前要將未提交的事物回滾,還原數(shù)據(jù)之后重啟mysql
- 指令
rm -rf /var/lib/mysql/*
事務(wù)回滾
innobackupex --user=root --password=sqlpass --apply-back /data/backup/full/2018-04-15_05-09-07/
全量數(shù)據(jù)冷還原
innobackupex --user=root --password=sqlpass --copy-back /data/backup/full/2018-04-15_05-09-07/
- 具體冷還原流程
停止所有PXC節(jié)點(diǎn)
docker stop node1 node2
刪除所有PXC節(jié)點(diǎn)
docker rm node1 node2
刪除映射的數(shù)據(jù)券
docker volume rm v1 v2
創(chuàng)建新的數(shù)據(jù)券v1
docker volume create v1
啟動(dòng)一個(gè)PXC節(jié)點(diǎn)
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
進(jìn)入node1節(jié)點(diǎn)
docker exec -it node1 bash
執(zhí)行冷還原命令
rm -rf /var/lib/mysql/*
事務(wù)回滾
innobackupex --user=root --password=sqlpass --apply-back /data/backup/full/2018-04-15_05-09-07/
全量數(shù)據(jù)冷還原
innobackupex --user=root --password=sqlpass --copy-back /data/backup/full/2018-04-15_05-09-07/
退出容器重啟節(jié)點(diǎn)
exit
docker stop node1
docker start node1