阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HAProxy+Keepalived实现高可用负载均衡

469次阅读
没有评论

共计 12079 个字符,预计需要花费 31 分钟才能阅读完成。

一、haproxy 介绍:

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机。HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web 服务器不被暴露到网络上。HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端 (User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个 CPU 时间片(Cycle) 做更多的工作。

在 Linux 内核版本为 2.6 或打了 epoll 补丁的 linux2.4 上运行 haproxy 能获得其最好的性能。

二、keepalived 介绍:

keepalived 理论工作原理

keepalived 可提供 vrrp 以及 health-check 功能,可以只用它提供双机浮动的 vip(vrrp 虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第 5 层交换。Keepalived 的作用是检测 web 服务器的状态。Layer3,4&5 工作在 IP/TCP 协议栈的 IP 层,TCP 层,及应用层, 原理分别如下:

Layer3:Keepalived 使用 Layer3 的方式工作式时,Keepalived 会定期向服务器群中的服务器 发送一个 ICMP 的数据包(既我们平时用的 Ping 程序), 如果发现某台服务的 IP 地址没有激活,Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

Layer4: 如果您理解了 Layer3 的方式,Layer4 就容易了。Layer4 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是 80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中剔除。

Layer5:Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带宽也要大一些。Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived 将把服务器从服务器群中剔除。

vip 即虚拟 ip,是附在主机网卡上的,即对主机网卡进行虚拟,此 IP 仍然是占用了此网段的某个 IP。

keepalived 的用途:

Keepalived 是一个基于 VRRP 协议来实现的 WEB 服务高可用方案,可以利用其来避免单点故障。一个 WEB 服务至少会有 2 台服务器运行 Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟 IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。

在 lvs+keepalived 高可用负载均衡架构中,lvs 本身不支持对后端 real server 进行健康状态检测,而 keepalived 的诞生不仅能是 lvs 均衡器实现了高可用,而且还能对 lvs 后端的 real server 进行健康状态检测。如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web 服务器。

 

HAProxy+Keepalived 实现高可用负载均衡

配置过程:

在配置之前,先将 HA 中个节点进行时间同步,主机名之间相互解析,以及配置双机互信。

在 haproxy1.daixiang.com 上配置:

1
2
3
4
5
6
[root@haproxy1 ~]# vim /etc/hosts
    172.16.0.1 haproxy1.daixiang.com haproxy1
    172.16.0.2 haproxy2.daixiang.com haproxy2<br>
[root@haproxy1 ~]# ssh-keygen -t rsa -P ''
[root@haproxy1 ~]# ssh-copy-id haproxy2
[root@haproxy1 ~]# ntpdate s2c.time.edu.cn

在 haproxy2.daixiang.com 上配置:

1
2
3
4
5
6
7
[root@haproxy2 ~]# vim /etc/hosts
    172.16.0.1 haproxy1.daixiang.com haproxy1
    172.16.0.2 haproxy2.daixiang.com haproxy2
 
[root@haproxy2 ~]# ssh-keygen -t rsa -P ''
[root@haproxy2 ~]# ssh-copy-id haproxy1
[root@haproxy2 ~]# ntpdate s2c.time.edu.cn

 

安装 haproxy 和 keepalived:

在 haproxy1 和 haproxy2 节点上进行同样的操作:

?
1
2
3
[root@haproxy1 ~]# yum install keepalived haproxy -y
[root@haproxy1 ~]# cd /etc/keepalived/
[root@haproxy1 keepalived]# cp keepalived.conf{,.bak}

 

配置 keepalived:双主模型

HAProxy+Keepalived 实现高可用负载均衡

HAProxy+Keepalived 实现高可用负载均衡
[root@haproxy1 keepalived]# vim keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {         #定义收件人邮箱
     root@localhost
   }
   notification_email_from root@localhost      #定义发件人邮箱
   smtp_server 127.0.0.1                              #定义邮件服务器地址
   smtp_connect_timeout 30                         #定有邮件服务器连接超时时长为 30 秒
   router_id LVS_DEVEL                                 #运行 keepalive 的机器的标识
}

vrrp_instance VI_1 {                      #定义 VRRP 实例,实例名自定义
    state MASTER                             #指定当前节点的角色,master 为主,backup 为从
    interface eth1                             #直接 HA 监测的接口
    virtual_router_id 51                    #虚拟路由标识,在同一 VRRP 实例中,主备服务器 ID 必须一样
    priority 100                                 #定义节点优先级,数字越大越优先,主服务器优先级高于从服务器
    advert_int 1                                #设置主备之间永不检查时间间隔,单位为秒
    authentication {                          设置主从之间验证类型和密码
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e

    }
    virtual_ipaddress {192.168.80.200                      #定义虚拟 ip 地址
    }
}    

vrrp_instance VI_2 {
    state BACKUP
    interface eth1
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5

    }
    virtual_ipaddress {192.168.80.201
    }
}

 将此配置文件同步到另一个 haproxy2.daixiang.com 上:

1
[root@haproxy1 keepalived]# scp keepalived.conf haproxy2:/etc/keepalived/

 在 haproxy2.daixiang.com 上修改 keepalived.conf 配置文件:

[root@haproxy2 keepalived]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {root@localhost}
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e

    }
    virtual_ipaddress {192.168.80.200
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5

    }
    virtual_ipaddress {192.168.80.201
    }
}

 重启 keepalived:

1
2
[root@haproxy1 keepalived]# service keepalived restart
[root@haproxy1 keepalived]# ssh haproxy2 'service keepalived restart'

配置 haproxy:

先将原始配置文件进行备份:

1
2
3
4
[root@haproxy1 ~]# cd /etc/haproxy/
[root@haproxy1 haproxy]# cp haproxy.cfg{,.bak}
 
## 节点 2 也进行同样的操作

编辑其配置文件修改其内容如下:

将此配置文件同步当另一个 haproxy 节点上去:

1
[root@haproxy1 haproxy]# scp haproxy.cfg haproxy2:/etc/haproxy/

重启 haproxy 服务:

?
1
2
[root@haproxy1 haproxy]# service haproxy restart
[root@haproxy1 haproxy]# ssh haproxy2 'service haproxy restart'

 

查看这两个节点获取 ip 的情况:

haproxy1.daixiang.com:

HAProxy+Keepalived 实现高可用负载均衡

HAProxy+Keepalived 实现高可用负载均衡
[root@haproxy1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:52:3b:c0 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/16 brd 172.16.255.255 scope global eth1
    inet 192.168.80.200/32 scope global eth1
    inet6 fe80::20c:29ff:fe52:3bc0/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:52:3b:ca brd ff:ff:ff:ff:ff:ff
    inet 192.168.80.125/24 brd 192.168.80.255 scope global eth0
    inet6 fe80::20c:29ff:fe52:3bca/64 scope link 
       valid_lft forever preferred_lft forever
[root@haproxy1 ~]#
HAProxy+Keepalived 实现高可用负载均衡

haproxy2.daixiang.com:

[root@haproxy2 haproxy]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ae:5c:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.80.128/24 brd 192.168.80.255 scope global eth0
    inet6 fe80::20c:29ff:feae:5cb3/64 scope link 
       valid_lft forever preferred_lft forever
6: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:ae:5c:a9 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.2/16 brd 172.16.255.255 scope global eth1
    inet 192.168.80.201/32 scope global eth1
    inet6 fe80::20c:29ff:feae:5ca9/64 scope link 
       valid_lft forever preferred_lft forever

在后端的 real server 提供测试页面,测试的结果如下:

请求以.html 结尾的文件,haproxy 将请求代理至后端 static 组中的 server 处理:

HAProxy+Keepalived 实现高可用负载均衡HAProxy+Keepalived 实现高可用负载均衡

请求以.php 结尾的文件,haproxy 将请求代理至后端 dynamic 组中 server 处理:

HAProxy+Keepalived 实现高可用负载均衡

 

注意:本文在 haproxy.cfg 的配置文件中,将 dynamic 组中的 server 配置了基于 cookie 的 session 绑定,所以,用同一浏览器看不出负载均衡的效果来。换个浏览器再访问一次或者清空浏览器的 cookie 记录就能显示效果,如下图。

 HAProxy+Keepalived 实现高可用负载均衡

haproxy 的统计页面输出效果:HAProxy+Keepalived 实现高可用负载均衡

       至此,实验完结,但是对于 haproxy 的两个节点,keepalived 对于这两节点是怎么进行心跳检测,其工作原理是什么,此知识点比较模糊,求大神赐教。

Linux 下 HAProxy+Keepalived 双机高可用方案  http://www.linuxidc.com/Linux/2016-02/128566.htm

Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132225.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计12079字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961536
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...