haproxy+keepalive负载均衡

Haproxy负载均衡

概念

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性负载均衡,以及基于TCPHTTP的应用程序代理

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

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

优点

• 可靠性和稳定性非常好,可以与硬件的F5相媲美

• 最高可以同时维护40000–50000个并发连接,单位时间内处理的最大请求数为20000个,最大数据处理能力可达10Gbps

• 支持多于8种负载均衡算法 ,同时也支持session保持

• 支持虚拟主机功能

• 从HAProxy 1.3版本后开始支持连接拒绝、全透明代理等功能

• HAProxy 拥有一个功能强大的服务器状态监控页面

• HAProxy 拥有功能强大的ACL支持

keepalive高可用集群

概念

  • Keepalived是Linux下一个轻量级别的高可用解决方案。中文名称:存活检测机制。起初针对LVS进行研发,专门用来监控集群系统中各个服务节点的状态。如果负载调度器出现故障,keepalive检测到以后将故障点直接从集群中剔除。

keepalived可解决的问题

  • 因为企业应用中,单台LVS服务器(单挂)承担应用存在单点故障的危险;单点故障一旦发生,企业服务将发生中断,造成极大的危害。

作用

  • 支持故障自动切换、支持节点健康状态检查

keepalive工作模式

  • Initialize模式

    • 设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对VRRP报文做任何处理。
  • Master模式

    • 定期发送 VRRP 报文
    • 以虚拟 MAC 地址响应对虚拟 IP 地址的 ARP 请求
    • 转发目的标MAC 地址为虚拟 MAC 地址的 IP 报文
    • 如果它是这个虚拟 IP 地址的拥有者,则接收目的 IP 地址为这个虚拟 IP 地址的 IP 报文。否则,丢弃这个 IP 报文
    • 如果收到比自己优先级大的报文则转为 Backup 状态
    • 如果收到优先级和自己相同的报文,并且发送端的 IP 地址比自己的 IP 地址大,则转为 Backup 状态
    • 当接收到接口的 Shutdown 事件时,转为Initialize(初始状态)
  • Backup模式

    • 接收 Master 发送的 VRRP 报文,判断 Master 的状态是否正常
    • 对虚拟 IP 地址的 ARP 请求,不做响应
    • 丢弃目的 MAC 地址为虚拟 MAC 地址的 IP 报文
    • 丢弃目的 IP 地址为虚拟 IP 地址的IP报文
    • Backup 状态下如果收到比自己优先级小的报文时,丢弃报文,立即切换为 Master( 仅在抢占模式下生效 )
    • 如果收到优先级和自己相同或者比自己高的报文,则重置定时器,不进一步比较 IP 地址
    • 当接收到接口的 Shutdown 事件时,转为 Initialize
    • 如果 MASTER_DOWN_INTERVAL 定时器超时,则切换为 Master

案例

keepalive+Haproxy负载均衡

实验环境

一台客户机(192.168.1.1)

一台master+Haproxy(192.168.1.2)

一台slave+Haproxy(192.168.1.3)

一台web1(192.168.1.4)

一台web2(192.168.1.5)

1、配置IP地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33 
systemctl  stop firewalld

2、安装Haproxy服务(两台安装步骤都一样)

yum -y install pcre-devel zlib-devel  #安装所需要的插件
tar -zxvf haproxy-1.4.24.tar.gz -C /usr/src/
cd /usr/src/haproxy-1.4.24/
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
cp /usr/src/haproxy-1.4.24/examples/haproxy.cfg /etc/haproxy/
mkdir /usr/share/haproxy
如果启动时出现报错:Starting proxy cacti: cannot bind socket
则执行:
sysctl -e net.ipv4.ip_nonlocal_bind=1

ln -s /usr/local/haproxy/sbin/* /usr/sbin/ 
cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy #配置systemctl启动文件  启动Haproxy
chmod +x /etc/init.d/haproxy
/etc/init.d/haproxy start
/etc/init.d/haproxy status   #这是用ln软连接方式复制出来的绝对路径用于打开Haproxy

netstat  -anp | grep haproxy    #占用的也是TCP的80端口
chkconfig --add haproxy
chkconfig  haproxy on

3、配置Haproxy文件

vim /etc/haproxy/haproxy.cfg 
# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
#       redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
listen  webcluster 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server  inst1 192.168.1.4:80 check inter 2000 fall 3
        server  inst2 192.168.1.5:80 check inter 2000 fall 3

4、安装web服务(两台)

yum -y install httpd
web1:
echo "欢迎来到192.168.1.4网页" > /var/www/html/index.html
vim /etc/httpd/conf/httpd.conf 
keepalive off  #取消页面保持
systemctl  restart  httpd

web2:
echo "欢迎来到192.168.1.5网页" > /var/www/html/index.html
vim /etc/httpd/conf/httpd.conf 
keepalive off  #取消页面保持
systemctl  restart  httpd

5、安装并配置keepalive服务(两台)

yum -y install openssl openssl-devel  #安装前的准备
tar -zxvf keepalived-1.2.13.tar.gz  -C /usr/src/
cd /usr/src/keepalived-1.2.13/
./configure  --prefix=/usr/local/keepalived/ 
make && make install
配置keepalive的文件
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
systemctl restart keepalived
  • 配置master调度器
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL-r1
}

vrrp_instance VI_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.1.100
    }
}
  • 配置slave调度器
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL-r1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
192.168.1.100
    }
}

6、测试

客户端测试

firefox 192.168.1.100  #成功访问到web1、web2  进行轮训查询
firefox 192.168.1.2    #成功访问到web1、web2  进行轮训查询
firefox 192.168.1.3    #成功访问到web1、web2  进行轮训查询
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值