zoukankan      html  css  js  c++  java
  • docker搭建pxc集群与haproxy负载均衡

    转载自https://blog.csdn.net/FlyDevon/article/details/82317689
    另注:本人实际操作pxc的时候,遇到节点数据库不同步,经过一番折腾,最后原因竟然pxc版本有问题,换成5.6的没有问题,各位同学可以注意一下。

    Percona XtraDB Cluster简称PXC。Percona Xtradb Cluster实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。

    1、安装pxc镜像

    docker pull percona/percona-xtradb-cluster

    2、修改镜像名称

    docker tag percona/percona-xtradb-cluster pxc
    #docker images 出现两个imageId相同镜像,这时不能用docker rmi imageId删除,可通过docker rmi repository:tag删除

    3、创建网络

    docker network ls  #查看docker网络
    docker network create --subnet=172.18.0.0/24 net1  #创建网络
    docker inspect net1 #查看网络
    [
        {
            "Name": "net1",
            "Id": "d06c2ce7488c64df8c2278279be9342bf339e1650691abab9b8a576c14075a20",
            "Created": "2018-09-02T10:37:27.626037191Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.18.0.0/24"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]

    4、创建数据卷

    #数据卷是虚拟机与宿主机之间共享文件,如果容器出现异常,被删除掉,但是容器中的重要数据还是被保存下来,只需将新创建的容器挂载到数据卷上面即可。
    #创建3台pxc集群,因此我准备3个数据卷v1、v2、v3
    docker volume create v1 #创建数据卷
    docker inspect v1 #查看数据卷,我们也可以去docker安装目录中volumes目录中查看数据卷是否创建成功

    5、创建pxc容器

    #创建第一个节点
    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip=172.18.0.2 pxc
    #创建第二个节点
    docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip=172.18.0.3 pxc
    #创建第三个节点
    docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip=172.18.0.4 pxc
    
    docker run [param ...] imageName  #创建容器命令
    -d 后台运行
    -p 容器与宿主机端口映射
    -e MYSQL_ROOT_PASSWORD=abc123456 数据库密码
    -e CLUSTER_NAME=PXC 指定集群名称
    -e XTRABACKUP_PASSWORD=abc123456 指定集群之间同步需要的密码
    v v1:/var/lib/mysql 把刚刚创建的数据卷挂载到mysql中
    --name=node1 指定容器名称(当前我们把node1作为主节点、后面会创建node2)
    --net=net1 指定网段
    --ip=172.18.0.2 指定ip 
    
    

    6、创建haproxy容器

    docker pull haproxy #拉取镜像
    cd /usr/local/ & mkdir -p docker/haproxy/
    vim docker/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:abc123456
    #数据库负载均衡
    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 
    	#使用keepalive检测死链
        option  tcpka 
    ######################################################################################
    docker run -it -d -p 4001:8888 -p 4002:3306 -v /usr/local/docker/haproxy:/usr/local/etc/haproxy --name haproxy --privileged --net=net1 --ip 172.18.0.7 haproxy
    #进入haproxy启动容器
    docker exec -it haproxy bash
    haproxy -f /usr/local/etc/haproxy/haproxy.cfg
    #根据haproxy.cfg配置文件中、我们需要在db1数据库中创建一个haproxy用户
    create user 'haproxy'@'%' identified by ''; 

    7、pxc强一致性与haproxy负载均衡测试

    node_01节点创建表,可同步到node_02和node_03
    haproxy代理端口4002实现负载均衡
    pxc节点监控
  • 相关阅读:
    阅读prettytable 一些代码、get、set 检查参数
    python 库 PrettyTabble 使用与错误
    python 内建模块与第三方模块
    python 排序 堆排序
    python 排序 桶排序
    python 排序冒泡排序与双向冒泡排序
    python 函数式编程 闭包,返回一个函数
    python 排序 选择排序
    python 排序 归并排序
    python 排序 插入排序与希尔排序
  • 原文地址:https://www.cnblogs.com/liuwei-xd/p/11100381.html
Copyright © 2011-2022 走看看