美文网首页DevOps/SRE
docker搭建mysql集群

docker搭建mysql集群

作者: embers1996 | 来源:发表于2019-05-25 22:39 被阅读0次

    前言

    本文章使用Percona XtraDB Cluster(MySQL改进版,性能提升很大)进行集群搭建,集群mysql的数量是5,宿主机为centos7。

    常见集群方案

    • PXC同步复制,事务在所有集群节点要么同时提交,要么不提交
    • Replication采用异步复制,无法保证数据的一致性

    安装镜像

    docker pull percona/percona-xtradb-cluster
    

    名字太长了,对镜像进行重命名

    docker tag percona/percona-xtradb-cluster percona
    

    可以看到执行该命令,docker为我们复制了一份


    image.png

    创建内部网络

    出于安全考虑,将PXC集群放置于docker内部网络中。只需将宿主的端口与之映射并开放出来即可。

    docker network create --subnet=172.18.0.0/24 net1
    

    说明:–subnet=172.18.0.0/24 自定义网段172.18.0.0,24是指24位子网掩码 net1 网段名称。

    创建docker卷

    docker容器的运行规则:通过目录映射的方法,将业务数据写入到宿主机中。好处是如果容器故障,只需将容器删除,重新启用一个容器即可,这样就不会丢失原来的数据。重新创建启动一个新的容器还可以继续使用。
    由于PXC较为特殊,无法直接使用映射目录的方法做映射(使用后会闪退),故使用docker卷。

    创建5个docker卷

    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
    

    创建运行PXC容器

    #第一个节点
    docker run -d  -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node1 --net=net1 --ip 172.18.0.2 percona
    #第二个节点
    docker run -d  -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node2 --net=net1 --ip 172.18.0.3 percona
    #第三个节点
    docker run -d  -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node3 --net=net1 --ip 172.18.0.4 percona
    #第四个节点
    docker run -d  -p 3309:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node4 --net=net1 --ip 172.18.0.5 percona
    #第五个节点
    docker run -d  -p 3310:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node5 --net=net1 --ip 172.18.0.6 percona
    

    参数说明:

    -d  默认在后台运行
    -p  3306(宿主):3306(容器)   端口映射,将容器3306端口映射到宿主3306坤口
    -v  目录映射,将第四步创建的v1映射到容器/var/lib/mysql
    -e MYSQL_ROOT_PASSROWD  创建的用户实例的密码,默认实例root
    -e CLUSTER_NAME  集群名称
    -e XTRABACKUP_PASSWORD  数据库之间同步使用的密码
    --privileged  权限.给予最高权限
    --name 给容器容命名
    --net 使用内部网段
    --ip 内部网段分到的地址
    pxc 指的是镜像
    

    验证是否创建成功PCX集群

    开放端口3306-3310

    开放端口范围3306至3310
    firewall-cmd --permanent --add-port=3306-3310/tcp
    查看开放端口的列表
    firewall-cmd --permanent --list-ports
    
    image.png

    在本地用mysql的客户端连接工具对五个几点进行连接,看看是否每个节点都成功运行。如果成功运行,再选任意一个节点创建一个表,然后插入数据看其他节点是否能够进行同步

    负载均衡

    使用支持TCP/IP协议的harpoxy中间件进行负载均衡。

    #创建目录
    mkdir /home/soft/haproxy
    # 拉取镜像
    docker pull haproxy
    # 宿主机创建配置文件
    touch /home/soft/haproxy/haproxy.cfg 
    # 创建容器,4001:8888为管理界面的端口
    docker run -it -d -p 4001:8888 -p 4000:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
    

    把下面haproxy.conf配置文件的内容添加到宿主机的haproxy.conf文件里
    haproxy.conf 配置文件

    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  
    
    # 进入容器
    docker exec -it h1 bash
    # 加载指定配置文件,启动haproxy 
    haproxy -f /usr/local/etc/haproxy/haproxy.cfg
    

    执行sql语句创建账户

    # mysql创建账号
    CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
    
    image.png

    访问管理界面,输入用户名密码admin 123456(上面haproxy.conf配置的信息)


    image.png image.png

    绿色为正常节点,红色为故障节点,这说明你需要做些处理了

    相关文章

      网友评论

        本文标题:docker搭建mysql集群

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