Docker学习(安装-卸载-Mysql集群-PXC框架)第二节HAproxy负载均衡

一、整体架构简介

这里面需要用到上节课创建的三台Mysql集群
本来我是打算在那台虚拟机上面使用docker创建另外的一个镜像
这样就把负载均衡的服务器都用在了一个服务器上了
但是弄完发现数据库始终无法连接,我也把网段端口都检查了一遍
没办法的情况下,我开了另外一台虚拟机了,将负责负载均衡的HAproxy在单独的一台机器里面,这里给一下详细的图
在这里插入图片描述这里我用了两台服务器,一台服务器里面搭建了mysql的集群
另一台服务器里面放置了负责负载均衡的HAproxy

首先这里我们先通过数据库链接软件建立一个用户

这是删除用户的sql

DROP USER 'haproxy'@'%';

这事增加用户的sql

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

在这里插入图片描述

二、如何使用Docker中的HAproxy的镜像文件

  1. 拉取HAproxy的镜像文件
docker pull haproxy

在这里插入图片描述这里面记得把拉取下来的镜像改个名字,否则名字就太长了,不太好用

  1. 在宿主机上面建立好Haproxy需要用到的配置文件
global
        daemon
        # nbproc 1
        # pidfile /var/run/haproxy.pid
        # 工作目录
        chroot /usr/local/etc/haproxy

defaults
        log 127.0.0.1 local0 err #[err warning info debug]
        mode http                #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option dontlognull       #日志中不记录负载均衡的心跳检测记录
        maxconn 4096             #默认的最大连接数
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #=心跳检测超时

######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456
########frontend配置##############

######## mysql负载均衡配置 ###############
listen proxy-mysql
        bind 0.0.0.0:3306
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        option mysql-check user haproxy
        # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server MYSQL_1 192.168.142.128:3306 check weight 1 maxconn 2000
        server MYSQL_2 192.168.142.128:3307 check weight 1 maxconn 2000
        server MYSQL_3 192.168.142.128:3308 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

以上,我不多做介绍,就记住一下三点

  • 第一,你需要开启宿主机的4001,4002端口
  • 第二,你需要记住访问HAproxy的后台的地址是宿主机IP:4001/dbs;用户名admin;密码123456
  • 第三,在配置文件的最末尾可能需要你更改你搭建的Mysql的集群的IP地址
    这里我会举个例子;如图所示就是访问的地址路径
    在这里插入图片描述
    centos7开启端口的方式
firewall-cmd --zone=public --add-port=4001/tcp --permanent
firewall-cmd --zone=public --add-port=4002/tcp --permanent
firewall-cmd --reload

三、使用配置文件

上面可能看的有点懵,我给一张图告诉你,配置文件应该放在哪里
在这里插入图片描述这张图可以看到我是放在了宿主机的文件目录下面的,这个文件目录一会在启动docker镜像的时候可以将这个目录映射过去让Haproxy使用这个配置文件

四、启动docker拉取下来的HAproxy镜像

先建立一个docker的内部网段,我这里取名net1

docker network create  --subnet=172.18.0.0/24 net1

我这里绑定了两个端口4001是后台页面看mysql的运行的,4002是分发数据库请求的,以后我们可以通过这个链接数据库,后面的两个地址,前一个地址就是我们刚刚建立的配置文件的地址,后面的就是HAproxy镜像中的配置文件加载地址,取了名字叫n1,给了最高权限,使用net1的网段,给定了内部网段的ip地址,使用HAproxy的镜像

docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1  --ip 172.18.0.7 haproxy

进入容器内

docker exec -it h1 bash

启动HAproxy,使用刚刚的配置文件

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

访问路径

http://192.168.142.129:4001/dbs

这个IP地址要根据你的实际来,可能跟我不一样
在这里插入图片描述如果如上图所示,就成功了
这时候我们其实可以通过4002端口连接一下的,打来数据库软件
在这里插入图片描述链接的地址就是宿主机的地址,链接的端口是刚刚配置的4002端口
用户名是root,是那三个数据库的实际用户名和密码
这里一定要写那三个数据库的实际用户名密码
然后可以测试链接状态

猜你喜欢

转载自blog.csdn.net/lovePaul77/article/details/103795995