博主vx: haitangyijiusu 。很高兴认识你!偶尔带huo,都是精挑细选信得过的产品,欢迎来支持,期待和您相遇!
环境准备:
- centos7
- haproxy1.9 (http://www.haproxy.org/#down)
haproxy是七层负载均衡。
1、解压
tar -zxvf haproxy-1.9.16.tar.gz
cd haproxy-1.9.16
2、安装
make TARGET=linux31
make install PREFIX=/usr/local/haproxy
mkdir /usr/local/haproxy/conf
cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
3、修改配置文件,配置文件全部内容:
#
# demo config for Proxy mode
#global
maxconn 5000
ulimit-n 16384
log 127.0.0.1 local0
uid 200
gid 200
chroot /var/empty
nbproc 4
daemondefaults
timeout connect 5000 #连接超时时间。 单位:ms 毫秒
timeout client 50000 #客户端连接超时时间
timeout server 50000 #服务器端连接超时时间
mode httpfrontend test-proxy
# bind 192.168.200.10:8080
bind 192.168.20.26:8080
mode http
log global
option httplog
option dontlognull
option nolinger
option http_proxy
maxconn 8000
timeout client 30s# layer3: Valid users
acl allow_host src 192.168.200.150/32
http-request deny if !allow_host# layer7: prevent private network relaying
acl forbidden_dst url_ip 192.168.0.0/24
acl forbidden_dst url_ip 172.16.0.0/12
acl forbidden_dst url_ip 10.0.0.0/8
http-request deny if forbidden_dstdefault_backend test-proxy-srv
frontend py-front
bind 0.0.0.0:8087
default_backend python-lch
timeout client 30s
backend python-lch
timeout connect 5s
server s1 192.168.20.26:8088
server s2 192.168.20.26:8089
backend test-proxy-srv
mode http
timeout connect 5s
timeout server 5s
retries 2
option nolinger
option http_proxy# layer7: Only GET method is valid
acl valid_method method GET
http-request deny if !valid_method# layer7: protect bad reply
http-response deny if { res.hdr(content-type) audio/mp3 }
3、启动haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
至此,安装完毕。后面我会其具体的服务进行详细演示。
2021-01-24补充:
4、起2个服务
此处为了方便,使用Python27起2个python服务演示。分别起8088、8089两个端口服务,并分别在其目录下创建py_project-1.txt py_project-2.txt两个文件加以区分。
起第一个服务:
mkdir -p /home/lch/py_project-1
cd /home/liuchaohua/py_project-1
touch py_project-1.txt
python -m SimpleHTTPServer 8088
服务启动,如下图:
起第二个服务:
mkdir -p /home/lch/py_project-2
cd /home/liuchaohua/py_project-2
touch py_project-2.txt
python -m SimpleHTTPServer 8089
服务启动,如下图:
5、验证
多次执行 wget http://192.168.20.26:8087/
vim 打开下载的页面 “index.html” 可以看到会随机下载到 py_project-1.txt 和 py_project-2.txt 文件。
这样,负载均衡的目的就达到了。
6、配置文件解释说明, 里面会有注释帮助大家理解
#
# demo config for Proxy mode
#
global
maxconn 20000
#设定HAProxy进程可接受的最大并发数
ulimit-n 41000
#linux命令行选项,等同于上参数
log 127.0.0.1 local0
#全局的日志中配置,local0 是日志设备 info(err,warnig,minfo,debug)为日志级别,使用rsyslog
uid 200
gid 200
#用户和组 ,可以用uid,gid代替
chroot /var/empty
nbproc 1
#HAProxy启动时可创建的进程数,配合daemon参数使用,默认只启动一个进程,该值应小于cpu核数。
daemon
#进程后台运行,(推荐模式)
defaults
mode http
#实例的默认运行模式
retries 3
#连接后端服务器的失败重试次数
timeout connect 10s
#连接服务器的最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout client 20s
#连接客户端发送数据时最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout server 30s
#服务器回应给客户端数据发送的最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout check 5s
#对后端服务器的检查超时时间,默认单位为毫秒,可使用其它时间单位
listen admin_stats
bind *:9188
#设置监控页面的访问地址,该地址表示为监听本机所有地址的9188端口
mode http
log global
#使用全局日志
stats refresh 30s
#监控页面自动刷新时间
stats uri /haproxy-status
#uri的访问后缀
stats realm welcome login\ Haproxy
#文本提示信息
stats auth admin:admin~!@
#统计页面的用户名和地址,每行一个
stats hide-version
#隐藏统计页面的HAProxy的版本信息
stats admin if TRUE
#可手工启动或禁用后端真实服务器,仅在1.4.9版本后有效
frontend test-proxy
bind *:80
#定义监听地址
mode http
log global
option httplog
#启用日志记录
option forwardfor
#获取客户端真实ip。通过日志“X-Forwarded-For”查看
option httpclose
#HAProxy在完成一次请教请求连接后,将主动关闭该连接,对性能非常有帮助
option dontlognull
option nolinger
option http_proxy
maxconn 8000
timeout client 30s
# layer3: Valid users
# acl allow_host src 192.168.200.150/32
acl allow_host src 192.168.10.0/24
#acl 控制,运行192.168.10.0/24网段的访问请求
#acl使用方法如下
#acl 自定义acl名称 acl方法 -i [ 匹配的路径或文件 ]
# acl allow_host src 0.0.0.0/24
http-request deny if !allow_host
#拒绝连接请求除allow_host外
# layer7: prevent private network relaying
# acl forbidden_dst url_ip 192.168.0.0/24
# acl forbidden_dst url_ip 172.16.0.0/12
acl forbidden_dst url_ip 192.168.20.0/24
http-request deny if forbidden_dst
default_backend test-proxy-srv
backend test-proxy-srv
mode http
timeout connect 5s
timeout server 5s
retries 2
option redispatch
#应用于cookie保持的环境
option abortonclose
#自动结束长时间连接
option nolinger
option http_proxy
# option httpchk GET /index.php
balance roundrobin
cookie SERVERID
server web1 192.168.10.101:8080 cookie server1 weight 6 check inter 2000 rise 2 fall
3
#后端服务器真实地址
server web2 192.168.10.101:8888 cookie server2 weight 6 check inter 2000 rise 2 fall
3
# layer7: Only GET method is valid
acl valid_method method GET
acl valid_method method POST
http-request deny if !valid_method
# layer7: protect bad reply
http-response deny if { res.hdr(content-type) audio/mp3 }