目录
HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。
Haproxy 有 8 种调度算法:
Haproxy服务器:192.168.64.10
Nginx 服务器1:192.168.64.40
Nginx 服务器2:192.168.64.50
- cd /opt
- wget http://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz
- # 将安装Haproxy所需软件包传到/opt目录下
- yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
-
- tar zxvf haproxy-2.8.3.tar.gz
- cd haproxy-2.8.3/
-
- make TARGET=linux-glibc PREFIX=/usr/local/haproxy
-
- make install PREFIX=/usr/local/haproxy
- # 编译安装haproxy
- useradd -M -s /sbin/nologin haproxy
-
- mkdir -p /usr/local/haproxy/conf
- cd /usr/local/haproxy/conf
-
- vim haproxy.cfg
-
- global
- log 127.0.0.1 local3
- maxconn 4096
- user nobody
- group nobody
- daemon
- defaults
- log global
- mode http
- maxconn 2048
- retries 3
- option redispatch
- stats uri /haproxy
- stats auth qianfeng:123
- timeout connect 5000
- timeout client 50000
- timeout server 50000
- 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.64.40:80 check inter 2000 fall 3 rise 2
- server ngx02 192.168.64.50: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.64.20:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
- server tomcat02 192.168.64.30:8080 cookie tomcat02 check inter 2000 fall 3 rise 2
-
- # 修改haproxy服务器配置
- vim /etc/init.d/haproxy
-
- #!/bin/bash
- #chkconfig: 2345 90 30
- #description: Haproxy Service Control Script
-
- PROGDIR=/usr/local/haproxy
- PROGNAME=haproxy
- DAEMON=$PROGDIR/sbin/$PROGNAME
- CONFIG=$PROGDIR/conf/$PROGNAME.cfg
- PIDFILE=/var/run/$PROGNAME.pid
- DESC="HAProxy daemon"
- SCRIPTNAME=/etc/init.d/$PROGNAME
-
- # Gracefully exit if the package has been removed.
- test -x $DAEMON || exit 0
-
- start()
- {
- echo -e "Starting $DESC: $PROGNAME\n"
- $DAEMON -f $CONFIG
- echo "......"
- }
-
- stop()
- {
- echo -e "Stopping $DESC: $PROGNAME\n"
- haproxy_pid="$(cat $PIDFILE)"
- kill $haproxy_pid
- echo "......"
- }
-
- restart()
- {
- echo -e "Restarting $DESC: $PROGNAME\n"
- $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
- echo "......"
- }
-
- case "$1" in
- start)
- start
- ;;
-
- stop)
- stop
- ;;
-
- restart)
- restart
- ;;
-
- *)
- echo "Usage: $SCRIPTNAME {start|stop|restart}"
- exit 1
- ;;
- esac
-
- exit 0
- cd /etc/init.d/
- chmod +x haproxy
- chkconfig --add /etc/init.d/haproxy
-
- ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
- service haproxy start 或 /etc/init.d/haproxy start

- yum install -y pcre-devel zlib-devel gcc gcc-c++ make
-
- useradd -M -s /sbin/nologin nginx
-
- cd /opt
- tar zxvf nginx-1.12.0.tar.gz -C /opt/
-
- cd nginx-1.12.0/
- ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
-
- make && make install
- # 以上两个服务器同时配置
-
- # 以下分开配置
- --192.168.64.40---
- echo "this is pc web" > /usr/local/nginx/html/test.html
-
- --192.168.64.50---
- echo "this is mo web" > /usr/local/nginx/html/test.html
-
- ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
-
- nginx
- #启动nginx 服务
浏览器访问 http://192.168.64.10/test.html 并不断刷新

- vim /usr/local/haproxy/conf/haproxy.cfg
-
- global
- log /dev/log local0 info
- log /dev/log local0 notice
- # 在global下添加日志存放位置
- # 将 haproxy 的 info 及 notice 日志分别记录到不同的日志文件中
-
- defaults
- log global

- vim /etc/rsyslog.d/haproxy.conf
-
- if ($programname == 'haproxy' and $syslogseverity-text == 'info')
- then -/var/log/haproxy/haproxy-info.log
- &~
- if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
- then -/var/log/haproxy/haproxy-notice.log
- &~
- # 需要修改rsyslog配置
- service rsyslog restart
- service haproxy restart
-
- tail -f /var/log/haproxy/haproxy-info.log
- # 查看haproxy的访问请求日志信息


配置主备keepalive服务器
- yum install -y keepalived
-
- vim /etc/keepalived/check_haproxy.sh
- #!/bin/bash
- if ! killall -0 haproxy; then
- systemctl stop keepalived
- fi
- # 使用killall -0检查haproxy实例是否存在,性能高于ps命令
-
-
- chmod +x /etc/keepalived/check_haproxy.sh
-
- vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
- global_defs {
- router_id LVS_HA1 #虚拟路由名称
- }
-
- vrrp_script chk_haproxy {
- script "/etc/keepalived/check_haproxy.sh" #指定健康检查脚本
- interval 2 #脚本运行周期
- weight 2 #每次检查的加权权重值
- }
- # HAProxy健康检查配置
-
- vrrp_instance VI_1 {
- state MASTER #本机实例状态,MASTER/BACKUP,备机配置文件中设置BACKUP
- interface ens33 #本机网卡名称,使用ifconfig命令查看
- virtual_router_id 51 #虚拟路由编号,主备机保持一致
- priority 100 #本机初始权重,备机设置小于主机的值
- advert_int 1 #争抢虚地址的周期,秒
- virtual_ipaddress {
- 192.168.64.100 #虚地址IP,主备机保持一致
- }
- track_script {
- chk_haproxy #对应的健康检查配置
- }
- }
- # 虚拟路由配置
-
- systemctl start keepalived
-
- ip a
- vim /etc/sysctl.conf
-
- net.ipv4.tcp_tw_reuse = 1
- #开启重用。允许将TIME-WAITsockets重用于新的TCP连接,默认0,表示关闭;
- net.ipv4.ip_local_port_range = 1024 65535
- #用于向外连接的端口范围。缺省情况下很小
- net.ipv4.tcp_max_syn_backlog = 10240
- #SYN队列长度,记录尚未收到客户端确认信息的连接请求的最大值。默认为1024,加大队列长度可容纳更多等待连接的网络连接数。
- net.ipv4.tcp_max_tw_buckets = 5000
- #表示系统同时保持TIME_WAIT最大数量,如果超过,TIME_WAIT将立刻被清除并打印警告信息。默认180000,此项参数可控制TIME_WAIT 最大数量
- net.ipv4.tcp_max_orphans = 3276800
- #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如超过,连接将即刻被复位并打印警告信息,这个限制仅是为防止简单的DoS攻击,不能过分依靠它或人为减小这个值,更应该增加这个值(如果增加内存后)
- net.ipv4.tcp_synack_retries = 3
- #为打开对端的连接,内核需发送个SYN并附带个回应前一个SYN的ACK。即三次握手中的第二次握手。该设置决定内核放弃连接前发SYN+ACK包的数量。
- net.core.somaxconn = 32768
- #如web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认511,所以有必要调整这个值。
-