一、环境说明:

宿主机:Win10

虚拟机工具:VMware Workstation 15

系统及版本:Ubuntu16.04

Docker版本:18.09.3

涉及到的虚拟主机:

192.168.1.100 haproxy

192.168.1.101 node1

192.168.1.102 node2

192.168.1.103 node3

 

二、准备镜像

#拉取percona/percona-xtradb-cluster:5.6

#pxc5.7版本不支持不使用k8s或者etcd模式的docker集群。所以你要下载5.6镜像构建的,如果一定要5.7的,就用5.7.2的镜像进行集群构建。

docker pull percona/percona-xtradb-cluster:5.6

# 镜像重命名为pxc

docker tag percona/percona-xtradb-cluster:5.6 pxc

 

二、创建本地目录

mkdir -p /docker/pxc/mysql /docker/pxc/data

# 修改权限

cd /docker/pxc

chmod 777 mysql

chmod 777 data

 

三、创建容器

PS:切记因第一个节点初始化比较耗时一定要等第一个容器创建成功可以使用MySQL客户端连接了才能创建第二个,或者会报错创建不了下面的容器!!!

# node1:192.168.1.101

# 创建第1个MySQL节点 

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db1 --net=host pxc

# node2:192.168.1.102

# 创建第2个MySQL节点 (192.168.1.101为主机1 ip)

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=192.168.1.101 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db2 --net=host pxc

# node3:192.168.1.103

# 创建第3个MySQL节点 

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=192.168.1.101 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db3 --net=host pxc

# 至此,基于Docker的多机PXC集群搭建完成,亲测可用.若无法连接mysql则关闭防火墙.

 

 

四、解决虚拟机重启后Percona XtraDB Cluster(PXC)容器无法正常启动

进入之前创建的/docker/pxc/mysql目录下

 

编辑文件grastate.dat

[root@localhost _data]# vi grastate.dat

修改safe_to_bootstrap的值置为1

  1. # GALERA saved state
  2. version: 2.1
  3. uuid:    1fdc4f95-9625-11e9-9a33-a20935d979f9
  4. seqno:   -1
  5. safe_to_bootstrap: 1

 

 

 

五、haproxy负载均衡

1、拉取镜像

docker pull haproxy

 

2、配置haproxy的文件

sudo touch /usr/local/src/haproxy/h1/haproxy.cfg

sudo vi  /usr/local/src/haproxy/h1/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:3307 

    #网络协议

         mode  tcp

         #负载均衡算法(轮询算法)

         #轮询算法:roundrobin

         #权重算法:static-rr

         #最少连接算法:leastconn

         #请求源IP算法:source

    balance  roundrobin

         #日志格式

    option  tcplog

         #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测

    option  mysql-check user haproxy

    server  MySQL_1 192.168.71.198:3306 check weight 1 maxconn 2010 

    server  MySQL_2 192.168.71.199:3306 check weight 1 maxconn 2000 

         #使用keepalive检测死链

    option  tcpka

 

3、mysql中创建用户

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

 

4、运行容器

docker run -it -d -p 4001:8888 -p 4002:3307 -v /usr/local/src/haproxy/h1:/usr/local/etc/haproxy --name haproxy1 --privileged --net=host haproxy

 

 

5、然后在浏览器打开192.168.71.198:8888/dbs

(刚刚在haproxy配置文件连设置的)

 

 

 

 

附件
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐