Linux集群存储——day2——集群LB负载均衡 LVS/NAT、LVS/DR 模式

集群:

   集群 目的: 提高性能、降低成本、提高可扩展性、增强可靠性

HPC 高性能计算集群 反复进行一个计算,一般用于科研等需要精算的领域
LB 负载均衡集群

多台机器提供一个服务,一个访问可以给后面多个服务器中任意一个,实现平衡负载

用 LVS、HAproxy、nginx 等软件实现

HA 高可用集群

做备份,主服务器出问题后,备用服务器将会顶替上

用 Keepalived 等软件实现

ext4/xfs   本地文件系统
   只查看本机的对磁盘的写操作,不会查看其他设备对磁盘的操作

gtf   全局文件系统
   需要额外操作,可以查看其他设备的磁盘操作


iscsi和nfs的区别
   iscsi 适合HA(高可用集群),不适合LB(负载均衡集群)
     而适合做LB的,是nfs共享

  主要原因是:iscsi共享的磁盘一般都是格式化为ext4或者xfs等本地文件类型,致使多个客户端挂载后,进行添加或者修改文件,客户端之间没有关联,如果要进行同步需要解除挂载
  而nfs可以实时同步各个客户端创建修改的的所有内容,可以理解为每个客户端都是以nfsnobody的身份远程服务端,然后对共享的文件夹进行操作

   特例问题:(iscsi使用的是正常的本地文件系统格式化的)
     1. 如果对同一个文件进行操作,会出现什么情况
         iscis: 每个服务器修改的文件互相不影响,也是说,C1客户端修改了w文件,C2客户端的w文件并不会有改动,那么也就说C1和C2同时修改w文件,两者没有任何冲突,可以理解为修改的是两个不同的文件
         NFS: 如果同时修改,先进入文档的没有问题,后进入文档的客户端会vim出现一个提示界面,告诉你该文件正在被改动
     2. 对于iscsi使用相同的iqn和不同的iqn都可以实现不会有影响
     3. 对于iscsi,如果想实现文件同步,只需要 解除挂载、登出iscsi,再重新登陆挂载 即可,其数据是覆盖的,不过可能出现bug,建议登出后过一点时间再登陆,建议不要这么操作。


nfs共享目录

    具体查看我写的关于nfs服务的blog
    不过还是要强调一个点,如果想制作支持客户端读写操作的nfs共享,不单单需要在配置文件中写上rw
    而且必须给目录赋权,客户端通过nfs对共享目录操作的时候,使用服务端的用户是nfsnobody
    所以我们可以用: setfacl  -m  -u:nfsnobody:rwx  共享的目录

Linux服务器的不同网段通信
   1. 开启服务器的路由转发功能
     sysctl -a 查看所有内核设置的信息

      修改内核配置文件/etc/sysctl.conf 

net.ipv4.ip_forward = 1

      然后用命令 sysctl -p ,让内核读取配置文件并且显示出来

   2. 网关设置
      查看设备的默认网关 route -n

      临时配置网关:  route add default gw 网关设备IP
          删除网关:  route del default gw 网关设备IP

      永久修改网关信息,修改配置文件

   网络间通讯,同网段在网络中可以直接通信,不同网段要经过网关才可以连通,如果要相互通信需要两个设备都设置好网关,具体网络知识参考我关于网络的总结


负载均衡 LB 的常用术语
Director Server 调度服务器,分发服务器 连接客户端和真实服务器,按照配置将请求分发给多个服务器
Real Server 真实服务器 提供相应服务
VIP 虚拟IP地址 配置子调度服务器的一个网卡上的一个IP,用于和公网的客户端设备连接的网卡,客户端访问的IP
RIP 真实IP地址 真实服务器的内网IP地址
DIP 调度器IP 配置子调度服务器的一个网卡上的一个IP,用于和内网的真实服务器,真实服务器连接的IP
LB的调度算法:
rr 轮询(Round Robin) 将请求平均分发到每个真实服务器中
wrr 加权轮询(Weighted Round Robin) 将请求按照权值的多少进行分发,即一个权值为3,一个权值为1,分发的时候4个请求,就会一个分发到3个,一个分发到1个
lc 最少连接(Least Connections)
wlc 加权最少连接(Weighted Least Connections)

LB的工作模式:
  NAT:通过网络的地址转换技术来实现,LVS服务器同时完成路由功能,所有数据的传递都是经过LVS
    主要用于: 服务器的ip都是私网地址,LVS服务器有外网IP和私网IP
    弊端: LVS服务器压力太大,其性能直接决定了整个服务的性能,一旦LVS服务器出现故障全部服务全部崩溃
    优点: 只需要一个公网IP,适用于小规模集群
      客户端发出请求
          客户端 ---外网---> LVS分发服务器(具有路由功能) ---内网---> 服务器 ---内网---> 后端存储设备
      服务端响应
          客户端 <---外网--- LVS分发服务器(具有路由功能) <---内网--- 服务器 <---内网--- 后端存储设备      

  DR:通过路由技术实现发布,返回数据的时候不经过LVS服务器,在请求后客户端和服务端建立1对1连接,进行数据传递(常用)
    主要用于: 服务器的ip都有一个公网地址 ,LVS也有公网IP,这时候所有设备都能直接连接外网
    优点: 综合性能高,可拓展性强,LVS服务器的压力也不会太大
    不足: 每个服务器都需要一个公网IP,费用较高
      客户端发出请求
          客户端 ---外网---> 路由 ---内网---> LVS分发服务器(不需要路由功能) ---内网---> 服务器 ---内网---> 后端存储设备
      服务端响应
          客户端 <---外网--- 路由 <---内网--- 服务器 <---内网--- 后端存储设备   

  TUN:通过隧道实现(较少),
    主要用于:分发服务器和真实服务器不在同一个网段
      客户端发出请求
          客户端 ---外网---> 路由 ---外网---> LVS分发服务器(不需要路由功能) ---外网---> 路由 ---内网---> 服务器 ---内网---> 后端存储设备
      服务端响应
          客户端 <---外网--- 路由 <---内网--- 服务器 <---内网--- 后端存储设备

建立配置LB集群ipvsad命令:

    装包 yum install -y ipvsadm
    配置文件:/etc/sysconfig/ipvsadm-config
    存储文件:/etc/sysconfig/ipvsadm
    具体LVS配置使用命令ipvsadm

直接加在命令后面即可实现具体功能
-Ln 查看ipvs的配置信息
-Ln --stats 查看年ipvs服务器的数据包分发情况
-Sn 保存所有配置
-C 清除所有配置
-Z 清除数据包分发数据的记录信息
用于指定该命令要实现什么功能
-A 添加LVS服务
-D 删除LVS服务
-E 修改LVS服务的设置信息
-a 添加真实服务器
-d 删除虚拟服务器
用于指定各个模块的具体作用
-t 设置VIP 后面跟着lvs服务中连接客户端的虚拟ip和端口号
-s 指定负载调度算法 后面跟着各个算法简称
-r 指定真实服务器的地址 后面跟着一个具体的服务器的IP和端口号
-w 设置权限 后面跟着具体权限值,不写默认为1
-m 使用NAT模式
-g 使用DR模式 不写默认为DR模式
-i 使用TUN模式

常用功能:

   查看当前配置信息

ipvsadm  -Ln

   创建一个LVS服务(其中端口号是根据要实现的服务来填写的,如80是http服务)

ipvsadm  -A  -t  连接客户端的VIP:端口号  -s  算法
ipvsadm  -A  -t  201.11.55.10:80  -s  wrr

   删除一个LVS服务

ipvsadm  -D  -t  连接客户端的VIP:端口号  -s  算法
ipvsadm  -D  -t  201.11.55.10:80  -s  wrr

    修改一个LVS服务

ipvsadm  -E  -t  连接客户端的VIP:端口号  -s  算法
ipvsadm  -E  -t  201.11.55.10:80  -s  lc

   给LVS服务,添加真实提供服务的服务器

ipvsadm  -a  -t  连接客户端的VIP:端口号  -r  真实服务器的RIP -具体工作模块 -w  权重
ipvsadm  -a  -t  201.11.55.10:80  -r  172.25.0.10:80  -m
ipvsadm  -a  -t  201.11.55.10:80  -r  172.25.0.11:80  -m  -w  2

   修改某个LVS服务下的某个真实提供服务的服务器的配置

ipvsadm  -e  -t  连接客户端的VIP:端口号  -r  真实服务器的RIP -具体工作模块 -w  权重
ipvsadm  -e  -t  201.11.55.10:80  -r  172.25.0.10:80  -m  -w  3

   删除某个LVS服务下的某个真实提供服务的服务器的配置

ipvsadm  -d  -t  连接客户端的VIP:端口号  -r  真实服务器的RIP
ipvsadm  -d  -t  201.11.55.10:80  -r  172.25.0.11:80

   保存配置信息(把数据保存到存储文件中),重新启动保存配置

ipvsadm  -Sn > /etc/sysconfig/ipvsadm

    或者修改配置文件/etc/sysconfig/ipvsadm-config,让关闭ipvs的时候保存

IPVS_SAVE_ON_STOP="yes"

       实时查看ipvs的请求分发的数据包的信息( -n 后面的数值是每隔多少秒刷新数据)

watch -n 1 ipvsadm -Ln --stats

    不能启动ipvsadm服务,查看的时候这服务也是停止的,不过可以设置开机自启,如果想开机自动开启服务需要设置保存后设置这命令 systemctl  enable  ipvsadm


LVS/NAT

   1. 配置分发服务器,创建集群
        创建一个LVS服务:ipvsadm -A -t VIP:80 -s rr
        给LVS服务,添加真实提供服务的服务器:ipvsadm -a  -t VIP:80 -r RIP:80 -m
   2. 在真实的web服务器上配置web网页的http服务


LVS/DR集群构建

   1. 配置分发服务器,在其网卡上设置VIP
ifconfig  eth0:1  预备设置的VIP

   2. 创建集群
        使用 ipvsadm 命令创建 具体和NAT一样,不过添加真实服务器的时候要把 -m 改称 -g

   3. 修改真实服务器的内核参数(只能用覆盖的方法写入,vim不可以修改,即使是root身份)

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 

     放入/etc/rc.local可以开机自动执行(需要赋予执行权限,这文件是一链接,源文件是/etc/rc.d/rc.local,用ll查看链接的时候权限一定是777,不过这是假的,我们要查看源文件的权限,不过赋权可以赋予给链接,实际赋予权限给的是源文件)
     也可以修改内核配置文件/etc/sysctl.conf

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

   4. 在真实服务器的lo网络回路接口中绑定vip地址

ifconfig  lo:1  预备设置的VIP/32

   5. 运行web网页的HTTP服务


DR的具体理论

   DR模型最大的特点:一个是VIP是配在DIP网卡上的一个虚拟网卡,同样VIP也会配在真实服务器的lo环路网卡上的一个虚拟网卡上,另一个是客户端、调度器、服务器都是在同一个网段上的。就这两个特点进行分析

  第一个特点存在分析:
    为什么这么设计呢,因为整个原理存在一个最大的问题:客户端发送请求的数据包头是 CIP ----> VIP ,他接受数据包的时候其包头必须是 VIP ----> CIP ,所以如果数据包发给调度器VIP就要配在调度器上,可是如果想返回数据的时候不经过调度器,服务器也就要拥有VIP,一个网段里面怎么能有多个IP地址,这是最大的难题,这就需要修改内核参数来实现。
    为了让一个网段存在多个VIP,我们势必要将几个VIP设置在没有网卡接口的lo网卡上,可是怎么让VIP在没有接口的情况下通信,这又是一个问题,而DR模型就是解决这两个问题实现了LB负载均衡

    其理论思路是:客户端访问VIP,然后调度器把数据包按照自身策略分发给某个服务器,然后该服务器的lo回环网卡上的VIP的虚拟网卡,通过RIP所在网卡以VIP身份发送数据包。
    请求: CIP ----> VIP == DIP ---> RIP 
    返回数据: RIP代替VIP ----> CIP

    那么第一个问题出现了,怎么才能让RIP所在网卡帮助lo以VIP身份发送,这就要修改内核参数arp_announce
    第二个问题,怎么让一个网络中存在多个VIP,这就要修改内核参数arp_ignore

  第二个特点存在分析:
    为什么必须全部都在一个网段里面呢?在这里有个网络方面的知识:兄弟网卡必须是同网段才算,而只有兄弟网卡才能相互帮助,进行代理收发等操作。所以上面的一个操作让RIP所在网卡以VIP身份发送数据包,必须要让RIP和VIP是兄弟网。
    在公司中,做LVS/DR有两种情况,第一个大公司有钱,每个服务器给每个IP都配置一个公网IP,这样服务发布出去就可以有用;第二个正常公司,在公网和内网链接的路由器上配置一个NAT(这是路由功能,不是LVS/NAT),让VIP映射成一个公网再传递出去,这样性价比高,不过比第一种还是性能差点。


内核参数

    可以用命令查看内核参数:sysctl -a
    内核配置文件 /etc/sysctl.conf  把查看到的内核参数中想修改的部分修改完写进去
    用命令 sysctl -p 查看在配置文件中再加做的修改
    
    网络方面的内核参数的名字一般是  net.ipv4.conf.………………  
    也可以修改/proc/sys/net/ipv4/的具体文件的内容不过只能用echo,而且只是临时的配置

 arp_ignore    代表是否恢复ARP广播    0    回应虽有ARP广播
        1    只回应入站网咖的IP的广播
 arp_announce    0    网卡接口只以自己接口的IP发送和接收包
        2    网卡可以帮兄弟网卡收发数据包,也就是让一个网卡接口可以以别的同网段的网卡的IP进行收发数据包

猜你喜欢

转载自blog.csdn.net/Yu1543376365/article/details/83004097
今日推荐