Linux下搭建HAproxy+keepalive高可用负载均衡架构

Linux下搭建HAproxy+keepalive高可用负载均衡架构*

1、首先需要准备两台主备机器,两台web服务器:

主机192.168.0.8
备机192.168.0.9
web1192.168.0.79
web2192.168.0.80

HAproxy安装与配置:

简介:
1)HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

2)HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

3)HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

4)HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

  1. yum安装:yum -y install haproxy

  2. 编辑配置文件:vim /etc/haproxy/haproxy.cfg

    配置说明、参考
    ###########全局配置######### global   log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出]    log 127.0.0.1 local1 notice #定义haproxy 日志级别[error warringinfo debug]    daemon #以后台形式运行harpoxy    nbproc 1 #设置进程数量    maxconn 4096 #默认最大连接数,需考虑ulimit-n限制   
    #userhaproxy #运行haproxy的用户   
    #group haproxy #运行haproxy的用户所在的组   
    #pidfile/var/run/haproxy.pid #haproxy 进程PID文件   
    #ulimit-n 819200 #ulimit 的数量限制
    #chroot /usr/share/haproxy #chroot运行路径   
    #debug #haproxy调试级别,建议只在开启单进程的时候调试   
    #quiet

    ########默认配置############ defaults    log global    mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK    option httplog#日志类别,采用httplog    option dontlognull #不记录健康检查日志信息    retries 2
    #两次连接失败就认为是服务器不可用,也可以通过后面设置   
    #option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip    option httpclose
    #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现   
    #option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持    option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接    maxconn 4096
    #默认的最大连接数

    timeout connect 5000ms #连接超时    timeout client 30000ms #客户端超时 timeout
    server 30000ms #服务器超时   
    #timeout check 2000 #心跳检测超时
    #timeout http-keep-alive10s #默认持久连接超时时间   
    #timeout http-request 10s
    #默认http请求超时时间   
    #timeout queue 1m #默认队列超时时间    balance roundrobin #设置默认负载均衡方式,轮询方式   
    #balance source #设置默认负载均衡方式,类似于nginx的ip_hash   
    #balnace leastconn #设置默认负载均衡方式,最小连接数

    ########统计页面配置######## listen stats    bind 0.0.0.0:1080 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称    mode http #http的7层模式    option httplog #采用http日志格式   
    #log 127.0.0.1 local0 err #错误日志记录 maxconn 10 #默认的最大连接数    stats refresh 30s #统计页面自动刷新时间    stats uri /stats #统计页面url    stats realm
    XingCloud\ Haproxy #统计页面密码框上提示文本    stats auth admin:admin
    #设置监控页面的用户和密码:admin,可以设置多个用户名    stats auth Frank:Frank #设置监控页面的用户和密码:Frank    stats hide-version #隐藏统计页面上HAProxy的版本信息    stats admin if TRUE #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)

    ########设置haproxy 错误页面#####
    #errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
    #errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
    #errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
    #errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
    #errorfile 504 /home/haproxy/haproxy/errorfiles/504.http

    ########frontend前端配置############## frontend main    bind *:80 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。 acl web hdr(host) -i www.abc.com
    #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则,。    acl img hdr(host) -i img.abc.com #如果访问img.abc.com这个域名,就触发img规则。
    use_backend webserver if web
    #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域。    use_backend imgserver if img
    #如果上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个作用域。    default_backend dynamic #不满足则响应backend的默认页面

    ########backend后端配置############## backend webserver #webserver作用域    mode http    balance roundrobin #balance roundrobin 负载轮询, balance
    source 保存session值,支持static-rr,leastconn,first,uri等参数    option httpchk
    /index.html HTTP/1.0 #健康检查, 检测文件,如果分发到后台index.html访问不到就不再分发给它   
    server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2
    fall 3 server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000
    rise 2 fall 3   
    #cookie 1表示serverid为1,check inter 1500 是检测心跳频率   
    #rise2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

    backend imgserver    mode http    option httpchk /index.php    balance
    roundrobin   . server img01 192.168.137.101:80 check inter 2000 fall
    3 server img02 192.168.137.102:80 check inter 2000 fall 3

    backend dynamic    balance roundrobin    server test1
    192.168.1.23:80 check maxconn 2000    server test2 192.168.1.24:80 check maxconn 2000

    listen tcptest    bind 0.0.0.0:5222    mode tcp    option tcplog
    #采用tcp日志格式    balance source   
    #log 127.0.0.1 local0 debug    server s1 192.168.100.204:7222 weight 1    server s2 192.168.100.208:7222 weight 1

按自己所需配置完文件之后,最后启动haproxy:systemctl start haproxy

Keepalived介绍
keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

  1. 安装keepalived:# yum install keepalived -y
  2. 配置文件:vim /etc/keepalived/keepalived.conf
    示例:
! Configuration File for keepalived global_defs {                     
#全局定义部分
    notification_email {                          #设置报警邮件地址,可设置多个
        acassen@firewall.loc                      #接收通知的邮件地址
    }                        
    notification_email_from test0@163.com         #设置 发送邮件通知的地址
    smtp_server smtp.163.com                      #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
    smtp_connect_timeout 30                       #设置 连接 smtp server的超时时间
    router_id LVS_DEVEL                           #主机标识,用于邮件通知
    vrrp_skip_check_adv_addr                   
    vrrp_strict                                   #严格执行VRRP协议规范,此模式不支持节点单播
    vrrp_garp_interval 0                       
    vrrp_gna_interval 0     
    script_user keepalived_script                 #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
    enable_script_security                        #如过路径为非root可写,不要配置脚本为root用户执行。 }       

vrrp_script chk_nginx_service {                   #VRRP 脚本声明
    script "/etc/keepalived/chk_nginx.sh"         #周期性执行的脚本
    interval 3                                    #运行脚本的间隔时间,秒
    weight -20                                    #权重,priority值减去此值要小于备服务的priority值
    fall 3                                        #检测几次失败才为失败,整数
    rise 2                                        #检测几次状态为正常的,才确认正常,整数
    user keepalived_script                        #执行脚本的用户或组 }                                             

vrrp_instance VI_1 {                              #vrrp 实例部分定义,VI_1自定义名称
    state MASTER                                  #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
    interface ens33                               #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
    virtual_router_id 51                          #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
    priority 100                                  #定义优先级,数字越大,优先级越高。
    advert_int 1                                  #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
    authentication {                              #设置验证类型和密码,两个节点必须一致
        auth_type PASS                        
        auth_pass 1111                        
    }                                         
    virtual_ipaddress {                           #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.119.130                       
    }
    track_script {                                #脚本监控状态
        chk_nginx_service                         #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
    }
        notify_master "/etc/keepalived/start_haproxy.sh start"  #当前节点成为master时,通知脚本执行任务
        notify_backup "/etc/keepalived/start_haproxy.sh stop"   #当前节点成为backup时,通知脚本执行任务
        notify_fault  "/etc/keepalived/start_haproxy.sh stop"   #当当前节点出现故障,执行的任务;  }                                             

virtual_server 192.168.119.130 80  {         
#定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
    delay_loop 6                              #每隔6秒查询realserver状态
    lb_algo rr                                #后端调试算法(load balancing algorithm)
    lb_kind DR                                #LVS调度类型NAT/DR/TUN
    #persistence_timeout 60                   同一IP的连接60秒内被分配到同一台realserver
    protocol TCP                              #用TCP协议检查realserver状态
    real_server 192.168.119.120 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }                                     
    }                                         
    real_server 192.168.119.121 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }                                     
    }                                          }                                             

vrrp_instance VI_2 {                          #vrrp 实例部分定义,VI_1自定义名称
    state   BACKUP                            #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP 分别表示(主|备)
    interface ens33                           #网卡设置,绑定vip的子接口,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
    virtual_router_id 52                      #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
    priority 90                               #定义优先级,数字越大,优先级越高。
    advert_int 1                              #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
    authentication {                          #设置验证类型和密码,两个节点必须一致
        auth_type PASS                        
        auth_pass 1111                        
    }                                         
    virtual_ipaddress {                       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.119.131                       
    }                                          }                                             

virtual_server 192.168.119.131 80 {          
#定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
    delay_loop 6                              #每隔6秒查询realserver状态
    lb_algo rr                                #后端调试算法(load balancing algorithm)
    lb_kind DR                                #LVS调度类型NAT/DR/TUN
    #persistence_timeout 60                   #同一IP的连接60秒内被分配到同一台realserver
    protocol TCP                              #用TCP协议检查realserver状态
    real_server 192.168.119.120 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }                                     
    }                                         
    real_server 192.168.119.121 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }
    } }
  1. 按自己所需配置完成后启动keepalived :#keepalived -D
  2. 验证:

1)关闭主keepalived,VIP是否切换至备机,业务是否正常,恢复原状;(验证keepalived高可用)

2)关闭主HAproxy,VIP是否切换至备机,业务是否正常,恢复原状;(验证HAproxy高可用)

3)关闭后台服务器web1,业务是否正常。(验证HAproxy状态检查)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值