Mysql PXC集群

记录一下几个配置

拉取镜像

docker pull percona/percona-xtradb-cluster

 

创建网络

docker network create --subnet=172.18.0.0/24 net1

创建卷

docker volume create v1

创建三个数据库

docker run -d  -p 6671:3306   -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC123 -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.19.0.2 -v v1:/var/lib/mysql pxc

docker run -d -p 6672:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC123 -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1   --privileged --name=node2 --net=net1 --ip 172.19.0.3 -v v2:/var/lib/mysql pxc

docker run -d -p 6673:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC123 -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1   --privileged --name=node3 --net=net1 --ip 172.19.0.4 -v v3:/var/lib/mysql pxc

创建一个用于haproxy心跳检测的无权限账号

create user 'haproxy'@'%' identified by '';

创建Haproxy,保存在容器/usr/local/etc/haproxy/haproxy.cfg,配置如下

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

defaults  
        mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
        #retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置  
        option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
        option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
        timeout connect 5000ms #连接超时  
        timeout client 30000ms #客户端超时  
        timeout server 30000ms #服务器超时  
        #timeout check 2000 #=心跳检测超时  
        log 127.0.0.1 local0 err #[err warning info debug]  
        balance roundrobin                     #负载均衡算法  
#        option  httplog                        #日志类别,采用httplog  
#        option  httpclose   #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现  
#        option  dontlognull  
#        option  forwardfor  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
  

listen  admin_stats
    #监控界面的访问的IP和端口
    bind  0.0.0.0:2000
    #访问协议
    mode        http
    #URI相对地址
    stats uri   /dbs
    #统计报告格式
    stats realm     Global\ statistics
    #登陆帐户信息
    stats auth  admin:admin

  
listen node_cluster  
        bind :3306  
        mode tcp  
        balance  roundrobin
    option  mysql-check user haproxy
        server node1 172.19.0.2:3306   check weight 1 maxconn 2000 
        server node2 172.19.0.3:3306  check weight 1 maxconn 2000 
        server node3 172.19.0.4:3306  check weight 1 maxconn 2000 


  
启动Haproxy

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

进入Haproxy的监控页面,XXXX:2000/dbs,可以监控数据库节点的状态

Mysql PXC集群_第1张图片

另外记录一下因为实验,我关闭了所有的数据库,结果数据库节点再也无法启动,网上查了下原因,记录如下:

直接通过docker start node1 或者任何一个节点是启动不了的,原因是集群之前的同步机制造成的,启动任何一个节点,该节点都会去其它节点同步数据,其它节点仍处于宕机状态,所以该节点启动失败,这也是pxc集群的强一致性的表现,解决方式是,删除所有节点docker rm node1 node2 node3 node4 node 5

和数据卷中的grastate.dat文件

rm -rf /var/lib/docker/volumes/v1/_data/grastate.dat

重新执行集群创建的命令即可,因为数据都在数据卷中,所有放心,集群重新启动都数据仍然都在.

注意:PXC集群只有在超过一半数量的节点宕机,集群才会不可用,这是为了避免异地机房部署PXC集群,因为网络故障,导致一个PXC集群分裂成两个集群。所以说挂掉一两个节点没什么问题,只要不超过一半的节点就行。
 

 

你可能感兴趣的:(linux)