# 2、PXC 集群负载均衡

## 数据库负载均衡的必要性

虽然搭建了集群，但是不使用数据库负载均衡，单节点处理所有请求，负载高，性能差。

![](https://3836016457-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT3088lKmAdd7HarJ%2F-LfnT7osh8cvAGaoM3Y9%2F-LfnTL56B4CTkOrQp7bV%2F1.png?generation=1558862980024206\&alt=media)

使用Haproxy 做负载均衡，请求被均匀分发给每个节点，单节点负载低，性能好。

![](https://3836016457-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT3088lKmAdd7HarJ%2F-LfnT7osh8cvAGaoM3Y9%2F-LfnTL58UxDXpCf_9s14%2F2.png?generation=1558862980055433\&alt=media)

## 负载均衡中间件对比

![](https://3836016457-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT3088lKmAdd7HarJ%2F-LfnT7osh8cvAGaoM3Y9%2F-LfnTL5A_C-bgRsZ2DT-%2F3.png?generation=1558862980090379\&alt=media)

lvs不支持虚拟机，所以在docker容器里安装是不可能的，haproxy一个经得起考验的负载均衡中间件。

## 安装Haproxy镜像

Docker仓库中保存了Haproxy的镜像，只需下载即可。

```
$ docker pull haproxy
```

下载了haproxy镜像后，不要着创建容器，因为haproxy镜像里是不包含配置文件的.

## 创建Haproxy配置文件

**宿主机上创建一个配置文件**

```
$ touch /home/soft/hapoxy/haproxy.cfg
```

配置文件目录可以自己去指定，可以采用目录映射技术把soft目录映射到haproxy容器里面。haproxy容器就可以找到这个配置文件；启动Haproxy的服务自然而然就有配置文件了。

> 配置文件详情可以参考：[Haproxy安装部署文档及多配置文件管理方案](https://zhangge.net/5125.html)

**创建Haproxy容器**

```
$ docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/hapoxy:/usr/local/etc/haproxy --name haproxy1 --privileged --net=net1 haproxy

# 进入到后台运行的docker容器
$ docker exec -it haproxy1 bash
$ haproxy -f /usr/local/etc/haproxy/haproxy.cfg
```

> 退出指令exit ,只是退出交互界面，不会停止容器运行。

-p 端口映射：8888端口是haproxy监控画面的端口，可以配置随意端口。

-v 目录映射

\--name 命名

进入到容器中指定haproxy的配置文件。

创建心跳检测MYSQL用户名(%表示任何ip都可以使用这个账号登录到mysql数据库，密码为空)

```
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
```
