共计 8513 个字符,预计需要花费 22 分钟才能阅读完成。
1.heartbeat 简介:
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
这个集群方案是利用第三方软件搭建的,要比 RedHat 自带的集群软件在功能上简化一些,但是搭建起来非常的方便。而且是一种快速解决方案。
heartbeat 的高可用集群采用的通信方式是 udp 协议和串口通信,而且 heartbeat 插件技术实现了集群间的串口、多播、广播和组播通信。它实现了 HA 功能中的核心功能——心跳,将 Heartbeat 软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP 自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。Heartbeat 采用虚拟 IP 地址映射技术实现主从服务器的切换对客户端透明的功能。
但是单一的 heartbeat 是无法提供健壮的服务的,所以我们在后台使用 lvs 进行负载均衡。
2.LVS 简介
LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。由章文嵩博士成立。
IPVS
说道 lvs 我们就得提到 ipvs,IPVS 是 LVS 集群系统的核心软件, 它的主要作用是: 安装在 Load Balancer 上, 把发往 Virtual IP 的请求转发到 Real Server 上。IPVS 的负载均衡机制有三种, 这里使用 IP Tunneling 机制:
- Virtual Server via NAT
- Virtual Server via IP Tunneling
- Virtual Server via Direct Routing
我们这次的实验采用最后一种直连的方式。
lvs 的调度算法非常的重要,大家一定要熟悉他们。在官方网站上有详细的解释:http://zh.linuxvirtualserver.org/
IPVS 的负载调度算法有十种:
- 轮叫 (Round Robin)
- 加权轮叫 (Weighted Round Robin)
- 最少链接 (Least Connections)
- 加权最少链接 (Weighted Least Connections)
- 基于局部性的最少链接 (Locality-Based Least Connections)
- 带复制的基于局部性最少链接 (Locality-Based Least Connections with Replication)
- 目标地址散列 (Destination Hashing)
- 源地址散列 (Source Hashing)
- 最短期望延迟 (Shortest Expected Delay)
- 无须队列等待 (Never Queue)
注释:我们采用较为简单的轮叫方式。
3.ldirectord 简介:
ldirectord 是配合 lvs 作为一种健康检测机制,要不负载均衡器在节点挂掉后依然没有检测的功能。
上面介绍了 heardbeat、lvs 和 ldirectord 的基本概念。说再多不如搭建一个服务给大家展示效果。
4. 搭建 RHEL6.5+LVS+Linux-HA+Ldirectord 服务(提供 http 和 ftp 服务作为例子)
————————————– 分割线 ————————————–
相关阅读 :
基于 Heartbeat V1 实现 Web 服务双机热备 http://www.linuxidc.com/Linux/2014-04/100635.htm
Heartbeat 实现 Web 服务的高可用群集 http://www.linuxidc.com/Linux/2014-04/99503.htm
Heartbeat+LVS+Ldirectord 高可用负载均衡解决方案 http://www.linuxidc.com/Linux/2014-04/99502.htm
DRBD+Heartbeat+NFS 高可用性配置笔记 http://www.linuxidc.com/Linux/2014-04/99501.htm
Heartbeat 基于 CRM 使用 NFS 对 MySQL 高可用 http://www.linuxidc.com/Linux/2014-03/98674.htm
Heartbeat 高可用 httpd 基于 Resources 简单配置 http://www.linuxidc.com/Linux/2014-03/98672.htm
————————————– 分割线 ————————————–
注意 :
1. 系统:redhat6.5;
2. 节点:一共要用到四个虚拟机作为节点,其中两个上面安装 heartbeat 和 lvs,另外两个节点只提供 apache 和 vsftpd 服务;
3. 这四个节点之间的解析一定要做好;
4. 防火墙关闭,时间同步,四个机子的系统版本最好相同。
实验的环境如图下所示,第一个控制台是我真机的,其他四个为实验的四个节点,前两个安装 heartbeat 和 lvs,后两个控制台提供 apache 和 vsftpd 服务。接下来我们分块来配置。
1. 安装 heartbeat:
这个是第三方软件,不是 redhat 自带的,所以大家要自己去下载:,分别需要:
heartbeat-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
heartbeat-libs-3.0.4-2.el6.x86_64.rpm
我的在本地的 vsftpd 服务上有,也可以在 http://rpm.pbone.net/ 上查找。
两个节点上都应该有这个三个包。然后在自定义的位置安装他们:
要是没有安装成功那么一定要重新设置你的 yum 源:
vim /etc/yum.repos.d/yum.repo
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106964p2.htm
这个是 heartbeat 的三个配置文件:
、ha.cf Main configuration file
haresources Resource configuration file
authkeys Authentication information
默认情况下配置文件里没有,我们得从其他地方拷贝一份:
vim ha.cf:
keepalive 2
设定 heartbeat 之间的时间间隔为 2 秒。
warntime 10
在日志中发出“late heartbeat“警告之前等待的时间,单位为秒。
deadtime 30
在 30 秒后宣布节点死亡。
initdead 120
在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常 deadtime 的两倍。
udpport 694
使用端口 694 进行 bcast 和 ucast 通信。这是默认的,并且在 IANA 官方注册的端口号。
默认在回复后自动回切:
有两个节点安装 heartbeat:
用来测试节点的网络是否联通:
上述是 ha.cf 配置文件的修改,然后我们要来 authkeys 文件:
修改文件的访问权限:
最后我们来修改 haresources,我们要在其中添加一个 apache 服务,但是我们要给它一个虚拟的 ip(这个 ip 一定是没有被别人占用的),让这两个节点作它的论寻。
1.heartbeat 简介:
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
这个集群方案是利用第三方软件搭建的,要比 RedHat 自带的集群软件在功能上简化一些,但是搭建起来非常的方便。而且是一种快速解决方案。
heartbeat 的高可用集群采用的通信方式是 udp 协议和串口通信,而且 heartbeat 插件技术实现了集群间的串口、多播、广播和组播通信。它实现了 HA 功能中的核心功能——心跳,将 Heartbeat 软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP 自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。Heartbeat 采用虚拟 IP 地址映射技术实现主从服务器的切换对客户端透明的功能。
但是单一的 heartbeat 是无法提供健壮的服务的,所以我们在后台使用 lvs 进行负载均衡。
2.LVS 简介
LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。由章文嵩博士成立。
IPVS
说道 lvs 我们就得提到 ipvs,IPVS 是 LVS 集群系统的核心软件, 它的主要作用是: 安装在 Load Balancer 上, 把发往 Virtual IP 的请求转发到 Real Server 上。IPVS 的负载均衡机制有三种, 这里使用 IP Tunneling 机制:
- Virtual Server via NAT
- Virtual Server via IP Tunneling
- Virtual Server via Direct Routing
我们这次的实验采用最后一种直连的方式。
lvs 的调度算法非常的重要,大家一定要熟悉他们。在官方网站上有详细的解释:http://zh.linuxvirtualserver.org/
IPVS 的负载调度算法有十种:
- 轮叫 (Round Robin)
- 加权轮叫 (Weighted Round Robin)
- 最少链接 (Least Connections)
- 加权最少链接 (Weighted Least Connections)
- 基于局部性的最少链接 (Locality-Based Least Connections)
- 带复制的基于局部性最少链接 (Locality-Based Least Connections with Replication)
- 目标地址散列 (Destination Hashing)
- 源地址散列 (Source Hashing)
- 最短期望延迟 (Shortest Expected Delay)
- 无须队列等待 (Never Queue)
注释:我们采用较为简单的轮叫方式。
3.ldirectord 简介:
ldirectord 是配合 lvs 作为一种健康检测机制,要不负载均衡器在节点挂掉后依然没有检测的功能。
上面介绍了 heardbeat、lvs 和 ldirectord 的基本概念。说再多不如搭建一个服务给大家展示效果。
4. 搭建 RHEL6.5+LVS+Linux-HA+Ldirectord 服务(提供 http 和 ftp 服务作为例子)
————————————– 分割线 ————————————–
相关阅读 :
基于 Heartbeat V1 实现 Web 服务双机热备 http://www.linuxidc.com/Linux/2014-04/100635.htm
Heartbeat 实现 Web 服务的高可用群集 http://www.linuxidc.com/Linux/2014-04/99503.htm
Heartbeat+LVS+Ldirectord 高可用负载均衡解决方案 http://www.linuxidc.com/Linux/2014-04/99502.htm
DRBD+Heartbeat+NFS 高可用性配置笔记 http://www.linuxidc.com/Linux/2014-04/99501.htm
Heartbeat 基于 CRM 使用 NFS 对 MySQL 高可用 http://www.linuxidc.com/Linux/2014-03/98674.htm
Heartbeat 高可用 httpd 基于 Resources 简单配置 http://www.linuxidc.com/Linux/2014-03/98672.htm
————————————– 分割线 ————————————–
注意 :
1. 系统:redhat6.5;
2. 节点:一共要用到四个虚拟机作为节点,其中两个上面安装 heartbeat 和 lvs,另外两个节点只提供 apache 和 vsftpd 服务;
3. 这四个节点之间的解析一定要做好;
4. 防火墙关闭,时间同步,四个机子的系统版本最好相同。
实验的环境如图下所示,第一个控制台是我真机的,其他四个为实验的四个节点,前两个安装 heartbeat 和 lvs,后两个控制台提供 apache 和 vsftpd 服务。接下来我们分块来配置。
1. 安装 heartbeat:
这个是第三方软件,不是 redhat 自带的,所以大家要自己去下载:,分别需要:
heartbeat-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
heartbeat-libs-3.0.4-2.el6.x86_64.rpm
我的在本地的 vsftpd 服务上有,也可以在 http://rpm.pbone.net/ 上查找。
两个节点上都应该有这个三个包。然后在自定义的位置安装他们:
要是没有安装成功那么一定要重新设置你的 yum 源:
vim /etc/yum.repos.d/yum.repo
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106964p2.htm
在两边都安装 httpd 服务作为测试,为了区分,我们在他们的 index.html 中写入不同的内容(事实上在生产环境中两者的内容当然是相同的,因为我们作的可是负载均衡么)
做完上述内容后开启两边的 heartbeat 服务:
然后我们来通过 firefox 检验效果:
然后我们让当前的节点 heartbeat 关闭,发现另外一个节点自动接管了:
再让刚才那个节点的 heartbeat 开启,因为它是主节点(server101.example.com),所以又接管回来了:
小结:
这样就起到了负载均衡的效果,但是这只是单纯的 heartbeat,我们还没有和 lvs 进行结合,在功能上不够完善,在接下来的帖子里会逐渐把两者结合起来,下一个帖子首先会让大家感受一下 lvs 单独使用时的效果,最后会把两者结合起来。
上一个帖子介绍了 heartbeat 的单独使用,今天我们首先来介绍 lvs 的单独使用,最后将两者结合 起来。提供一个全面的服务。
1.LVS 的三种负载均衡技术:
非常幸运的是 kernel 2.6x 已经内建了 LVS 模块,而且在 RedHat6 版本中也有 LVS 的安装包 ipvsadm。
下面我们对 LVS 的三种负载均衡技术进行比较:
1. 通过 NAT 实现虚拟服务器(VS/NAT):
由于 IPv4 中 IP 地址空间的日益紧张和安全方面的原因,很多网络使用保留 IP 地址。这些地址不在 Internet 上使用,而是专门为内部网络预留的。当内部网络中的主机要访问 Internet 或被 Internet 访问时,就需要采用网络地址转换(Network Address Translation, 以下简称 NAT),将内部地址转化为 Internets 上可用的外部地址。这样当外部网络访问服务的时候,其实是访问那个可以和外界通信的 IP,但访问的内容却是在内网的节点上负载均衡的。原理如下图所示:
2. 通过 IP 隧道实现虚拟服务器(VS/TUN):
它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP 地址被配置在本地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
记住它和 NAT 的不同是,可以直接与客户机建立链接。原理如下图所示:
3. 通过直接路由实现虚拟服务器(VS/DR):
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者 HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求。
这个模型是我们今天要做的,每个节点都有一个虚拟 IP(控制节点和真正提供服务的节点(RS)),其中的调度由控制器完成的(RR 轮叫算法),服务不会主动的去提供服务。与 TUN 相同的是,他们也是可以直接和客户机通信。原理如图所示:
2.LVS 的安装和配置:
首先我们还是打开那个熟悉的控制台:
安装 ipvsadm:
当前没有任何调度列表:
添加虚拟 ip 作为公共访问 ip:
我们添加虚拟 ip 的 httpd 服务的端口,并且采用了轮叫的算法(RR):
允许 server106 和 server107 的 httpd 服务作为轮叫的节点:
在 serevr106 和 server107 上分别安装 httpd 服务:
图片 8
然后我们要做以下事情:
1.server106 和 server107 要能够识别 192.168.2.110 这个虚拟 IP,所以他们也要添加这个虚拟网卡。
2. 为了体现出轮叫的效果,我们在两者的默认发布目录中写入不同的内容以示区别。
图片 9
图片 10
现在控制节点和提供真实服务的节点都能够识别 VIP(192.168.2.110),接下来我们要在提供服务的节点上添加策略,这个感觉和防火墙很类似,不过要安装一个额外的软件:
图片 11
此时还没任何策略设置:
图片 13
添加策略,把直接进来访问 192.168.2.110 的包全部丢弃,让从 192.168.2.110 出去的包从 192.168.2.106 出去(192.168.2.107 同理)。
图片 14
图片 15
保存策略:
图片 16
现在我们通过浏览器反复访问 192.168.2.110(确保服务节点的 httpd 服务开启),多刷新几次:
这个是我们在访问之前控制节点记录的信息:
图片 17
在访问了 32 次之后,我们发现两个节点各轮叫了 16 次,但是访问的 ip 都是虚拟 ip(192.168.2.110),这就是直连情况下的 LVS 方案。
而且网页的内容也在轮循变化:
3. 小结:
本帖先是介绍了 LVS 的三种负载均衡技术,然后我们身体力行的搭建了直连情况下的 LVS,那么在下个帖子中我们会把 LVS 和 heartbeat 结合起来组成一个健壮的服务。
之前我们把 LVS 和 heartbeat 都单独进行了测试,是时候进行合并了
1.LVS+heartbeat:
首先显示我们的控制台:
让这两个软件能够互相协作,并且让该平台具有能够报警和挽救的机制,我们需要安装 ldirectord 软件。
ldirectord-3.9.2-1.2.x86_64.rpm
在 server101 和 server105 上安装 ldirectord(因为包和系统的包有依赖性,所有使用 yum 安装):
这些是 ldirectord 的相关文件位置,拷贝配置文件到 heartbeat 的配置文件目录下::
两边的节点上都安装 perl-IO-Socket-INET6-2.56-4.el6.noarch:,否则后面的 ldirectord 会因为缺少脚本无法打开:
编辑 ldirectord 的配置文件(vim directord.cf):
我们指定两个真实服务的节点 192.168.2.106 和 192.168.2.107,他们的访问顺序采用轮叫的方式,当两个节点都挂掉的话,192.168.2.101 这个节点自己提供服务。
把这个配置文件拷贝到另外一个控制节点 192.168.2.105 的配置文件处:
编辑 haresources 文件,添加 ldirectord 服务到 heartbeat 中:
同样巴这个文件也拷贝到 192.168.2.105:/etc/ha.d/ 中:
这个时候我们直接启动 heartbeat 服务,他会自动调用 ldirectord 服务,而我们的 ldirectord 的配置文件里的内容完成着和 LVS 一样的调度功能,这样平台搭建基本完成:
这个是 ip 的信息:
然后我们访问下 192.168.2.110 的网址:
再查看 lvs 的信息,每个节点都被访问了 4 次:
小结:
这样就把 heartbeat、LVS、ldirectord 结合起来完成了一个高可用的集群方案,这里只演示了 httpd 服务,如果生产环境中有其他的服务,也可自行添加。下个帖子我们还会介绍另外一种集群方案 keepalived。