美文网首页
docker-mysql高可用负载均衡集群·笔记

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

作者: Mr培 | 来源:发表于2020-03-26 17:04 被阅读0次
    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
    
    • 创建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端口

    负载均衡的高可用配置

    截屏2020-03-26下午5.02.14.png
    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
    

    相关文章

      网友评论

          本文标题:docker-mysql高可用负载均衡集群·笔记

          本文链接:https://www.haomeiwen.com/subject/oxwcuhtx.html