【Docker-02】数据库集群负载均衡 —— 不看后悔系列

前言

如果没有安装Mysql集群,先看上一节。

为什么要负载均衡?因为:一个人受罪还不如大家一起受罪!(想想就觉得不疼了)
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第1张图片
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第2张图片
这里我以PXC.Mysql集群为例,使用Haproxy做负载均衡,使请求均匀分发给每个节点(一起受罪)

为什么Haproxy?

【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第3张图片
看到TCP/IP协议那里,我挺喜欢Nginx,但是不敢用,谁让他出得慢,而Haproxy好歹很早就支持了!

1.安装Haproxy镜像

docker pull haproxy
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第4张图片

2.创建Haproxy配置文件

参考:https://zhang.ge/5125.html
参考:

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  

3.创建并运行

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

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

docker exec -it h1 bash
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第5张图片

4.创建心跳检测DB账号

因为要查看Mysql集群状态,而且我们在haproxy.cfg配置文件中有配置。
所以,我们在node-1的mysql服务器中创建一个haproxy账号,设置空密码,只有登录权限,不需要赋予表权限。
使用root账号添加haproxy用户的mysql命令:CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

5.进入管理平台

因为我们在haproxy.cfg中写了配置,所以,我们直接在宿主机浏览器上输入url就完事了:http://127.0.0.1:4001/dbs,然后输入haproxy.cfg中配置的账号密码,我配置的是admin:abc123456

效果
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第6张图片

6.Haproxy的主机连接Mysql集群

同样的使用Navicat,然后连接端口是4002,因为haproxy集群配置了所有mysql主机,所以,我们会通过haproxy连接任一台Mysql主机
【Docker-02】数据库集群负载均衡 —— 不看后悔系列_第7张图片

7.检验是否生效

  • (1)通过Navicat连接Mysql集群,然后增删改成……看真实主机的数据库结果……
  • (2)关闭一个node节点,再看看管理平台……

后记

通过本文探讨,我们知道,我们的haproxy是单节点的,如果haproxy挂掉,我们的后端Mysql集群就不可用了。

所以……请听下回分解……

你可能感兴趣的:(数据库系统,云计算/大数据)