炫意html5
最早CSS3和HTML5移动技术网站之一

Nginx集群 -Nginx集群负载(基于LVS和Keepalived)搭建

基于 LVS 和 Keepalived 的 Nginx 集群负载是使用 LVS 做传输层的负载均衡设备,将客户端请求从传输层负载到后端的多组 Nginx 集群,并由 Nginx 集群实现应用层负载均衡处理的多层负载均衡网络架构。Keepalived 通过文件配置的方式实现 LVS 的运行管理,并通过 VRRP 机制实现传输层负载的高可用,为 Nginx 集群提供高性能、高可用的负载应用。

Nginx 集群负载部署图如下图所示。

  • LVS 作为传输层负载均衡与接入路由对接,负责把数据包转发给后端的 Nginx 服务器。
  • LVS 选用 DR 转发模式,网络数据包在传输层被分发到 Nginx 服务器,并由 Nginx 经过本地路由返回给客户端。
  • LVS 对后端 Nginx 服务器集群选用加权轮询(wrr)的负载均衡调度策略。
  • Keepalived 通过 VRRP 协议组播通告状态信息,确保两台 LVS 服务器的高可用。
  • 当处于 MASTER 状态的 Keepalived 发生故障时,处于 BACKUP 状态的 Keepalived 切换为 MASTER 状态,负责与接入路由对接,把数据包转发给后端的 Nginx 服务器。
  • Keepalived 通过健康检测机制检测 Nginx 集群内每台 Nginx 服务器的健康状态。
  • Nginx 负责应用层负载均衡,完成客户端请求的负载、路由分流、过滤等操作。

Nginx 集群负载部署图
图:Nginx 集群负载部署图

1) Keepalived安装

Keepalived 在 CentOS 7 系统下使用 yum 安装即可。在 CentOS 7 系统下,LVS 已被集成到内核中,无须单独安装。

yum  -y install keepalived

systemctl enable keepalived

2) Keepalived配置

Keepalived 需要分别在两台 LVS 服务器上进行配置,主服务器上的 Keepalived 配置如下:

! Configuration File for keepalived
global_defs {
notification_email {
monitor@nginxbar.org                          # 发生故障时发送邮件告警通知的邮箱
}
notification_email_from admin@nginxbar.org      # 使用哪个邮箱发送
smtp_server mail.nginxbar.org                   # 发件服务器
smtp_connect_timeout 30
router_id LVS_01                                # 当前设备路由ID为LVS_01
}
vrrp_instance VI_1 {
state MASTER                                    # 初始路由状态为MASTER
interface eth0                                  # VRRP绑定的本地网卡接口为eth0
virtual_router_id 51                            # 虚拟路由器的VRID为51
priority 100                                    # 当前设备的优先级是100
advert_int 5                                    # VRRP组播的间隔时间是5s
authentication {
auth_type PASS                                      # 认证类型为PASS
auth_pass 2222                                      # 认证密码为2222
}
virtual_ipaddress {
192.168.21.155                                      # 虚拟服务器的VIP是192.168.21.155
}
}
virtual_server 192.168.21.155 80 {                      # 虚拟服务器IP及端口
delay_loop 6                                            # 健康检测间隔时间为6s
lb_algo wrr                                             # 负载均衡调度算法为加权轮询
lb_kind DR                                              # 转发模式为DR
persistence_timeout 60                                  # 保持连接的超时时间为60s
protocol TCP                                            # 负载均衡转发协议为TCP
real_server 192.168.2.108 80 {                          # 真实服务器IP及端口
weight 100                                          # 真实服务器权重为100
notify_down /etc/keepalived/scripts/stop.sh         # 当真实服务器健康检测失败时执
# 行stop.sh脚本
HTTP_GET {
url {
path "/healthcheck"                         # 指定要检查的URL的路径
digest bfaa324fdd71444e43eca3b7a1679a1a     # 检测URL返回值的MD5计算值
status_code 200                             # 健康检测返回状态码
}
connect_timeout 10                      # 连接超时时间为10s
nb_get_retry 3                          # 重试3次确认失败
delay_before_retry 3                    # 失败重试的时间间隔为3s
}
}
real_server 192.168.2.109 80 {                  # 真实服务器IP及端口
weight 100                                  # 真实服务器权重为100
notify_down /etc/keepalived/scripts/stop.sh # 当真实服务器健康检测失败时执
# 行stop.sh脚本
HTTP_GET {
url {
path "/healthcheck"                         # 指定要检查的URL的路径
digest bfaa324fdd71444e43eca3b7a1679a1a     # 检测URL返回值的MD5计算值
status_code 200                             # 健康检测返回状态码
}
connect_timeout 10                              # 连接超时时间为10s
nb_get_retry 3                          # 重试3次确认失败
delay_before_retry 3                    # 失败重试的时间间隔为3s
}
}
}

备份服务器上的 Keepalived 配置样例如下:

! Configuration File for keepalived
global_defs {
notification_email {
monitor@nginxbar.org                          # 发生故障时发送邮件告警通知
# 的邮箱
}
notification_email_from admin@nginxbar.org              # 使用哪个邮箱发送
smtp_server mail.nginxbar.org                   # 发件服务器
smtp_connect_timeout 30
router_id LVS_02                                # 当前设备路由ID为LVS_02,此
# 处与主服务器配置不同
}
vrrp_instance VI_1 {
state BACKUP                                    # 初始路由状态为BACKUP,此处
# 与主服务器配置不同
interface eth0                                  # VRRP绑定的本地网卡接口为eth0
virtual_router_id 51                            # 虚拟路由器的VRID为51
priority 99                                     # 当前设备的优先级是99,此处
# 与主服务器配置不同
advert_int 5                                    # VRRP组播的间隔时间是5s
authentication {
auth_type PASS                                      # 认证类型为PASS
auth_pass 2222                                      # 认证密码为2222
}
virtual_ipaddress {
192.168.21.155                              # 虚拟服务器的VIP是192.168.21.155
}
}
virtual_server 192.168.21.155 80 {                      # 虚拟服务器IP及端口
delay_loop 6                                            # 健康检测间隔时间为6s
lb_algo wrr                                             # 负载均衡调度算法为加权轮询
lb_kind DR                                              # 转发模式为DR
persistence_timeout 60                                  # 保持连接的超时时间为60s
protocol TCP                                            # 负载均衡转发协议为TCP
real_server 192.168.2.108 80 {                          # 真实服务器IP及端口
weight 100                                  # 真实服务器权重为100
notify_down /etc/keepalived/scripts/stop.sh # 当真实服务器健康检测失败时执
# 行stop.sh脚本
HTTP_GET {
url {
path "/healthcheck"                         # 指定要检查的URL的路径
digest bfaa324fdd71444e43eca3b7a1679a1a     # 检测URL返回值的MD5计算值
status_code 200                             # 健康检测返回状态码
}
connect_timeout 10                              # 连接超时时间为10s
nb_get_retry 3                                  # 重试3次确认失败
delay_before_retry 3                            # 失败重试的时间间隔为3s
}
}
real_server 192.168.2.109 80 {                          # 真实服务器IP及端口
weight 100                                          # 真实服务器权重为100
notify_down /etc/keepalived/scripts/stop.sh # 当真实服务器健康检测失败时执
# 行stop.sh脚本
HTTP_GET {
url {
path "/healthcheck"                         # 指定要检查的URL的路径
digest bfaa324fdd71444e43eca3b7a1679a1a     # 检测URL返回值的MD5计算值
status_code 200                             # 健康检测返回状态码
}
connect_timeout 10                              # 连接超时时间为10s
nb_get_retry 3                                  # 重试3次确认失败
delay_before_retry 3                            # 失败重试的时间间隔为3s
}
}
}

至此,高可用的 LVS 负载均衡就配置完成了。当主 LVS 服务器出现故障时,备份 LVS 服务器可以快速接管传输层网络数据的负载均衡工作,将数据包分发给后端的 Nginx 服务器集群。

炫意HTML5 » Nginx集群 -Nginx集群负载(基于LVS和Keepalived)搭建

Java基础教程Android基础教程