docker compose 搭建pxc集群,haproxy做负载均衡

docker compose 搭建pxc集群

yls
2020/5/2

  1. 创建目录结构
cd /usr/local/docker
mkdir pxc
cd pxc
mkdir data master follower
# 创建数据卷
cd data
mkdir v1 v2 v3
# 设置权限
chmod 777 v1 v2 v3
  1. 创建pxc集群的网络
docker network create --subnet 192.168.5.1/24 pxc
  1. 创建master节点的docker-compose.yml文件
version: '3'
services:
  pxc1:
    image: pxc
    restart: always
    container_name: pxc1
    privileged: true
    ports:
      - 13306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - CLUSTER_NAME=pxc
    volumes:
      - ../data/v1:/var/lib/mysql
      - ./etc/my.cnf:/etc/my.cnf

networks:
  default:
    external:
      name: pxc

  1. 创建配置文件my.cnf
[mysqld]
skip-name-resolve
max_allowed_packet= 20M 

docker-compose up -d运行master节点
通过docker network inspect pxc可以查看到master节点的ip为192.168.5.2

  1. 创建follower节点的docker-compose.yml文件
version: '3'
services:
  pxc2:
    image: pxc
    container_name: pxc2
    restart: always
    privileged: true
    ports:
    - 13307:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - CLUSTER_NAME=pxc
      - CLUSTER_JOIN=192.168.5.2
    volumes:
      - ../data/v2:/var/lib/mysql
      - ./etc/my.cnf:/etc/my.cnf
    networks:
      default:
        ipv4_address: 192.168.5.5
  pxc3:
    image: pxc
    container_name: pxc3
    restart: always
    privileged: true
    ports:
    - 13308:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - CLUSTER_NAME=pxc
      - CLUSTER_JOIN=192.168.5.2
    volumes:
      - ../data/v3:/var/lib/mysql
      - ./etc/my.cnf:/etc/my.cnf
    networks:
      default:
        ipv4_address: 192.168.5.4
networks:
  default:
    external:
      name: pxc
  1. 创建follower配置文件my.cnf
[mysqld]
skip-name-resolve
max_allowed_packet= 20M 

docker-compose up -d运行follower节点

  1. 用客户端连接各个节点,测试是否都可以读写操作且读写数据一致

若要重启master节点,修改v1/grastate.dat文件中的safe_to_bootstrap=1

使用haproxy对集群做负载均衡

  1. 下载haproxy
    yum -y install haproxy
  2. 修改/etc/haproxy/haproxy.cfg文件,添加
listen stats
    bind 0.0.0.0:1083
    mode http
    stats uri /stats
    stats auth admin:admin
listen mysql-cluster
    bind 0.0.0.0:1082
    mode tcp
    balance roundrobin
    server db01 39.97.234.52:13306 check
    server db01 39.97.234.52:13307 check
    server db03 39.97.234.52:13308 check

  1. 启动haproxy
    systemctl start haproxy

systemctl status haproxy 查看状态
systemctl stop haproxy 停止
systemctl restart haproxy 重启

  1. 访问http://ip:1083/stats,用户名:admin,密码:admin登录

  2. 使用mysql客户端连接ip:主机ip地址,port:1082查看是否负载均衡成功

原文地址:https://www.cnblogs.com/yloved/p/12817212.html