美文网首页Docker
docker实战 - MySQL高可用集群搭建(pxc)

docker实战 - MySQL高可用集群搭建(pxc)

作者: fdsun | 来源:发表于2021-03-09 22:08 被阅读0次
    25.png

    1 MySQL高可用集群搭建(pxc)

    01 拉取pxc镜像
        docker pull percona/percona-xtradb-cluster:5.7.21
    
    02 复制pxc镜像(实则重命名)
        docker tag percona/percona-xtradb-cluster:5.7.21 pxc
    
    03 删除pxc原来的镜像
        docker rmi percona/percona-xtradb-cluster:5.7.21
    
    04 创建一个单独的网段,给mysql数据库集群使用
        (1)docker network create --subnet=172.18.0.0/24 pxc-net
        (2)docket network inspect pxc-net   [查看详情]
        (3)docker network rm pxc-net        [删除]
    
    05 创建和删除volume
        创建:docker volume create --name v1
        删除:docker volume rm v1
        查看详情:docker volume inspect v1
    
    06 创建单个PXC容器demo
        [CLUSTER_NAME PXC集群名字]
        [XTRABACKUP_PASSWORD数据库同步需要用到的密码]
    
        docker run -d -p 3301:3306 
        -v v1:/var/lib/mysql
        -e MYSQL_ROOT_PASSWORD=root
        -e CLUSTER_NAME=PXC
        -e XTRABACKUP_PASSWORD=root
        --privileged --name=node1 --net=pxc-net --ip 172.18.0.2
        pxc
    
    07 搭建PXC[MySQL]集群
        (1)准备3个数据卷
            docker volume create --name v1
            docker volume create --name v2
            docker volume create --name v3
        (2)运行三个PXC容器
            【在创建完第一个node1,需要等待一段时间,大概1分钟左右,等node1启动初始化完成,才能创建node2和node3,不然会出错,大家一定要注意哦】
            docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jack123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=jack123 --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc
    
            [CLUSTER_JOIN将该数据库加入到某个节点上组成集群]
            docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jack123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=jack123 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 pxc
    
            docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jack123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=jack123 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 pxc
        (3)MySQL工具连接测试
            Jetbrains Datagrip
    
    

    1.1增加负载均衡

    26.png

    (1)拉取haproxy镜像

    docker pull haproxy
    
    

    (2)创建haproxy配置文件,这里使用bind mounting的方式

    touch /tmp/haproxy/haproxy.cfg
    
    

    haproxy.cfg

    需要修改的地方: [ip:port]

    server  MySQL_1 [ip:port] check weight 1 maxconn 2000
    
    
    global
        #工作目录,这边要和创建容器指定的目录对应
        chroot /usr/local/etc/haproxy
        #日志文件
        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_monitor
        #统计报告格式
        stats realm     Global\\ statistics
        #登陆帐户信息
        stats auth  admin:admin
        #数据库负载均衡
        listen  proxy-mysql
        #访问的IP和端口,haproxy开发的端口为3306
        #假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
        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 
        #使用keepalive检测死链
        option  tcpka
    
    

    (3)创建haproxy容器,因为当前centos的网络和win使用的是桥接,所以直接端口映射到centos上即可,如果不想用桥接,则需要修改Vagrantfile进行端口映射

    #这样可以直接访问centos的IP:8888和3306
    docker run -it -d -p 8888:8888 -p 3306:3306 -v /tmp/haproxy:/usr/local/etc/haproxy --name haproxy01 --privileged --net=pxc-net haproxy
    
    

    (4)根据haproxy.cfg文件启动haproxy

    (非必须 较新版本会在容器创建时自动使用haproxy.cfg配置文件)

    docker exec -it haproxy01 bash
    haproxy -f /usr/local/etc/haproxy/haproxy.cfg
    
    

    (5)在MySQL数据库上创建用户,用于心跳检测

    CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
    [小技巧[如果创建失败,可以先输入一下命令]:
        drop user 'haproxy'@'%';
        flush privileges;
        CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
    ]
    
    

    (6)win浏览器访问

    http://centos_ip:8888/dbs_monitor
    用户名密码都是:admin
    
    

    (7)win上的datagrip连接haproxy01

    ip:centos_ip
    port:3306
    user:root
    password:root
    
    

    (8)在haproxy连接上进行数据操作,然后查看数据库集群各个节点

    相关文章

      网友评论

        本文标题:docker实战 - MySQL高可用集群搭建(pxc)

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