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

2020-03-26  本文已影响0人  Mr培
  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

负载均衡配置

截屏2020-03-26下午5.03.20.png
截屏2020-03-26下午5.03.27.png
  1. 安装Haproxy镜像
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

负载均衡的高可用配置

截屏2020-03-26下午5.02.14.png
  1. 安装Keepalived
    Keepalived必须要安装在Haproxy所在的容器之内
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
  1. 全量数据热备份和全量数据冷还原
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
上一篇下一篇

猜你喜欢

热点阅读