LVS负载均衡群集笔记

第五章 LVS负载均衡群集

技能展示
1.了解群集的结构与工作模式
2.学会配置NFS共享服务
3.学会构建LVS负载均衡群集


	集群技术概述

**互联网中,站点对硬件性能、响应速度、服务稳定性、数据可靠性的要求很高。(单台服务器难以承担所有访问的需要)
。使用大型机(价格昂贵)
。专用负载分流设备
。构建集群服务器(通过整合多台相对价格低廉的普通服务器,以同一个地址对外提供服务)

。LVS——-企业中常用的一种群集(cluster)服务(Linux Virtual Server虚拟服务器)

1.群集的含义
*Cluster,集群、群集
*由多台主机(至少两台节点服务器)构成,但对外只表现为一个整体,只提供一个访问接口(域名或ip)

2.群集的类型
1)。负载均衡(Load Balancer)群集
*提高应用系统的响应能力。获得高并发、高负载(LB)的整体性能。例(DNS轮询、应用层交换、反向代理)等。
2)高可用(High Available)群集
*提高应用系统的可靠性。例(故障切换、双击热备、多机热备)
*工作方式:a.双工:所有节点同时在线
b。主从:主节点在线,从节点在主节点发生故障时自动切换为主节点。
3)高性能运算(High Performance Computer)群集【用的较少】
*提高应用系统的CPU运算速度,扩展硬件资源和分析能力。例(云计算、网格计算),依赖于‘分布式计算’‘并行计算’。

必要时可以合并使用几种群集模式

3.负载均衡的结构
第一层,负载调度器(Load Balancer或Director)(至少一个)
*访问这个群集系统的唯一入口。对外为VIP地址(虚拟ip/群集ip地址)。通常配置主、从双机热备,确保高可用性。
第二层,服务器池(Server Pool)(大量真实服务器)
*每个节点都有独立的rip(真实ip),只处理调度器分发的客户机请求。
*某个节点暂时失效时,负责调度器的容错机制将其隔离。错误排除后再重新纳入服务器池。
第三层,共享存储(Share Storage)
*为服务器池提供稳定、一致的文件存取服务,确保群集的统一性。
*可使用NAS设备或提供NFS共享服务的专用服务器。

4.负载均衡的工作模式(基于ip、端口、内容等。基于ip效率最高)

*基于ip:

。【地址转换(NAT)模式】
*调度器为服务器节点的网关,客户机的访问入口和各节点的回应出口。
*服务器和调度器使用私有ip,在同一物理网络。安全性优于下两个。

【IP隧道(TUN)模式】
*开放式网络结构。
*调度器为客户机访问入口
*节点服务器都具有独立的公网ip,分散在不同的地方,直接回应客户机。
*通过专用ip隧道与调度器互相通信。

【直接路由(DR)模式】
*半开放式
*调度器只为客户机访问入口
*节点服务器集中在一起,和调度器在同一物理网络。通过本地连接。
*节点服务器直接回应客户机。

*nat只需要一个公网ip,最易用,安全性好,许多硬件负载均衡设备采用。

*DR和TUN,负载能力更强大,适用范围更广,节点安全性稍差。


	关于LVS虚拟服务器

1.Linux Virtual Server
*Linux内核的一部分。
*针对Linux内核的负载均衡解决方案
*1998年5月,由我国的章文嵩博士创建
*官方网站:http://www.linuxvirtualserver.org/

【加载模块】
[root@localhost ~]# modprobe ip_vs

【确认内核对LVS的支持】
[root@localhost ~]# cat /proc/net/ip_vs

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

2.LVS的负载调度算法
*轮询(Round Robin)
。按照顺序轮流分配,不管实际连接数和系统负载

*加权轮询(Weighted Round Robin)
。自动查询各节点的负载情况,动态调整其权重。

*最少连接(Least Connections)
。优先分配给连接数最少的节点

*加权最少连接(Weighted Least Connections)
。服务器节点性能差异大时,自动调整权重。权重高的承担更大比例的活动连接负载。
……


	使用ipvsadm工具(LVS群集管理工具)

1.创建虚拟服务器

yum -y install ipvsadm

ipvsadm -v

【调度器的vip必须是本机实际已启用的ip地址】

ipvsadm -A -t 202.1.1.1:80 -s rr

-A 添加虚拟服务器
-t vip地址及tcp端口
-s 负载调度算法(轮询rr 、加权轮询wrr 、最少连接lc 、加权最少连接 wlc)

2.添加、删除服务器节点

ipvsadm -a -t 202.1.1.1:80 -r 192.168.10.1:80 -m -w 1

-a 添加真实服务器
-t vip地址及tcp端口
-r rip地址及端口
-m 使用nat群集模式(-g DR 模式、 -i TUN模式)
-w 设置权重(0时暂停节点)

ipvsadm -a -t 202.1.1.1:80 -r 192.168.10.2:80 -m -w 1

ipvsadm -a -t 202.1.1.1:80 -r 192.168.10.3:80 -m -w 1

ipvsadm -a -t 202.1.1.1:80 -r 192.168.10.4:80 -m -w 1

【删除节点】

ipvsadm -d -r 192.168.10.4:80 -t 202.1.1.1:80

【删除整个虚拟服务器】

ipvsadm -D -r 202.1.1.1:80

3.查看群集及节点情况

ipvsadm -ln

*Masq NAT模式

  • Route DR模式

4.保存负载分配策略

ipvsadm-save > /etc/sysconfig/ipvsadm

cat /etc/sysconfig/ipvsadm

service ipvsadm stop

service ipvsadm start


	NFS共享存储服务(负载均衡群集常用)

1.Network File System,网络文件系统
*依赖于RPC(远端过程调用)
*需安装nfs-utils(NFS共享发布和访问)、rpcbind(rpc支持)软件包
*系统服务:nfs、rpcbind
*共享配置文件:/etc/exports

2.使用NFS发布共享资源
*安装nfs-utils、rpcbind软件包

yum -y install nfs-utils rpcbind

chkconfig nfs on

chkconfig rpcbind on

*设置共享目录
【目录位置 客户机地址(权限操作)】
/etc/exports

【将文件夹/opt/wwwroot共享给172.16.16.0/24使用,允许读写操作】

vi /etc/exports

/opt/wwwroot 172.16.16.0/24(rw【读写】,sync【同步写入】,no_root_squash【客户机以root身份访问时赋予本地root权限】)

*启动NFS服务程序

【先启动rpcbind,再启动nfs】

service rpcbind start

service nfs start

netstat -anpt |grep rpcbind

*查看本机发布的NFS共享目录

showmount -e

*从客户机上查看服务器的共享情况

showmount -e 服务器ip

3.在客户机中访问NFS共享资源(如果是群集服务,nfs服务器与客户机间最好使用专用网络连接,确保稳定性)

*安装rpcbind软件包,并启动rpcbind服务(客户机)

yum -y install rpcbind nfs-utils

chkconfig rpcbind on

service rpcbind start

showmount -e 服务器ip

*手动挂载NFS共享目录

mount 172.16.16.172:/opt/wwwroot /var/www/html

tail -1 /etc/mtab

vi /var/www/html/index.html

*fstab自动挂载设置

vi /etc/fstab

172.16.16.172:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0

请思考:
常见的服务器群集有哪几种类型?
使用ipvsadm建立LVS群集的基本过程是什么?
如何配置、使用NFS共享目录?


	构建LVS-NAT群集

【案例环境】
1.LVS调度器作为Web服务器池的网关
2.使用轮询(rr)调度算法

【配置过程】
1.LVS调度器的配置:SNAT策略、LVS-NAT策略
2.Web节点服务器的配置:httpd服务
3.访问http://172.16.16.172/,并验证群集分配情况


构建LVS-DR群集

LVS/DR模式原理剖析(FAQs)

LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,本文介绍了有关LVS-DR模式的相关原理,以FAQs的方式呈现。在DR模式下,调度器与实际服务器都有一块网卡连在同一物理网段上。vs/dr本身不会关心IP层以上的信息,即使是端口号也是tcp/ip协议栈去判断是否正确。

  1. LVS/DR如何处理请求报文的,会修改IP包内容吗?

1.1 vs/dr本身不会关心IP层以上的信息,即使是端口号也是tcp/ip协议栈去判断是否正确,vs/dr本身主要做这么几个事:

1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台RS;

3)在hash table中记录连接信息。

vs/dr做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。

数据包、数据帧的大致流向是这样的:client --> VS --> RS --> client

1.2 前面已作了回答,vs/dr不会修改IP包的内容.

  1. RealServer为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?

2.1 既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。

在lo上配置vip能够完成接收包并将结果返回client。

2.2 答案是不可以将VIP设置在出口网卡上,否则会响应客户端的arp request,造成client/gateway arp table紊乱,以至于整个load balance都不能正常工作。

  1. RealServer为什么要抑制arp帧?

这个问题在上一问题中已经作了说明,这里结合实施命令进一步阐述。我们在具体实施部署的时候都会作如下调整:

   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

我相信很多人都不会弄懂它们的作用是什么,只知道一定得有。我这里也不打算拿出来详细讨论,只是作几点说明,就当是补充吧。

3.1

echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
这两条是可以不用的,因为arp对逻辑接口没有意义。

3.2 如果你的RS的外部网络接口是eth0,那么

echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
其实真正要执行的是:

echo “1” >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/eth0/arp_announce
所以我个人建议把上面两条也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。

  1. LVS/DR load balancer(director)与RS为什么要在同一网段中?

从第一个问题中大家应该明白vs/dr是如何将请求转发给RS的了吧?它是在数据链路层来实现的,所以director必须和RS在同一网段里面。

  1. 为什么director上eth0接口除了VIP另外还要配一个ip(即DIP)?

5.1 如果是用了keepalived等工具做HA或者Load Balance,则在健康检查时需要用到DIP。

5.2 没有健康检查机制的HA或者Load Balance则没有存在的实际意义。

  1. LVS/DR ip_forward需要开启吗?

不需要。因为director跟realserver是同一个网段,无需开启转发。

  1. director的vip的netmask一定要是255.255.255.255吗?

lvs/dr里,director的vip的netmask 没必要设置为255.255.255.255,也不需要再去

route add -host $VIP dev eth0:0
director的vip本来就是要像正常的ip地址一样对外通告的,不要搞得这么特殊.

  1. LVS/DR如何进行tcp的三次握手?

【案例环境】
1.LVS调度器只作为Web访问入口
2.Web访问出口由各节点服务器分别承担

【配置过程 —— LVS调度器】

1.外网接口eth0、群集接口eth0:0

【关闭防火墙、网络管理服务】

service iptables stop

chkconfig iptables off

service NetworkManager stop

chkconfig NetworkManager off

setenforce 0

【配置虚拟ip,与公有ip在一个网段】

cp ifcfg-eth1 ifcfg-eth1:0

vi ifcfg-eth1:0

DEVICE=eth1:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=173.16.16.200
NETMASK=255.255.255.0【根据需要可以配置成255.255.255.255】

ifup eth1:0

ifconfig eth1:0

eth1:0 Link encap:Ethernet HWaddr 00:0C:29:65:16:13

      inet addr:173.16.16.200  Bcast:173.16.16.255  Mask:255.255.255.0

      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

2.调整/proc内核参数,关闭重定向响应

vi /etc/sysctl.conf

……
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
……

sysctl -p

3.配置LVS-DR群集策略

service ipvsadm status

service ipvsadm stop

ipvsadm -A -t 172.16.16.200:80 -s rr

ipvsadm -a -t 172.16.16.200:80 -r 172.16.16.10 -g -w 1

ipvsadm -a -t 172.16.16.200:80 -r 172.16.16.20 -g -w 1

service ipvsadm save

chkconfig ipvsadm on

【配置过程 —— Web节点服务器】

1.外网接口eth0、群集接口lo:0

【关闭防火墙、网络管理、selinux,不再赘述】

setenforce 0

vi ifcfg-lo:0

DEVICE=lo:0
IPADDR=173.16.16.200【vip虚拟ip】
NETMASK=255.255.255.255【必须为32位全1掩码】
ONBOOT=yes

ifup lo:0

ifconfig lo:0

2.调整/proc内核参数,关闭ARP响应

vi /etc/sysctl.conf

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

sysctl -p

3.添加到群集IP地址的本地路由记录

vi /etc/rc.local

……
【保存路由记录】
/sbin/route add -host 173.16.16.200 dev lo:0

route add -host 173.16.16.200 dev lo:0

4.配置并启用httpd服务

service rpcbind start

service nfs start

showmount -e 192.168.10.100

mount 192.168.10.100:/web1 /var/www/html

service httpd restart

【测试LVS-DR群集】

猜你喜欢

转载自blog.csdn.net/m0_57207884/article/details/119669060