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

负载均衡配置

docker-mysql高可用负载均衡集群_第1张图片
docker-mysql高可用负载均衡集群_第2张图片

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

负载均衡的高可用配置

docker-mysql高可用负载均衡集群_第3张图片

  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

你可能感兴趣的:(mysql)