云网牛站
所在位置:首页 > Linux云服务器 > CentOS 7:使用HAProxy实现Nginx负载均衡

CentOS 7:使用HAProxy实现Nginx负载均衡

2017-10-19 22:14:30作者:Linux编辑稿源:topspeedsnail

HAProxy是一款功能强大、灵活好用的反向代理的开源软件,它提供了负载均衡、服务器代理的功能。HAProxy是Willy Tarreau使用C语言编写的,它支持SSL、压缩、keep-alive、自定义日志格式和header重写。

HAProxy是轻量级的负载均衡和代理服务软件,占用系统资源较少。很多大型的网站都在使用它,例如Github、StackOverflow。

下面我安装配置HAProxy做为两个Nginx服务器的负载均衡。一共需要使用3个服务器,在一台机器上安装HAProxy,另两台机器安装Nginx服务。

CentOS 7:使用HAProxy实现Nginx负载均衡

 

HAProxy的基本概念

4层和7层

HAProxy可以使用两种模式运行:TCP 4层模式和HTTP 7层模式。TCP模式:HAProxy把原始TCP数据包从客户端转向到应用服务器;HTTP模式:解析http请求,然后转向到web服务器。我们将使用HTTP 7层模式。

负载均衡算法

HAProxy使用负载均衡算法决定把请求发送给哪个服务器,使用的算法:

Roundrobin-轮流算法

这是最简单的负载均衡算法。对每个新连接,总是下一个后端服务器处理。如果到达最后一个后端服务器,从头开始。

Lastconn

有最少连接的后端服务器处理新请求。当请求量较大时非常好。

Source

根据客户端IP决定哪个后端服务器处理。如果IP1是server1处理,那么这个IP1的所有请求都由server1处理。根据IP地址的哈希值决定后端服务器。

 

系统要求

3个CentOS 7服务器:

处理负载均衡的HAProxy服务器:192.168.0.101

Nginx1服务器:192.168.0.108

Nginx2服务器:192.168.0.109

 

第一步

编辑HAProxy服务器(102.168.0.101)的/etc/hosts:

vim /etc/hosts

添加Nginx1和Nginx2的主机名:

192.168.0.108    nginx1.your_domain.com     nginx1

192.168.0.109    nginx2.your_domain.com     nginx2

保存退出。

同样,编辑两个Nginx服务器的/etc/hosts,添加:

192.168.0.101    loadbalancer

在两个Nginx服务器上都要设置。

 

第二步

在HAProxy服务器上安装HAProxy:

# yum update

# yum install haproxy

haproxy的配置文件位于/etc/haproxy/。为了防止出错,先备份原始配置文件:

# cd /etc/haproxy/

# mv haproxy.cfg haproxy.cfg.backup

编辑配置文件:

# vim haproxy.cfg

写入如下内容:

#---------------------------------------------------------------------

# 全局设置

#---------------------------------------------------------------------

global

log         127.0.0.1 local2     # 日志

chroot      /var/lib/haproxy

pidfile     /var/run/haproxy.pid

maxconn     4000                

user        haproxy             # Haproxy在haproxy用户和组下运行

group       haproxy

daemon

# 开启 stats unix socket

stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------

# 基本设置

#---------------------------------------------------------------------

defaults

mode                    http

log                     global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor       except 127.0.0.0/8

option                  redispatch

retries                 3

timeout http-request    10s

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                 3000

#---------------------------------------------------------------------

# HAProxy Monitoring 配置

#---------------------------------------------------------------------

listen haproxy3-monitoring *:8080                # Haproxy Monitoring 的使用端口:8080

mode http

option forwardfor

option httpclose

stats enable

stats show-legends

stats refresh 5s

stats uri /stats                            # HAProxy monitoring的网址

stats realm Haproxy\ Statistics

stats auth testuser:test1234                # 登录Monitoring的用户和密码

stats admin if TRUE

default_backend app-main

#---------------------------------------------------------------------

# FrontEnd 配置

#---------------------------------------------------------------------

frontend main

bind *:80

option http-server-close

option forwardfor

default_backend app-main

#---------------------------------------------------------------------

# 使用roundrobin做为负载均衡算法

#---------------------------------------------------------------------

backend app-main

balance roundrobin                                    # 使用的负载均衡算法

option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    # 检查nginx服务器是否连通- 200状态码

server nginx1 192.168.0.108:80 check                  # Nginx1 

server nginx2 192.168.0.109:80 check                  # Nginx2

配置rsyslog

我们需要使用rsyslog记录HAProxy的日志,编辑rsyslog.conf配置文件,打开UDP的514端口:

# vim /etc/rsyslog.conf

去掉如下行的注释:

$ModLoad imudp

$UDPServerRun 514

如果你想指定特定IP,可以更改如下行:

$UDPServerAddress 127.0.0.1

保存退出。

创建rsyslog配置文件:

# vim /etc/rsyslog.d/haproxy.conf

写入如下内容:

local2.=info     /var/log/haproxy-access.log    # 访问日志

local2.notice    /var/log/haproxy-info.log      # haproxy执行信息

重启rsyslog:

# systemctl restart rsyslog

启动HAProxy:

# systemctl start haproxy

# systemctl enable haproxy

 

第三步

安装配置Nginx。

Nginx1和Nginx2服务器配置方法相同。

安装epel-release:

# yum install epel-release

安装Nginx:

# yum install nginx

创建index.html测试文件,Nginx1(192.168.0.108):

# cd /usr/share/nginx/html/

# echo "<h1>nginx1.your_domain.com</h1>" > index.html

Nginx2(192.168.0.109):

# cd /usr/share/nginx/html/

# echo "<h1>nginx2.your_domain.com</h1>" > index.html

启动Nginx服务:

# systemctl enable nginx

# systemctl start nginx

 

测试

测试nginx1、2,使用浏览器访问:

192.168.0.108

192.168.0.109

正常访问网站:http://192.168.0.101,如果有域名,指向这个IP。

登录HAProxy web管理页面:

http://192.168.0.101:8080/stats

你应该可以看到nginx、http请求的转发信息。

精选文章
热门文章