haproxy2.0版本编译安装及配置

Linuxnetos

haproxy2.0版本编译安装及配置

实验操作需要三台服务器
192.168.216.13   nginx
192.168.216.16   node1
192.168.216.17   node2

思路:
1.后端服务器node1和node2部署http服务
2.设置node1的访问内容为16,node2的访问内容为17
3.node1和node2分别启动http服务并自身进行访问测试
4.安装haproxy软件包
5.查看内核版本进行编译安装
6.配置文件haproxy.cfg
7.设置haproxy开机自启
8.配置路由转发功能
9.防火墙放开9080监控端口
10.浏览器测试


操作:
1.后端服务器node1和node2部署http服务
node1:
# yum -y install httpd
node2:
# yum -y install httpd

2.设置node1的访问内容为16,node2的访问内容为17
node1:
# echo 16 > /var/www/html/index.html
node2:
# echo 17 > /var/www/html/index.html

3.node1和node2分别启动http服务并自身进行访问测试
node1:
# systemctl start httpd
# curl http://localhost
16

node2:
# systemctl start httpd
# curl http://localhost
17

4.安装对应依赖
# yum install -y openssl openssl-devel systemd-devel.x86_64
# tar -xf haproxy-2.0.7.tar.gz 
# cd haproxy-2.0.7

5.查看内核版本
# uname -r  
3.10.0-1062.4.3.el7.x86_64
# make TARGET=linux-glibc   USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1   
# make PREFIX=/usr/local/haproxy install
注意:
开启https
USE_OPENSSL=1
指定为systemd模式
USE_SYSTEMD=1
可指定安装目录
PREFIX=/usr/local/haproxy
命令默认为/usr/local/sbin/

6.配置文件haproxy.cfg
# cp -rp /root/haproxy-2.0.7/examples/option-http_proxy.cfg /etc/haproxy/

或者手动配置
下面为简单配置进行测试
# vim /etc/haproxy/haproxy.cfg
global                      #全局配置
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
    daemon
    nbproc 2
    maxconn 51200
    pidfile /run/haproxy.pid  

defaults                      #默认配置
    log global
    mode http
    option httplog
    option dontlognull
    retries 3
    option abortonclose
    timeout connect 5000ms
    timeout client 30000ms
    timeout server 60000ms
    balance roundrobin

listen stats              #haproxy监控配置
    bind 0.0.0.0:9080
    mode http
    option httplog
    maxconn 10
    stats refresh 30s
    stats uri /stats
    stats realm Haproxy Manager
    stats auth admin:mysqladmin
    stats hide-version
    stats admin if TRUE

listen http              # 负载均衡配置
    bind 127.0.0.1:80
    mode tcp 
    balance static-rr
    option tcplog
    server s1 192.168.216.17:80 weight 1 check port 80
    server s3 192.168.216.16:80 weight 1 check port 80 
]         

7.设置开机自启
vim /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg   
ExecStart=/usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

8.配置转发功能
# echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1

9.防火墙放开9080监控端口
# firewall-cmd --permanent --zone=public --add-port=9080/tcp
# firewall-cmd --reload

10.浏览器测试
http://192.168.216.13查看是否轮询显示16和17
http://192.168.216.13/stats  查看监控
----------------------------------------------------------------------
HAproxy 算法:

1.roundrobin
是基于权重进行轮询调度的算法,在服务器的性能分布比较均匀的时候,这是一种最公平、最合理的算法。此算法经常使用。
2.static-rr
也是基于权重进行轮询的调度算法,不过此算法为静态方法,在运行时调整其服务器权重不会生效。
3.source
是基于请求源 IP 的算法。此算法先对请求的源 IP 进行 hash 运算, 然后将结果与后端服务器的权重总数相除后转发至某个匹配的后端服务器。这种方式可以使同一个客户端 IP 的请求始终被转发到某特定的后端服务器。
4.leastconn
此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法,例如数据库负载均衡等。此算法不  适合会话较短的环境中,例如基于 HTTP 的应用。
5.uri
此算法会对部分或整个 URI 进行 hash 运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上。
6.uri_param
此算法会根据 URL 路径中的参数进行转发,这样可保证在后端真实服务器数量不变时,同一个用户的请求始终分发到同一台机器上。
7.hdr(<name>)
此算法根据 http 头进行转发,如果指定的 http 头名称不存在,则使roundrobin 算法进行策略转发


--------------------------------------------------------------------完整的haproxy配置文件
global
    log 127.0.0.1 local0 info 
    maxconn 4096
    user nobody 
    group nobody 
    daemon 
    nbproc 1
    pidfile /usr/local/haproxy/logs/haproxy.pid
defaults
    mode http 
    retries 3
    timeout connect 10s 
    timeout client 20s 
    timeout server 30s
    timeout check 5s
frontend www
    bind *:80 
    mode	http
    option	httplog 
    option	forwardfor
    option	httpclose 
    log	global
    #acl host_www	hdr_dom(host)	-i	www.zb.com
    #acl host_img	hdr_dom(host)	-i	img.zb.com
 
    #use_backend htmpool	if	host_www 
    #use_backend imgpool	if	host_img 
    default_backend	htmpool
backend htmpool
    mode http 
    option	redispatch
    option	abortonclose 
    balance  static-rr 
    cookie	SERVERID
    option	httpchk GET /index.jsp
    server	237server 192.168.81.237:8080 cookie server1 weight 6 check inter 2000 rise 2 fall 3
    server	iivey234 192.168.81.234:8080 cookie server2 weight 3 check inter 2000 rise 2 fall 3
backend imgpool
    mode		http 
    option	redispatch
    option	abortonclose
     balance  static-rr 
    cookie  SERVERID
    option	httpchk GET /index.jsp
    server	host236 192.168.81.236:8080 cookie server1 weight 6 check inter 2000 rise 2 fall 3
 
listen admin_stats
    bind 0.0.0.0:9188
    mode http
    log 127.0.0.1 local0 err 
    stats refresh 30s
    stats uri /haproxy-status
    stats realm welcome login\ Haproxy 
    stats auth admin:admin123
    stats hide-version 
    stats admin if TRUE
    
 
 
 
    
 
五、haproxy 解决集群 session 共享问题
Haproxy 二种方法保持客户端 session 一致

1、用户 IP 识别

haroxy 将用户 IP 经过 hash 计算后 指定到固定的真实服务器上(类似于 nginx 的 IP hash 指令)

配置指令: balance source

backend htmpool
    mode http 
    option redispatch
    option abortonclose 
    balance source 
    cookie SERVERID
    option httpchk GET /index.jsp
    server 237server 192.168.81.237:8080 cookie server1 weight 6 check inter 2000 rise 2 fall 3
    server iivey234 192.168.81.234:8080 cookie server2 weight 3 check inter 2000 rise 2 fall 3
2、 cookie 识别

haproxy 将WEB 服务端发送给客户端的 cookie 中插入(或添加加前缀)haproxy 定义的后端的服务器COOKIE ID。

配置指令例举 cookie SESSION_COOKIE insert indirect nocache

backend htmpool
    mode http 
    option	redispatch
    option	abortonclose 
    balance  static-rr 
    cookie	SERVERID   #cookie参数
    option	httpchk GET /index.jsp
    server	237server 192.168.81.237:8080 cookie server1 weight 6 check inter 2000 rise 2 fall 3   #server里面的cookie参数
    server	iivey234 192.168.81.234:8080 cookie server2 weight 3 check inter 2000 rise 2 fall 3   #server里面的cookie参数

————————————————
版权声明:本文为CSDN博主「qq_28710983」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28710983/article/details/82194404