docker mysql 高可用_docker-mysql高可用负载均衡集群·笔记

安装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

负载均衡配置

b82c8df4ff8e

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

b82c8df4ff8e

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

安装Haproxy镜像

docker pull haproxy

创建Haproxy配置文件,宿主机

touch /home/soft/haproxy/haproxy.cfg

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端口

负载均衡的高可用配置

b82c8df4ff8e

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

安装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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值