类似凡科互动的网站,营销网站建设前期准备,薇诺娜经常在那个网站做特价,谷歌网站建设提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 简介 1.2 核心功能 1.3 关键特性 1.4 应用场景 二、安装 1.内核配置 2.编译安装 3. 建立配置文件 4. 添加为系统服务 5. 添加3和5运行级别下自启动… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 简介 1.2 核心功能 1.3 关键特性 1.4 应用场景 二、安装 1.内核配置 2.编译安装 3. 建立配置文件 4. 添加为系统服务 5. 添加3和5运行级别下自启动 三、调度算法 四、配置文件 五、负载均衡 5.1 7层负载 5.2 4层负载 六、配置syslog日志 七、keepalivehaproxy实现高可用 总结 前言 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性以下是今天的学习内容。 提示以下是本篇文章正文内容下面案例可供参考
一、概述
1.1 简介 HAProxy是一个免费的负载均衡软件可以运行于大部分主流的Linux操作系统上CentOS、Ubuntu、Debian、OpenSUSE、Fedora、麒麟、欧拉、UOS。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性。
1.2 核心功能 负载均衡L4和L7两种模式支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法 健康检查支持TCP和HTTP两种健康检查模式 会话保持对于未实现会话共享的应用集群可通过Insert Cookie/Rewrite Cookie/Prefix Cookie以及上述的多种Hash方式实现会话保持 SSLHAProxy可以解析HTTPS协议并能够将请求解密为HTTP后向后端传输 HTTP请求重写与重定向 监控与统计HAProxy提供了基于Web的统计信息页面展现健康状态和流量数据。基于此功能使用者可以开发监控程序来监控HAProxy的状态
1.3 关键特性 采用单线程、事件驱动、非阻塞模型减少上下文切换的消耗能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。 大量精细的性能优化如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等这些技术使得HAProxy在中等负载下只占用极低的CPU资源。 HAProxy大量利用操作系统本身的功能特性使得其在处理请求时能发挥极高的性能通常情况下HAProxy自身只占用15%的处理时间剩余的85%都是在系统内核层完成的。 HAProxy作者在8年前2009年使用1.4版本进行了一次测试单个HAProxy进程的处理能力突破了10万请求/秒并轻松占满了10Gbps的网络带宽。
1.4 应用场景 高并发要求较高的场合下
二、安装
1.内核配置
内核配置实验环境可有可无 net.ipv4.tcp_tw_reuse 1 net.ipv4.ip_local_port_range 1024 65023 net.ipv4.tcp_max_syn_backlog 10240 net.ipv4.tcp_max_tw_buckets 400000 net.ipv4.tcp_max_orphans 60000 net.ipv4.tcp_synack_retries 3 net.core.somaxconn 10000 2.编译安装 wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz make PREFIX/usr/local/haproxy TARGETlinux2628 make install PREFIX/usr/local/haproxy
3. 建立配置文件 从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径“/etc/haproxy/haproxy.cfg” mkdir /etc/haproxy touch /etc/haproxy/haproxy.cfg 4. 添加为系统服务 cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy
cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxyvim /etc/init.d/haproxy 修改 35行 内容为 BIN/usr/local/haproxy/sbin/$BASENAME #!/bin/sh
#
# chkconfig: - 85 15
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \
# for high availability environments.
# processname: haproxy
# config: /etc/haproxy/haproxy.cfg
# pidfile: /var/run/haproxy.pid# Script Author: Simon Matter simon.matterinvoca.ch
# Version: 2004060600# Source function library.
if [ -f /etc/init.d/functions ]; then. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then. /etc/rc.d/init.d/functions
elseexit 0
fi# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ ${NETWORKING} no ] exit 0# This is our service name
BASENAMEbasename $0
if [ -L $0 ]; thenBASENAMEfind $0 -name $BASENAME -printf %lBASENAMEbasename $BASENAME
fiBIN/usr/local/haproxy/sbin/$BASENAMECFG/etc/$BASENAME/$BASENAME.cfg
[ -f $CFG ] || exit 1PIDFILE/var/run/$BASENAME.pid
LOCKFILE/var/lock/subsys/$BASENAMERETVAL0start() {quiet_checkif [ $? -ne 0 ]; thenecho Errors found in configuration file, check it with $BASENAME check.return 1fiecho -n Starting $BASENAME: daemon $BIN -D -f $CFG -p $PIDFILERETVAL$?echo[ $RETVAL -eq 0 ] touch $LOCKFILEreturn $RETVAL
}
stop() {echo -n Shutting down $BASENAME: killproc $BASENAME -USR1RETVAL$?echo[ $RETVAL -eq 0 ] rm -f $LOCKFILE[ $RETVAL -eq 0 ] rm -f $PIDFILEreturn $RETVAL
}restart() {quiet_checkif [ $? -ne 0 ]; thenecho Errors found in configuration file, check it with $BASENAME check.return 1fistopstart
}reload() {if ! [ -s $PIDFILE ]; thenreturn 0fiquiet_checkif [ $? -ne 0 ]; thenecho Errors found in configuration file, check it with $BASENAME check.return 1fi$BIN -D -f $CFG -p $PIDFILE -sf $(cat $PIDFILE)
}check() {$BIN -c -q -V -f $CFG
}quiet_check() {$BIN -c -q -f $CFG
}rhstatus() {status $BASENAME
}condrestart() {[ -e $LOCKFILE ] restart || :
}# See how we were called.
case $1 instart)start;;stop)stop;;restart)restart;;
reload)reload;;condrestart)condrestart;;status)rhstatus;;check)check;;*)echo $Usage: $BASENAME {start|stop|restart|reload|condrestart|status|check}exit 1
esacexit $? chmod x /etc/init.d/haproxy chkconfig --add /etc/init.d/haproxy 5. 添加3和5运行级别下自启动 chkconfig haproxy --level 35 on chkconfig --list 启动haproxy service haproxy start service haproxy stop service haproxy restart | reload systemctl daemon-reload 也可以使用systemctl进行启停 测试
在web服务器中安装Nginxyum添加访问文件
14 echo nginx1 /usr/share/nginx/html/index.html
15 echo nginx2 /usr/share/nginx/html/index.html
在13里进行访问页面访问很慢在终端里更方便观察 三、调度算法 roundrobin表示简单的轮询。 static-rr表示根据权重。 leastconn表示最少连接者先处理。 source表示根据请求的源 IP类似 Nginx 的 IP_hash 机制。 ri表示根据请求的 URI。 rl_param表示根据 HTTP 请求头来锁定每一次 HTTP 请求。 rdp-cookie(name)表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。
四、配置文件
配置项 global用于配置全局参数 default用于配置所有frontend和backend的默认属性 frontend用于配置前端服务即HAProxy自身提供的服务实例 backend用于配置后端服务即HAProxy后面接的服务实例组 listenfrontendbackend的组合配置可以理解成更简洁的配置方法
五、负载均衡 5.1 7层负载 配置负载
global daemon maxconn 256 pidfile /var/run/haproxy/haproxy.pid defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:8080 default_backend servers backend servers server server1 192.168.156.14:80 maxconn 32 server server1 192.168.156.15:80 maxconn 32 配置监控页面 listen stats #定义监控页面 bind *:1080 #绑定端口1080 stats refresh 30s #每30秒更新监控数据 stats uri /stats #访问监控页面的uri stats realm HAProxy\ Stats #监控页面的认证提示 stats auth admin:admin #监控页面的用户名和密码 5.2 4层负载
配置负载
global daemon maxconn 256 pidfile /var/run/haproxy/haproxy.pid defaults mode tcp timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:8080 default_backend servers backend servers balance roundrobin #轮询 #balance source #保持会话 server server1 127.0.0.1:8000 maxconn 32 server server2 127.0.0.1:8090 maxconn 32 不支持监控状态
六、配置syslog日志
touch /etc/rsyslog.d/haproxy.conf
$ModLoad imudp $UDPServerRun 514 $FileCreateMode 0644 #日志文件的权限 $FileOwner root #日志文件的owner local0.* /var/log/haproxy.log #local0接口对应的日志输出文件 local1.* /var/log/haproxy_warn.log #local1接口对应的日志输出文件 七、keepalivehaproxy实现高可用
在上面实验的基础上安装keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedbal_defs {router_id LVS_DEVEL
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {script killall -0 haproxy #使用killall -0检查haproxy实例是否存在性能高于ps命令interval 2 #脚本运行周期weight 2 #每次检查的加权权重值
}vrrp_instance HA_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.156.100}track_script {chk_haproxy #对应的健康检查配置}
}添加一台虚拟机192.168.156.16
安装keepalived 和haproxy
keepalived配置
global_defs { router_id LVS_DEVEL } #HAProxy健康检查配置 vrrp_script chk_haproxy { script killall -0 haproxy #使用killall -0检查haproxy实例是否存在性能高于ps命令 interval 2 #脚本运行周期 weight 2 #每次检查的加权权重值 }
vrrp_instance HA_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.115.200 } track_script { chk_haproxy #对应的健康检查配置 } }
haproxy配置
global daemon maxconn 256 pidfile /var/run/haproxy/haproxy.pid defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:80 default_backend servers backend servers server server1 192.168.115.128:80 maxconn 32 server server2 192.168.115.131:80 maxconn 32 分别重启两个服务
systemctl restart haproxy
systemctl restart keepalived 测试 停掉第一台的keepalived 查看第二台的IP