HAproxy服务及keepalived+haproxy高可用

本节主要学习AHproxy 的概述,安装,调度算法,配置文件,负载均衡,配置syslog日志,keepalived+haproxy实现高可用。


目录

一、概述

1、简介

2、核心功能

3、关键特性

4、应用场景

二、安装

1.内核配置

2.编译安装

3.建立配置文件

4.添加为系统服务

5.添加3和5运行级别下自启动

6.启动haproxy

三、调度算法

四、配置文件

五、负载均衡

1、7层负载

配置负载

配置监控页面

2、4层负载

配置负载

不支持监控状态

六、配置syslog

七、keepalived +haproxy实现高可用

1、keepalived配置

2、haproxy配置

3、分别重启两个服务

4、测试


一、概述

1、简介

       HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上(CentOS、Ubuntu、Debian、OpenSUSE、Fedora、麒麟、欧拉、UOS)。
       HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性。

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方式实现会话保持
SSL HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
HTTP 请求重写与重定向
监控与统计 HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态

3、关键特性

            采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
            大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。
            HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。
            HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。

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

HAproxy服务及keepalived+haproxy高可用_第1张图片

2.编译安装

                wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

                make PREFIX=/usr/local/haproxy TARGET=linux2628

                make install PREFIX=/usr/local/haproxy

HAproxy服务及keepalived+haproxy高可用_第2张图片

3.建立配置文件

                从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径“/etc/haproxy/haproxy.cfg”

                mkdir /etc/haproxy

                touch /etc/haproxy/haproxy.cfg

global #全局属性
    daemon  #以daemon方式在后台运行
    maxconn 256  #最大同时256连接
    pidfile /home/ha/haproxy/conf/haproxy.pid  #指定保存HAProxy进程号的文件
 
 
defaults #默认参数
    mode http  #http模式
    timeout connect 5000ms  #连接server端超时5s
    timeout client 50000ms  #客户端响应超时50s
    timeout server 50000ms  #server端响应超时50s
 
 
frontend http-in #前端服务http-in
    bind *:8080  #监听8080端口
    default_backend servers  #请求转发至名为"servers"的后端服务
 
 
backend servers #后端服务servers
    server server1 127.0.0.1:8000 maxconn 32  #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接

 

4.添加为系统服务

cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy

        vim  /etc/init.d/haproxy

修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME

HAproxy服务及keepalived+haproxy高可用_第3张图片

chmod +x /etc/init.d/haproxy

chkconfig --add /etc/init.d/haproxy

HAproxy服务及keepalived+haproxy高可用_第4张图片

5.添加3和5运行级别下自启动

chkconfig haproxy --level 35 on

HAproxy服务及keepalived+haproxy高可用_第5张图片

chkconfig --list

HAproxy服务及keepalived+haproxy高可用_第6张图片

 

6.启动haproxy

HAproxy服务及keepalived+haproxy高可用_第7张图片

三、调度算法

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后面接的服务)实例组
listen frontend+backend的组合配置,可以理解成更简洁的配置方法

HAproxy服务及keepalived+haproxy高可用_第8张图片

global #全局属性
    daemon  #以daemon方式在后台运行
    maxconn 256  #最大同时256连接
    pidfile /home/ha/haproxy/conf/haproxy.pid  #指定保存HAProxy进程号的文件
 
 
defaults #默认参数
    mode http  #http模式
    timeout connect 5000ms  #连接server端超时5s
    timeout client 50000ms  #客户端响应超时50s
    timeout server 50000ms  #server端响应超时50s
 
 
frontend http-in #前端服务http-in
    bind *:8080  #监听8080端口
    default_backend servers  #请求转发至名为"servers"的后端服务
 
 
backend servers #后端服务servers
    server server1 127.0.0.1:8000 maxconn 32  #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接


最大连接数maxconn
此参数根据应用的实际使用情况进行调整,推荐使用10240,同时“defaults”中的最大连接数的值不能超过“global”段中的定义
守护进程模式daemon
Haproxy 可以使用非守护进程模式启动,生产环境建议使用守护进程模式启动
负载均衡的并发进程数
nbproc
重试次数retries
主动关闭http 请求选项
option http-server-close
timeout http-keep-alive
优化建议
建议与当前服务器CPU核数相等或为其2倍此参数主要用于对群集节点的检查,如果节点多,且并发量大,设置为2次或3次;在服务器节点不多的情况下,可以设置5次或6次
建议在生产环境中使用此选项,避免由于timeout 时间设置过长导致http连接堆积
长连接超时时间
http 请求超时时间timeout client
timeout http-request

五、负载均衡

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 127.0.0.1:8000 maxconn 32  
server server2 127.0.0.1:8090 maxconn 32

HAproxy服务及keepalived+haproxy高可用_第9张图片

设置好两个web服务器

        nginx1  

HAproxy服务及keepalived+haproxy高可用_第10张图片

        nginx2

HAproxy服务及keepalived+haproxy高可用_第11张图片

浏览器查看

HAproxy服务及keepalived+haproxy高可用_第12张图片

 HAproxy服务及keepalived+haproxy高可用_第13张图片

 

命令查看

HAproxy服务及keepalived+haproxy高可用_第14张图片

 

配置监控页面

listen stats    #定义监控页面    
bind *:1080                   #绑定端口1080    
stats refresh 30s             #每30秒更新监控数据    
stats uri /stats              #访问监控页面的uri    
stats realm HAProxy\ Stats    #监控页面的认证提示    
stats auth admin:admin        #监控页面的用户名和密码

HAproxy服务及keepalived+haproxy高可用_第15张图片

 浏览器查看

HAproxy服务及keepalived+haproxy高可用_第16张图片

HAproxy服务及keepalived+haproxy高可用_第17张图片

 

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接口对应的日志输出文件

HAproxy服务及keepalived+haproxy高可用_第18张图片

 HAproxy服务及keepalived+haproxy高可用_第19张图片

七、keepalived +haproxy实现高可用

1、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服务及keepalived+haproxy高可用_第20张图片

2、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

HAproxy服务及keepalived+haproxy高可用_第21张图片

3、分别重启两个服务

HAproxy服务及keepalived+haproxy高可用_第22张图片

 

4、测试

keepalived+haproxy1

HAproxy服务及keepalived+haproxy高可用_第23张图片

keepalived+haproxy2

HAproxy服务及keepalived+haproxy高可用_第24张图片


 将keepalived+haproxy1 的keepalived服务停掉

 查看keepalived+haproxy2的地址

HAproxy服务及keepalived+haproxy高可用_第25张图片

你可能感兴趣的:(keepalived,proxy模式)