docker pull percona/percona-xtradb-cluster
docker load < /home/soft/pxc.tar.gz
docker images
docker tag percona/percona-xtradb-cluster pxc
docker rmi percona/percona-xtradb-cluster
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
docker volume create --name v1
docker inspect v1
docker volume rm v1
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
docker pull 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
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
create user 'haproxy'@'%' IDENTIFIED BY '';
docker stop node1
docker exec -it h1 bash
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地址,每行一个
service keepalived start
宿主机可以ping通虚拟IP
ping 172.18.0.201
docker volume create backup
docker stop node1
docker rm 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
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
进入备份目录
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/
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