史上最全LVS+keepalived+nginx基于DR模式高可用安装部署

史上最全LVS+keepalived+nginx基于DR模式高可用安装部署
lvs+keepAlived→效率最高的负载均衡
在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用LVS做负载均衡器,同时利用Keepalived保证其高可用,基于LVS的DR模式构建Nginx集群。
(1)定义
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

(2)工作原理
将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的
vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,
这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

(3)VPPR协议
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个
master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master
会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master
一、 简介

  1. 负载均衡的类型
    负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
    商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
    软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs

  2. lvs 是什么?
    英文全称是 Linux Virtual Server,即 Linux 虚拟服务器
    Linux2.4 内核以后,LVS 已经是 Linux 标准内核的一部分
    可以将请求分发给后端真实服务器处理
    提供了多种调度算法
    轮询调度(Round-Robin Scheduling)
    加权轮询调度(Weighted Round-Robin Scheduling)
    最小连接调度(Least-Connection Scheduling)
    加权最小连接调度(Weighted Least-Connection Scheduling)
    基于局部性的最少链接(Locality-Based Least Connections Scheduling)
    带 复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least Connections with Replication Scheduling)
    目标地址散列调度(Destination Hashing Scheduling)
    源地址散列调度(Source Hashing Scheduling)
    最短预期延时调度(Shortest Expected Delay Scheduling)
    不 排 队 调 度 ( Never Queue Scheduling )对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
    有三种转发规则
    NAT:简单理解,就是数据进出都通过 LVS,性能不是很好。
    TUNL:简单理解:隧道
    DR:最高效的负载均衡规则

  3. lvs 的体系结构
    最前端的负载均衡层,用 Load Balancer 表示
    中间的服务器集群层,用 Server Array 表示
    最底端的数据共享存储层,用 Shared Storage 表示
    在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服 务器提供的高性能服务

  4. keepAlived 是什么?
    因为所有的请求都要经过负载均衡,所以负载均衡必然是非常重要,不 能挂掉,说白了就是要 keep the lvs alived。
    提供的功能就是可以配置 2 台 LVS,一台主机,一台备机。并且检测任 何一个节点是否还活着。

  5. lvs 的优点?
    抗负载能力强,因为 lvs 工作方式的逻辑是非常之简单,而且工作在网络 4 层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。
    有完整的双机热备方案,当节点出现故障时,lvs 会自动判别,所以系统整体是非常稳定的。
    基本上能支持所有应用,因为 lvs 工作在 4 层,所以它可以对几乎所有应用做负载均衡,包括 http、数据库、聊天室等等。

  6. lvs 负载均衡机制
    lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之 上
    传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
    因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
    lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
    lvs 的转发还可以通过修改直接路由实现(DR 模式)

  7. lvs 与 nginx 对比?
    负载度 lvs 优于 nginx
    稳定度 lvs 优于 nginx
    服务器性能要求 lvs 优于 nginx
    网络层数的效率 lvs 优于 nginx  网络七层:应用层、会话层、表示层、传输层、网络层、链路层、 物理层
    功能多少 nginx 优于 lvs
    1、环境准备
    各个软件及其版本信息如下:
    软件
    版本
    Centos系统
    Linux release 7.3.1611 (Core)
    Nginx
    1.16.0
    LVS
    ipvsadm-1.27-7.el7.x86_64
    Keepalived
    keepalived.x86_64 0:1.3.5-8.el7_6
    节点分配及角色如下:
    节点
    角色
    192.168.208.154
    lvs master
    192.168.208.155
    lvs slave
    192.168.208.150
    nginx1
    192.168.208.151
    nginx2
    同时特别注意这里设置的VIP地址为:192.168.208.100,VIP也即虚拟的IP地址,即当外部请求所访问的IP地址。
    2、部署架构
    基于上述的环境,部署的架构如下:
    在这里插入图片描述

特别注意:
由于是采用DR模式,也即当用户请求发送到VIP时,LVS会根据所设置的负载均衡算法将请求转发到具体的Nginx服务器(Real Server)上,而当具体的Nginx服务器处理完后是直接将结果返回给用户。所以在具体的Nginx服务器是要设置回环的IP,即在lo网卡上设置VIP的地址。
3、部署程序
关闭lvs master和slave节点上的访火墙:
systemctl stop firewalld
systemctl disable firewalld
sed -i “s/^SELINUX=enforcing/SELINUX=disabled/g” /etc/sysconfig/selinux
setenforce 0
添加hosts
10.17.249.81 c4dns01
10.17.249.82 c4dns02

(1)、首先在lvs master节点和slave节点安装lvs和keepalived:
yum install ipvsadm
yum install keepalived

(2)、在nginx1和nginx2节点上安装nginx:

添加nginx的yum源

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装

yum install nginx

安装完成nginx后,编辑其默认页面,加上特定的信息,这样才能判断请求到底是哪个nginx处理的,即:
vi /usr/share/nginx/html/index.html

对于nginx1加上150字样,nginx2加上151字样,即:
当直接访问nginx1时,效果为:

当直接访问nginx2时,效果为:

(3)、在lvs master节点和lvs slave节点配置keepalived信息:
首先配置lvs master节点:
编辑如下文件:
[root@c6-yz-htsb-sc01 ~]# cat /etc/keepalived/keepalived.conf
! 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服务器地址

smtp_server 192.168.200.1

smtp_connect_timeout 30

路由器标识,一般不用改,也可以写成每个主机自己的主机名

router_id LVS_DEVEL

vrrp_skip_check_adv_addr

vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换

vrrp_script chk_nginx
{
script “/etc/keepalived/nginx_check.sh”
interval 2
weight -20
}

一个vrrp_instance就是定义一个虚拟路由器的,实例名称

vrrp_instance VI_1 {

定义初始状态,可以是MASTER或者BACKUP

state MASTER

工作接口,通告选举使用哪个接口进行

interface eth0

虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟

ID还是虚拟MAC最后一段地址的信息,取值范围0-255

virtual_router_id 51

如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高

priority 100

通告频率,单位为秒

advert_int 1
mcast_src_ip=134.80.189.154

通信认证机制,这里是明文认证还有一种是加密认证

authentication {
    auth_type PASS
    auth_pass 1111
}

设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了

virtual_ipaddress {

IP/掩码 dev 配置在哪个网卡

    134.80.189.163
}

追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容

track_script {
   chk_nginx
}

}

定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则

所以通过这里就可以看出来keepalive天生就是为ipvs而设计的

virtual_server 134.80.189.163 80 {
delay_loop 6
# 算法
lb_algo rr
# LVS的模式
lb_kind DR

子网掩码,这个掩码是VIP的掩码

nat_mask 255.255.255.0

持久连接超时时间

persistence_timeout 50

定义协议

protocol TCP

后端应用服务器 IP PORT

real_server 134.80.189.154 80 {
        # 权重
        weight 1
     # 针对应用服务器做健康检查的方法
        TCP_CHECK {
        # 连接超时时间
        connect_timeout 3
        # 尝试次数
        nb_get_retry 3
        # 每次尝试之间间隔几秒
        delay_before_retry 3
    }
}

real_server 134.80.189.155 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 134.80.189.161 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 134.80.189.162 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

基于上述的配置,那么lvs slave的配置如下:
[root@c6-yz-htsb-sc02 ~]# cat /etc/keepalived/keepalived.conf
! 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

vrrp_skip_check_adv_addr

vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script chk_nginx
{
script “/etc/keepalived/nginx_check.sh”
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
mcast_src_ip=134.80.189.155
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
134.80.189.163
}
track_script {
chk_nginx
}
}
virtual_server 134.80.189.163 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP

real_server 134.80.189.154 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

 real_server 134.80.189.155 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
  }
}

real_server 134.80.189.161 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 134.80.189.162 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

nginx进程检测脚本:
[root@c6-yz-4a-uwf2 keepalived]# cat nginx_check.sh
#!/bin/bash

A=ps -C nginx --no-header | wc -l
if [ $A -eq 0 ];then
/home/nginx/sbin/nginx #尝试重新启动nginx

sleep 2 #睡眠2秒

if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
    killall keepalived #启动失败,将keepalived服务杀死。vip漂移到其它备份节点
fi

fi

修改nginx脚本nginx_check.sh 755权限

分别启动lvs master和slave的keepalived,并且设置为开机自启动:
systemctl start keepalived
systemctl enable keepalived
systemctl restart keepalived
systemctl stop keepalived
此时在lvs master节点查看IP地址情况:
ip a

结果为:

说明此时VIP在master节点上的eth0网卡上生成好了。
在lvs master节点查看路由转发情况:
ipvsadm -Ln

ipvsadm -L -n

在nginx服务器上设置回环IP:
由于服务器重启后设置的回环IP会失效,所以将设置的内容放在脚本lvs-rs.sh中,内容如下:
#!/bin/bash
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce

echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore

echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -w net.ipv4.ip_forward=1
ifconfig lo:0 134.80.189.163 broadcast 134.80.189.163 netmask 255.255.255.255 up

route add -host 134.80.189.163 dev lo:0

执行后,查看IP信息,可以在lo网卡中看到VIP的信息,即:

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: b'lvs+keepalived+nginx' 是一种常用的负载均衡解决方案,其中 lvs( Linux Virtual Server) 作为负载均衡器,keepalived 作为可用方案,nginx 作为 Web 服务器。它们结合起来可以实现效、可靠的负载均衡。 ### 回答2: LVS是Linux Virtual Server的缩写,它是一个开源的,基于Linux内核实现的可用和可伸缩网络服务器集群系统。LVS在网络服务器中用于将大量的网络流量分配到多个后端服务器上,从而提服务器的负载均衡和可伸缩性。LVS主要包括四个模块:IPVS,IPVSADM,KEEPALIVED和WEBUI。其中IPVS是实现流量分配的核心部分,IPVSADM可以监控和管理IPVS的规则,KEEPALIVED可用于实现可用性,WEBUI可用于通过Web界面管理LVS集群。 KEEPALIVED是一款基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)的可用性解决方案。当主服务器发生故障时,KEEPALIVED会自动将VIP(Virtual IP,虚拟IP)转移到备份服务器上,从而保证服务的不中断。KEEPALIVED可以与LVS集成使用,实现可用LVS集群。 Nginx是一款开源的性能Web服务器和反向代理服务器。Nginx是一款非常流行的Web服务器,它可以提供性能的Web服务,并支持负载均衡、反向代理、动态Web内容缓存等级功能。在LVS集群中,Nginx通常被用作后端Web服务器,能够在LVS集群中进行负载均衡和可用性配置,从而提Web应用的可靠性和可伸缩性。 总的来说,LVSKEEPALIVEDNginx是三个非常实用的工具,它们可以在大型Web应用中实现可用的负载均衡、性能的Web服务器和反向代理服务器。这些工具能够提供更的可靠性和可扩展性,从而满足企业在流量和负载的环境下的应用需求。 ### 回答3: LVS是Linux Virtual Server的缩写,是国产的性能、可用性的服务器集群技术。LVS可以分为四个子系统:IP负载均衡,服务调度,数据转发和应用服务器池。其中IP负载均衡是LVS的核心,通过对外提供虚拟IP地址和端口,将客户端的请求分发到不同的后端服务器上,实现负载均衡的目的。 Keepalived是一种可用性的解决方案,它可以提供基于虚拟路由器热备的可用性,并支持在主备节点间自动切换。Keepalived主要由两个组件组成:Keepalived daemon和VRRP脚本。Keepalived daemon通过VRRP协议实现主备节点的选举,VRRP脚本则用于检测服务器服务的可达性,并在必要时进行主备切换。 Nginx是一款性能、轻量级的Web服务器和反向代理服务器,它在处理并发连接和静态文件时表现出色,也可以作为负载均衡器使用。Nginx支持通过upstream模块将请求转发到后端服务器,实现负载均衡的功能。 综合考虑,LVSKeepalived可以协同工作实现性能、可用性的服务器集群。LVS将客户端请求分发到不同的应用服务器上,保证各个服务器的负载均衡;同时,Keepalived可以实现主备节点的选举和自动切换,保证服务的可用性。Nginx作为反向代理服务器,可以挂载在LVS后面,接收LVS分发的请求,并将这些请求转发到后端服务器上,实现负载均衡的功能。通过这种方式,可以实现性能、可用性、可扩展性强、成本低的服务器集群。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值