Nginx搭建MySQL负载均衡

Posted by jintang on 2017-03-12

一直使用Nginx做负载均衡都是七层的负载,最近刚好搭建一个mysql主从架构,一写多读,多读正好需要用到负载。
虽说HAProxy可以做到,但是没怎么接触,国外是很流行,但是国内还是nginx比较多。今天试了一下还挺简单的,做个笔记吧。

服务器环境

1
2
3
nginx: 192.168.254.103
mysql server 1: 192.168.254.102
mysql server 2: 192.168.254.104

编译nginx,添加stream模块

nginx默认没有加上四层负载模块,需要编译时加上

1
2
3
cd nginx-1.10.3
./configure --prefix=/usr/local/nginx --with-stream
make && make install

给mysql建立同样的账号

1
2
mysql> grant all privileges to *.* on 'test'@'192.168.254.%' identified by 'PASSWORD';
mysql> flush privileges;

Nginx四层负载均衡配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim /etc/nginx.conf

# 加入如下内容

stream {
upstream mysql {
server 192.168.254.102:3306;
server 192.168.254.104:3306;
}

server {
listen 3306;
proxy_pass mysql;
}
}

重启nginx

1
nginx -s reload

测试

首先在101这台机器上分别连接102,104两台mysql,查看一下test.test中的数据


确认两边机器数据

再在101两次使用mysql客户端连接103,看看是否达到负载效果