docker搭建mysql PXC集群

docker run -d -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 --privileged --net=net1 --ip 172.18.0.2 mysql:5.7

搭建mysql PXC集群

1.docker安装pxc镜像,https://hub.docker.com/r/percona/percona-xtradb-cluster

docker pull percona/percona-xtradb-cluster

如果镜像名字太长可以修改镜像名称,然后删掉原镜像

docker tag percona/percona-xtradb-cluster pxc

2.创建net1网段

docker network create --subnet=172.18.0.0/16 net1

查看docker默认三种网络
docker network ls
删除自定义网络
docker network rm 自定义networkID

 

3.创建数据卷,--name可以省略

docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5

查看数据卷的位置

docker inspect v1

删除数据卷的命令

docker volume rm v1

4.创建备份数据卷(用于热备份数据)

docker volume create --name backup

5.创建5节点的PXC集群

注意,每个MySQL容器创建之后,因为要执行PXC的初始化和加入集群等工作,耐心等待1分钟左右再用客户端连接MySQL。另外,必须第1个MySQL节点启动成功,用MySQL客户端能连接上之后,再去创建其他MySQL节点。

#创建第1个MySQL节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
#创建第2个MySQL节点
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
#创建第3个MySQL节点
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
#创建第4个MySQL节点
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
#创建第5个MySQL节点
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

 全部启动完毕,到此5节点的PXC集群就搭建完毕. 每个节点都能提供读写服务.

赶紧试试看吧!

 

数据库的负载均衡

1.安装Haproxy镜像

docker pull haproxy

2.宿主机上编写Haproxy配置文件,提前创建好对应目录及文件

 vi /home/soft/haproxy/haproxy.cfg

配置如下

global
    #工作目录
    chroot /usr/local/etc/haproxy
    #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
    log 127.0.0.1 local5 info
    #守护进程运行
    daemon

defaults
    log global
    mode    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:123456
#数据库负载均衡
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_2 172.18.0.3:3306 check weight 1 maxconn 2000
    server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
    server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
    server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option  tcpka

3.创建两个Haproxy容器

 #创建第1个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
#进入h1容器,启动Haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
#创建第2个Haproxy负载均衡服务器
docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy
#进入h2容器,启动Haproxy
docker exec -it h2 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

 

4.在DB1创建haproxy用户

CREATE USER 'haproxy'@'%' IDENTIFIED by '';

 

5.访问http://宿主机IP:4001/dbs   admin:123456

6.Haproxy容器内安装Keepalived,设置虚拟IP,启动H1中的keepakived

#进入h1容器
docker exec -it h1 bash
#更新软件包
apt-get update
#安装VIM
apt-get install vim
#安装Keepalived
apt-get install keepalived
#编辑Keepalived配置文件(参考下方配置文件)
vim /etc/keepalived/keepalived.conf
#启动Keepalived
service keepalived start
#宿主机执行ping命令
ping 172.18.0.201

配置文件内容如下:

 vrrp_instance  VI_1 {
    state  MASTER
    interface  eth0
    virtual_router_id  51
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  123456
    }
    virtual_ipaddress {
        172.18.0.201
    }
}

启动H2中的keepakived 

#进入h2容器
docker exec -it h2 bash
#更新软件包
apt-get update
#安装VIM
apt-get install vim
#安装Keepalived
apt-get install keepalived
#编辑Keepalived配置文件
vim /etc/keepalived/keepalived.conf
#启动Keepalived
service keepalived start
#宿主机执行ping命令
ping 172.18.0.201

配置文件内容如下:

 vrrp_instance  VI_1 {
    state  MASTER
    interface  eth0
    virtual_router_id  51
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  123456
    }
    virtual_ipaddress {
        172.18.0.201
    }
}

7.宿主机安装Keepalived,实现双击热备 启动宿主机中的keepakived

#宿主机执行安装Keepalived
yum -y install keepalived
#修改Keepalived配置文件
vi /etc/keepalived/keepalived.conf
#启动Keepalived
systemctl start keepalived.service 
#查看
systemctl status keepalived.service 

Keepalived配置文件如下:virtual_ipaddress虚拟ip,跟宿主机同一网段

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.217.150
    }
}
​
virtual_server 192.168.217.150 8888 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
​
    real_server 172.18.0.201 8888 {
        weight 1
    }
}
​
virtual_server 192.168.217.150 3306 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
​
    real_server 172.18.0.201 3306 {
        weight 1
    }
}

用虚拟ip访问haproxy http://192.168.217.150:4001/dbs

8.XtraBackup热备份数据. 在node1容器内创建XtraBackup,因为在创建node1的时间挂载了backup

#进入node1容器
docker exec -it --user root node1 bash
#更新软件包
yum -y update
#安装热备工具
yum install percona-xtrabackup-24
#全量热备
innobackupex --user=root --password=123456 /data/backup/full

退出容器查询宿主机bakup挂载目录

docker inspect backup
cd /var/lib/docker/volumes/backup/_data

至此已经完成了mysql集群的负载均衡,通过访问 192.168.217.150:3306端口的读写请求会通过Haproxy负载均衡到mysql集群

PXC全量恢复步骤

冷还原数据 停止节点,并删除节点,删除容器挂载的

docker rm -f node1
docker rm -f node2
docker rm -f node3
docker rm -f node4
docker rm -f node5
docker volume rm v1 v2 v3 v4 v5

重新创建数据卷v1,重新创建node1容器

docker volume create v1
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

用root账户进入node1容器 docker exec -it --user root node1 bash

#进入node1容器
docker exec -it --user root node1 bash
#更新软件包
yum -y update
#安装热备工具
yum install percona-xtrabackup-24
#删除数据
rm -rf /var/lib/mysql/*
#清空事务
innobackupex --user=root --password=123456 --apply-back /data/backup/full/2020-06-13_07-32-56/
#还原数据
innobackupex --user=root --password=123456 --copy-back  /data/backup/full/2020-06-13_07-32-56/

 退出node1容器,停止node1,重启node1容器

docker restart node1

用Navicat连接node1查看数据 

重新创建其余4个节点,组件PXC集群

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值