首页 > 技术文章 > haproxy+keepalived高可用负载均衡构建
2020
03-25

haproxy+keepalived高可用负载均衡构建

千淘万漉博客阿里云大使推广链接

 

haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。

优点如下:

可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。

最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。

支持8种负载均衡算法,支持回话保持。

支持虚拟主机功能。

支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。

拥有功能强大的ACL支持。

haproxy真的很强大。这里不对他的功能一样一样展示,读者可自行去网上了解其他功能。

用haproxy构建群集的时候,比如后方代理两个http,如果haproxy宕机,后方的http正常运行网站也是瘫痪状态,这就造成了单点故障。

这时keepalived就登场了,keepalived基于vrrp协议,两台主机之间生成一个虚拟的ip,我们称漂移ip,漂移ip由主服务器承担,一但主服务器宕机,备份服务器就会抢占漂移ip,继续工作,有效的解决了群集中的单点故障。两者相结合,挺好的。

--------------------------------------------------------------------------------------------------------------------------

让haproxy监听keepalived的漂移ip工作,一但haproxy宕机,备份抢占漂移ip继续承担着代理的工作。

有人问过我一个问题,两台keepalived应该是主服务器性能好一点还是备份服务器性能好一点呢,当时我毫不犹豫的说当然是主的性能更好,这个问题的答案是应该是备份的服务器性能更好一点才对。为什么呢?

 如果你的主服务器承担不了网站的访问量,宕机了 ,备份服务器接管主服务器的工作,如果备份服务器还没有主服务器性能好过不了多久也会再次宕机!!

 

 

这里就不考虑后方的数据库,监控,缓存等等一些东西了,就以两个http上面都是html文件 测试整体的高可靠性。

----------------------------------------------------------------------------------------------------------------------

 

环境 centos7.3

主haproxy 192.168.43.31

备haproxy 192.168.43.32

HTTP1       192.168.43.33

HTTP2       192.168.43.34

漂移ip        192.168.43.100

1,构建keepalived
这里我就偷个懒用yum的方式了。

yum install -y keepalived
 
vi /etc/keepalived/keepalived.conf
 
 
global_defs {    #这里关于邮箱的都删掉了现在用不到。
   smtp_connect_timeout 30    #连接超时时间
   router_id LVS_DEVEL01     #相当于给这个服务器起个昵称
}
 
 
vrrp_instance VI_1 {
    state MASTER     #定义为主服务器
    interface ens32     #承载漂移ip的网卡 7的系统 ens开头
    virtual_router_id 51   #定义一个热备组,可以认为这是51号热备组
    priority 100          #主服务器优先级要比备服务器高
    advert_int 1          #1秒互相通告一次,检查对方死了没。
    authentication {
        auth_type PASS    #认证类型
        auth_pass 1111    #认证密码  这些相当于暗号
    }
    virtual_ipaddress {
        192.168.43.100    #漂移ip
    }
}
 

 

 

备份服务器的配置信息

global_defs {
   smtp_connect_timeout 30
   router_id LVS_DEVEL02  #两个服务器不能一样
}
 
vrrp_instance VI_1 {
    state BACKUP    #备份服务器 是backup
    interface ens32
    virtual_router_id 51
    priority 90    #优先级要低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.43.100  #漂移ip
    }
}
systemctl stop NetworkManager   两边都关掉 不然有影响。
systemctl start keepalived    #开启keepalived服务
ip a    可以看到漂移ip 在主服务器上
 


 

备服务器上面没


关掉主的network服务,模拟故障

可以看到已经漂移到了备份服务器


 

2,构建haproxy服务器
haproxy的包可以去官网下载

https://www.haproxy.org/download/1.7/src/

这里使用的1.7的haproxy

如果使用的最小化安装,需要安装一下gcc环境

yum install -y gcc gcc-c++

 

[root@localhost haproxy-1.7.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy
[root@localhost haproxy-1.7.9]# make install PREFIX=/usr/local/haproxy
 
  TARGET=linux2628,内核版本大于2.6.28的使用linux2628
 
[root@localhost haproxy-1.7.9]# cp examples/haproxy.init /etc/init.d/haproxy  #启动脚本
[root@localhost haproxy-1.7.9]# chmod +x /etc/init.d/haproxy 
[root@localhost haproxy-1.7.9]# cp /usr/local/haproxy/sbin/haproxy /usr/sbin/ #启动脚本里要用
[root@localhost haproxy-1.7.9]# useradd haproxy -s /sbin/nologin 
[root@localhost haproxy-1.7.9]# mkdir /etc/haproxy   #配置文件需要自己创建 
 
[root@localhost haproxy-1.7.9]# vi /etc/haproxy/haproxy.cfg   #vi自己添加配置内容
下面是配置内容,两个haproxy可以一样

 


global
    log 127.0.0.1 local3 info
    user haproxy
    group haproxy
    daemon
    maxconn 4000
defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000
frontend http_front
    bind 192.168.43.100:80
    #haproxy的状态管理页面,通过/haproxy?stats来访问
    stats uri /haproxy?stats
    default_backend http_back
backend http_back
    balance roundrobin
    option httpchk GET /index.html
    option forwardfor header X-Forwarded-For
    server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30
    server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

 

 

解析--------------------------------------------------


global
    log 127.0.0.1 local3 info  用127.0.0.1上的rsyslog服务中的local3设备记录日志,日志级别为info
    user haproxy     用户
    group haproxy  组
    daemon     以守护进程的方式运行
    maxconn 4000   最大并发连接数
defaults
    log global   表示用global模块中定义的日志配置
    mode http    模式  使用http模式
    option httplog     默认haproxy日志,不记录http请求,开启记录http请求
    option dontlognull   保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
    timeout connect 5000  成功连接一台服务器最长等待时间 单位毫秒
    timeout client 50000  连接客户端最长等待时间 单位毫秒
    timeout server 50000  服务器回应客户端最长等待时间 单位毫秒
frontend http_front
    bind 192.168.43.100:80   监听本服务器 192.168.43.100的ip 80端口
    stats uri /haproxy?stats    haproxy的状态管理页面,通过/haproxy?stats来访问
    default_backend http_back   定义一个服务器组 http_back
backend http_back
    balance roundrobin   轮询
    option httpchk GET /index.html 启动http的健康检查
    option forwardfor header X-Forwarded-For    设置后端服务器可以看到客户端ip 访问日志中
    server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30

    server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

 后端服务器昵称node1

 ip和端口

 check 关键字

 inter 健康检查间隔  2000毫秒

 rise 检测 3次 认为正常

 fall 检测3次认为失败

 weight 权重 30

 

 

注意 这里监听了漂移ip 

  

 

---------------------------------------------------------

两个haproxy配置可以一样

下面启动haproxy

如果遇到启动不成功看系统日志排错。一般是配置文件有问题

 


-----------------------

备服务器会报错 因为监听了漂移ip 但是备服务器上没漂移ip


解决方法

vi /etc/sysctl.conf 添加

net.ipv4.ip_nonlocal_bind = 1  忽略监听ip的检查

 sysctl -p  

 


 

 

----------------------------------------

 

server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30

 server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

配置文件中指定的后面的两台web服务器就不演示了  保证可以互相通信 网站可以访问就可以。

测试效果---------------------------------------

访问漂移ip 可以看到haproxy的代理效果



关掉主服务器的network服务模拟故障,漂移ip由备份服务器承担 ,继续工作




 

文章到此结束。拜拜。

 

 
————————————————
版权声明:本文为CSDN博主「张必安」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41772936/article/details/80718014

本文》有 0 条评论

留下一个回复