目录
LVS在企业中康复在能力很强,但存在不足:
Haproxy是一款可以供高可用性、负载均衡和基于TCP和HTTP应用的代理软件
非常适用于并发大(并发达1w以上)web站点,可保持站点的会话保持或七层处理
- 1.关闭防火墙:
- systemctl stop firewalld
- setenforce 0
-
- 2.下载安装包(或者自行上传):
- wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
-
- 2.安装依赖和环境:
- yum install -y zlib-devel pcre-devel openssl-devel systemd-devel pcre-devel bzip2-devel gcc gcc-c++ make
-
- 3.编译安装Haproxy(我这里是自行上传的2.8.3):
- cd /data/haproxy-2.8.3
-
- make PREFIX=/usr/local/haproxy ARCH=x86_64 TARGET=31 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
- make install PREFIX=/usr/local/haproxy
-
- 4.创建登录用户:
- useradd -M -s /sbin/nologin haproxy
- 5.创建配置文件目录:
- mkdir -p /usr/local/haproxy/conf
- cd /usr/local/haproxy/conf
- vim haproxy.cfg
-
-
- global #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
- #将info(及以上)的日志发送到rsyslog的local0接口,将warning(及以上)的日志发送到rsyslog的local1接口
- log 127.0.0.1 local0 info
- log 127.0.0.1 local1 warning
-
- maxconn 30000 #最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18
-
- #chroot /var/lib/haproxy #修改haproxy工作目录至指定目录,一般需将此行注释掉
- pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件
- user haproxy #以指定的用户名身份运行haproxy进程
- group haproxy #以指定的组名运行haproxy,以免因权限问题带来风险
- daemon #让haproxy以守护进程的方式工作于后台
- #nbproc 1 #指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。haproxy是单进程、事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启多进程
- spread-checks 2 #在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。
-
- defaults #配置默认参数,这些参数可以被用到listen,frontend,backend组件
- log global #所有前端都默认使用global中的日志配置
- mode http #模式为http(7层代理http,4层代理tcp)
- option http-keep-alive #使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-close
- option forwardfor #记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段
- option httplog #开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplog
- option dontlognull #不在日志中记录空连接
- option redispatch #当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上
- option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
- maxconn 20000 #最大连接数,“defaults”中的值不能超过“global”段中的定义
- retries 3 #定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用
- timeout http-request 2s #默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发
- timeout queue 3s #默认客户端请求在队列中的最大时长
- timeout connect 1s #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容
- timeout client 10s #默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeout
- timeout server 2s #默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeout
- timeout http-keep-alive 10s #默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout client
- timeout check 2s #和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)
-
- frontend http-in
- bind *:80
-
- acl url_jsp path_end -i .jsp
-
- use_backend tomcat_server if url_jsp
-
- default_backend nginx_server
-
- backend nginx_server
- balance roundrobin
- option httpchk GET /test.html
-
- server ngx01 192.168.80.11:80 check inter 2000 fall 3 rise 2
- server ngx02 192.168.80.12:80 check inter 2000 fall 3 rise 2
-
- backend tomcat_server
- balance roundrobin
- option http-server-close
- cookie HA_STICKY_dy insert indirect nocache
- server tomcat01 192.168.80.20:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
- server tomcat02 192.168.80.30:8080 cookie tomcat02 check inter 2000 fall 3 rise 2
-
- listen stats
- bind *:1080
- stats enable
- stats refresh 30s
- stats uri /stats
- stats realm HAProxy\ Stats
- stats auth admin:admin
-
- cp /opt/haproxy-2.8.3/examples/haproxy.init /etc/init.d/haproxy
- chmod +x haproxy
- chkconfig --add /etc/init.d/haproxy
-
- ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
- service haproxy start 或 /etc/init.d/haproxy start
见前面博客........
因为动态页面做了cookie会话保持,所以需要清理历史记录才能换服务器
步骤同上
- 1.关闭防火墙:
- systemctl disable --now firewalld
- setenforce 0
-
- 2.下载keepalived
- yum -y install keepalived
-
- 3.编写健康检测预防脑裂脚本:
- vim /etc/keepalived/chk_haproxy.sh
- #!/bin/bash
- #使用killall -0检查haproxy实例是否存在,性能高于ps命令
- if ! killall -0 haproxy; then
- systemctl stop keepalived
- fi
-
- chmod +x /etc/keepalived/chk_haproxy.sh
-
-
- 4.编写keepalived配置文件:
-
- 主master:
-
- vrrp_script chk_http_port {
- script "/etc/keepalived/chk_haproxy.sh" #心跳执行的脚本,检测nginx是否启动
- interval 2 #(检测脚本执行的间隔)
- weight 2 #权重
- }
- #vrrp 实例定义部分
- vrrp_instance VI_1 {
- state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
- interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
- virtual_router_id 66 # 虚拟路由编号,主从要一直
- priority 100 # 优先级,数值越大,获取处理请求的优先级越高
- advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
- #授权访问
- authentication {
- auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
- auth_pass 1111
- }
- track_script {
- chk_http_port #(调用检测脚本)
- }
- virtual_ipaddress {
- 192.168.88.200 # 定义虚拟ip(VIP),可多设,每行一个
- }
- }
-
- 5.开启keepalived:
- systemctl start keepalived
-
- ip a 查看vip地址
- 安装keepalived 步骤同上:
-
- 备服务器BACKUP:
-
- vim /etc/keepalived/chk_haproxy.sh
- #!/bin/bash
- #使用killall -0检查haproxy实例是否存在,性能高于ps命令
- if ! killall -0 haproxy; then
- systemctl stop keepalived
- fi
-
- chmod +x /etc/keepalived/chk_haproxy.sh
- vrrp_script chk_http_port {
- script "/etc/keepalived/chk_haproxy.sh" #心跳执行的脚本,检测nginx是否启动
- interval 2 #(检测脚本执行的间隔)
- weight 2 #权重
- }
- #vrrp 实例定义部分
- vrrp_instance VI_1 {
- state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
- interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
- virtual_router_id 66 # 虚拟路由编号,主从要一直
- priority 99 # 优先级,数值越大,获取处理请求的优先级越高
- advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
- #授权访问
- authentication {
- auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
- auth_pass 1111
- }
- track_script {
- chk_http_port #(调用检测脚本)
- }
- virtual_ipaddress {
- 192.168.88.200 # 定义虚拟ip(VIP),可多设,每行一个
- }
- }
-
- 开启keepalived:
- systemctl start keepalived