LVS集群

集群:为解决某个特定问题将多个计算机结合起来形成一个单系统

集群发展历史

集群的目的就是为了解决系统的性能瓶颈

垂直扩展:向上扩展,增强单个计算机的性能,升级硬件,硬件升级是有瓶颈的

水平扩展:向外扩展,增加设备,并行的运行多个服务,通过网络和算法来调度服务分配的问题

集群的类型

负载均衡集群:LB load blance 多个主机组成,每台主机只承担一部分访问请求,靠负载均衡算法来实现

高可用集群:HA high availablity 避免SPOF(single point of failuer)单点故障,系统当中有一部分出现故障,可以保障整个系统继续运行

即能满足主从----同步(某些特定的服务需要)----负载均衡

HPC:high-performance computing 快速转发,快速响应

集群可靠性指标(系统的可靠性指标)

MTBF:mean time between failure 系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示,MTBF值越高,系统的可靠性越高,出现故障的概率也越小

MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强

A:系统可靠性的指标 A值越高越好

A=MTBF/(MTBF+MTTR)%

停机时间

计划内停机:指的是预定时间内的维护或者检修时间,时间是自定义的

计划外停机:运维人员关注的就是计划外,突然出现故障没有响应

设计集群时需要考虑的一些原则

1、可扩展性:集群要有随时可以添加或者删除设备的能力,动态的扩缩容

2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换

3、负载均衡:合理的分配负载,避免单个节点过载,影响整体性能

4、可维护性:能够方便的进行配置,部署,维护,监控,降低成本

5、安全性:防止恶意的攻击,以及数据泄密,数据丢失

6、易用性:相关的工作人员,可以方便进入集群,能够快速的开发,部署测试等等

lvs集群当中的术语

vs virtual server lvs服务的逻辑名字,外部访问lvs集群是提供的一个虚拟IP地址和端口

DS:Director server:lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心,接受客户端的请求转发到后端RS

RS:real server lvs的后端的真实服务器的ip,接受到了DS的请求之后,返回响应结果

CIP:client ip 客户端的IP地址

VIP:virtual ip对外提供访问的统一虚拟ip

DIP:Director ip 调度器在lvs内部使用的ip地址,用于和真实服务器进行通信

RIP:后端真实服务器的IP地址

lvs的负载均衡方式

NAT DR TUN

其中NAT和DR最常用的方式

设置lvs

ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群

-A:添加虚拟服务器

-D:删除整个虚拟服务器

-s:指定负载调度的算法

算法

静态调度(固定调度)

rr轮询

wrr加权轮询

dh目的地址hash

根据IP地址查找静态hash表,获取需要真实的RS的地址

sh源地址hash

lc:最小连接调度

wlc:加权最小连接数调度

-a:添加真实服务器

-d:删除真实的服务器

-t:指定VIP地址的端口号

-r:指定RIP的端口号

-m:表示使用的nat模式

-g:表示使用DR模式

-i:表示使用隧道模式

-w:设置真实服务器的权重

-p 60(秒):设置连接保持的时间60秒(默认不带)

-ln:以数字以列表的形式,查看lvs的配置信息

NAT模式

最常用的lvs负载方式之一,地址转换

lvs-nat工作流程

1、客户端访问都是访问VIP

2、DS接受到请求,根据调度算法选择好后端服务器(rs)

请求发送给rs

3、RS处理请求并将响应发送到DS

4、DS把RS的响应包装成自己相应,发送到客户端

NAT模式工作模式

1、在调度器上配置双网卡,一个指内,一个指外

2、配置一个可以和公网进行通信的VIP

3、配置转发策略,如果访问VIP就会把请求的数据转发到后台的RS

请求的格式:报文,调度器会修改请求的目标iIP地址和端口

4、RS处理完请求之后响应客户端,先到调度器进行地址转换,把内网地址转换成公网地址,响应给用户

后端服务器------调度器-----NAT转换------前端服务器----客户端

nat:对于客户端来说请求地址始终不变的,客户端不需要修改任何配置,转发由调度器通过算法来完成,后端服务器只管接受响应,也不需要修改任何配置

性能损失和单点故障

nat模式部署方式

负载调度器:配置双网卡ens33:20.0.0.10(内网) 12.0.0.1(ens36)

两台后端web真实服务器:

一台NFS共享服务器:

关闭防火墙和安全机制

配置共享服务器

安装共享服务 nfs-utils rcpbind

在opt目录下创建目录 kgc benet

分别echo

重启服务

先启动网络rpcbind

在启动nfs

发布服务 exportfs -rv

配置两台服务器

修改网卡配置

把网关IP地址改为nfs共享服务器的IP地址

注释DNS

安装共享服务 nfs-utils rcpbind

安装nginx

showmount -e 共享服务器IP地址

mount IP地址:/opt/benet或者kgc /usr/loacl/nginx/html

重启服务

curl  服务端的IP地址

调度器配置

改配置文件

网关和DNS注释

添加网卡设置

改网卡名称和IP地址

重启网卡

安装iptables-service iptables

iptables -F清空原有策略

iptables -t nat -APOSTROUNING -s 网段 -o ens36 -j SNAT to 进来的ip

查看配置 iptables -t nat vnl

创建VIP地址 ipvsadm -A -t 12.0.0.1:80 -s rr

创建一号真实服务器(添加节点服务器)

ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.20:80 -m

创建二号真实服务器

ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.30:80 -m

保存策略

ipvsadm-save>/etc/sysconfig/ipvsadm

查看策略 ipvsadm -ln

删除策略 ipvsadm -d -r 192.0.0.30:80 -t 调度服务器

打开网关的服务器转发etc/sysctl.conf

net.ipv4.ip——forward = 1

sysctl -p立刻生效

然后测试

lvs-DR模式

也是最常用的lvs负载方式,DRDIRECT ROUTING 直接路由模式

负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果,由后端服务器直接转发给客户端,不需要经过调度器的处理,减轻LVS调度器的负担,提高了性能和稳定性

LVS-DR的工作原理

1、客户端发送请求到VIP

2、LVS的调度器接受请求之后,根据算法选择一台真实服务器,请求转发到后端RS,请求的报文的目的Mac地址,修改成后端真实服务器的Mac地址,转发

3、后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应转发给客户端,响应报文中的目的的Mac地址修改成客户端的Mac地址,直接把响应报文转发到客户端

4、调度器,后端真实服务器都有VIP地址,调度器地址和后端真实服务器在同一网段

DR模式的特点

1、调度器的ip和真实服务器的IP地址在同一物理网络中

2、真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置的是公网,通过互联网可以直接访问RIP

3、调度器只作为入口,但是 不做网关,要把服务器的转发功能关闭

4、真实服务器的网关也不能指向调度器,真实服务器的数据包,是不允许经过调度器

5、后端真实服务器上,基于LO接口配置VIP的IP地址

ARP协议:网络层协议,将IP地址解析为物理Mac地址

ARP解决局域网内部的通信,IP地址和Mac地址映射

DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现

VIP的作用

标识后端的真实服务器

保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器

实现高可用和故障转移

问题一

由于调度器和后端真实服务器都有相同的VIP地址,导致响应冲突,ARP 通信紊乱

对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求

VIP地址使用LO的虚拟地址:arp_ignore=1

后端真实服务器只响应目的为本地ip,也就是RIP,后端服务器的真正IP地址,ens33网卡提供的地址

问题二

返回报文使用的源地址还是VIP地址,调度器也是VIP,怎么把响应返回到客户端不经过调度器

真实服务器做一个内核参数的优化:arp_announce=2 系统不使用IP数据包的源地址,来设置arp的请求

真实的物理网卡的地址

如何实现DR模式的负载均衡

准备前期

host1:20.0.0.10

host2:20.0.0.20(nfs共享服务器)

web集群1:20.0.0.40

web集群2:20.0.0.41

实验步骤:

关闭防火墙和安全机制

配置调度器

加载内核:modprobe ip_vs

安装ipvsadm yum -y install ipvsadm

配置VIP地址

ipconfig ens33:0 20.0.0.100/24

调度器内核优化 /etc/sysctl.conf

net.ipv4.ip_forward = 0
#关闭服务器作为网关的转发功能
net.ipv4.conf.all.send_redirects = 0 
#控制是否发送ICMP的重定向消息,禁止重定向
net.ipv4.conf.default.send_redirects = 0 
#禁止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#指明网卡设备,ens33不发送重定向消息

sysctl -p立刻生效

ipvsadm-save >/etc/sysconfig/ipvsadm

ipvsadm -A -t 20.0.0.100:80 -s rr

ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g

ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

重启服务

ipvsadm -ln 查看策略

nfs共享服务器

安装共享服务yum -y install nfs-utils rpcbind

在opt目录下创建共享目录并赋权

/etc/exports

/opt/kgc 20.0.0.20(rw,sycn)
/opt/benet 20.0.0.20(rw,sycn)

重启服务

发布服务 exports -rv

查看服务 showmount -e

web1

安装nginx 共享

查看能否共享 showmout -e 20.0.0.20

挂载共享目录

mount 20.0.0.20:/opt/kgc

curl 20.0.0.40 测试是否联通

网卡设备(根据回环网卡)

cd /etc/sysconfig/network-scripts/

cp /ifcfg-lo ifcfg-lo :0

vim ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

oute add -host 20.0.0.100 dev lo:0

把VIP的地址绑定到lo:0,作为整个LVS的VIP地址,标识,告诉调度器,进行转发请求的ip地址寻址

内核优化

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore=1
设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
设置lo接口仅响应本地的IP地址,其他的接口arp请求,全部忽略
net.ipv4.conf.all.arp_ignore=1
所有接口忽略来自任务接口的arp请求
net.ipv4.conf.all.arp_announce=2
所有接口仅会响应本地的IP地址的arp请求,其他的接口的arp请求全部忽略

sysctl -p 立刻生效

web2操作同上

nfs共享服务器上测试

LVS+keepalived 高可用集群

keepalived为LVS应运而生的高可用服务,lvs的调度器无法做高可用,于是keepalived这个软件,实现的是调度器的高可用

但是keepalived不是专门为lvs集群服务器的,也可以做其他代理服务器的高可用

lvs的高可用集群:主调度器和备调度器(可以是多个)一主两备一主一备

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态

不参与集群的运转,主调度器出现故障无法运行,备调度器才会承担主调度器的工作

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成冗余

VRRP:keepalived是基于vrrp协议实现lvs服务的高可用,解决了调度器单节点的故障问题

VRRP协议:提高网络路由器的可靠性开发的一种协议

选举出主和备,预先设定好了主和备的优先级,主的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置

VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址通信,交换主备服务器之间的云溪谷状态,主服务器会周期性的发送VRRP报文消息,已告知其他服务器,主服务器现在的状态

主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转移到备服务器,通知组播地址,VRRP可以迅速的通知其他服务器发生了

主备切换,确保新的主服务器可以正常的处理客户端的请求

故障恢复:一旦主服务器恢复通信,有组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求

keepalived的体系模块

全局模块:core模块,负责整个keepalived启动加载和维护

VRRP模块:实现VRRP协议,主备切换

check模块:负责健康检查,检查后端真实的服务器的健康检查,配置真实服务器的模块当中

lvs-DR模式结合keepalived

host1主调度器20.0.0.10

host2备调度器20.0.0.20

nginx1后端真实服务器20.0.0.40

nginx2后端真实服务器20.0.0.41

VIP地址:20.0.0.100

客户端:20.0.0.30

配置主备服务器

先关闭防火墙和安全机制

安装服务ipvsadm keepalived

cd /etc/keepalived给配置文件做备份

改配置文件keepalived.conf

LVS集群_第1张图片

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
#主备服务的id,主和备的id不能一致
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
#标识身份,主备BACKUP
    interface ens33
#指定VIP地址的物理接口
    virtual_router_id 10
#虚拟机路由器的id号
    priority 100
#优先级
    advert_int 1
#发送报文的间隔时间默认10秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        20.0.0.100
  #指定集群的VIP地址
    }
}

virtual_server 20.0.0.100 80 {
   delay_loop 6
   #健康检查的间隔时间
   lb_algo rr
   #负载均衡的调度算法
   lb_kind NAT -- DR
   #指定lvs集群的工作方式,要大写
   persistence_timeout 50 --0
   #连接保持时间50秒,,为了实验效果设为0秒

   real_server 20.0.0.40 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}
real_server 20.0.0.41 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}


}

ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略

重启服务systemctl restart keepalived

ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略

ipvsadm -ln 查看策略

LVS集群_第2张图片

查看vip地址 ip addr

LVS集群_第3张图片

关闭转发功能etc/sysctl.conf

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p立刻生效

LVS集群_第4张图片

配置备服务器

可以按照主服务器配置但是只需修改keepalived配置文件

改优先级标识

改主备id

改标识身份

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
#主备服务的id,主和备的id不能一致
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
#标识身份,主备BACKUP
    interface ens33
#指定VIP地址的物理接口
    virtual_router_id 10
#虚拟机路由器的id号
    priority 90
#优先级
    advert_int 1
#发送报文的间隔时间默认10秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        20.0.0.100
  #指定集群的VIP地址
    }
}

virtual_server 20.0.0.100 80 {
   delay_loop 6
   #健康检查的间隔时间
   lb_algo rr
   #负载均衡的调度算法
   lb_kind NAT -- DR
   #指定lvs集群的工作方式,要大写
   persistence_timeout 50 --0
   #连接保持时间50秒,,为了实验效果设为0秒

   real_server 20.0.0.40 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}
real_server 20.0.0.41 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}


}
 配置后端服务器

先关闭防火墙和安全机制

安装nginx服务

配置vip

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

ifup ifcfg-lo:0生效

绑定回环接口

route add -host 20.0.0.100 dev lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

sysctl -p立刻生效

nginx2同上操作

客户机测试

LVS集群_第5张图片

模拟主服务器出故障(停止服务器)

主服务vip转移到备服务上

主服务器

LVS集群_第6张图片

备服务器

LVS集群_第7张图片

测试结果

开启主服务器服务vip会转移到主服务器上

模拟节点服务器(停止nginx1 服务器)

LVS集群_第8张图片

开启nginx的服务

LVS集群_第9张图片

轮询

在配置该权重然后在测试

LVS集群_第10张图片

LVS集群_第11张图片

你可能感兴趣的:(lvs,服务器,linux,1024程序员节)