• 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

    1. net.ipv4.ip_forward = 0
    2. #关闭服务器作为网关的转发功能
    3. net.ipv4.conf.all.send_redirects = 0
    4. #控制是否发送ICMP的重定向消息,禁止重定向
    5. net.ipv4.conf.default.send_redirects = 0
    6. #禁止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
    7. net.ipv4.conf.ens33.send_redirects = 0
    8. #指明网卡设备,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

    1. /opt/kgc 20.0.0.20(rw,sycn)
    2. /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

    1. DEVICE=lo:0
    2. ONBOOT=yes
    3. IPADDR=20.0.0.100
    4. 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

    1. net.ipv4.conf.lo.arp_ignore=1
    2. 设置lo接口忽略来自任何接口的ARP请求
    3. net.ipv4.conf.lo.arp_announce=2
    4. 设置lo接口仅响应本地的IP地址,其他的接口arp请求,全部忽略
    5. net.ipv4.conf.all.arp_ignore=1
    6. 所有接口忽略来自任务接口的arp请求
    7. net.ipv4.conf.all.arp_announce=2
    8. 所有接口仅会响应本地的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

    1. ! Configuration File for keepalived
    2. global_defs {
    3. notification_email {
    4. acassen@firewall.loc
    5. failover@firewall.loc
    6. sysadmin@firewall.loc
    7. }
    8. notification_email_from Alexandre.Cassen@firewall.loc
    9. smtp_server 127.0.0.1
    10. smtp_connect_timeout 30
    11. router_id LVS_01
    12. #主备服务的id,主和备的id不能一致
    13. vrrp_skip_check_adv_addr
    14. #vrrp_strict
    15. vrrp_garp_interval 0
    16. vrrp_gna_interval 0
    17. }
    18. vrrp_instance VI_1 {
    19. state MASTER
    20. #标识身份,主备BACKUP
    21. interface ens33
    22. #指定VIP地址的物理接口
    23. virtual_router_id 10
    24. #虚拟机路由器的id号
    25. priority 100
    26. #优先级
    27. advert_int 1
    28. #发送报文的间隔时间默认10
    29. authentication {
    30. auth_type PASS
    31. auth_pass 1111
    32. }
    33. virtual_ipaddress {
    34. 20.0.0.100
    35. #指定集群的VIP地址
    36. }
    37. }
    38. virtual_server 20.0.0.100 80 {
    39. delay_loop 6
    40. #健康检查的间隔时间
    41. lb_algo rr
    42. #负载均衡的调度算法
    43. lb_kind NAT -- DR
    44. #指定lvs集群的工作方式,要大写
    45. persistence_timeout 50 --0
    46. #连接保持时间50秒,,为了实验效果设为0
    47. real_server 20.0.0.40 80 {
    48. weight 1
    49. #后端服务器的轮询权重
    50. TCP_CHECK {
    51. connect_port 80
    52. #检测目标的端口号
    53. connect_timeout 3
    54. #检测连接超时时间
    55. nb_get_retry 3
    56. #重试次数
    57. delay_before_retry 4
    58. #重试间隔秒数
    59. }
    60. }
    61. real_server 20.0.0.41 80 {
    62. weight 1
    63. #后端服务器的轮询权重
    64. TCP_CHECK {
    65. connect_port 80
    66. #检测目标的端口号
    67. connect_timeout 3
    68. #检测连接超时时间
    69. nb_get_retry 3
    70. #重试次数
    71. delay_before_retry 4
    72. #重试间隔秒数
    73. }
    74. }
    75. }

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

    重启服务systemctl restart keepalived

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

    ipvsadm -ln 查看策略

    查看vip地址 ip addr

    关闭转发功能etc/sysctl.conf

    1. net.ipv4.ip_forward = 0
    2. net.ipv4.conf.all.send_redirects = 0
    3. net.ipv4.conf.default.send_redirects = 0
    4. net.ipv4.conf.ens33.send_redirects = 0

    sysctl -p立刻生效

    配置备服务器

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

    改优先级标识

    改主备id

    改标识身份

    1. ! Configuration File for keepalived
    2. global_defs {
    3. notification_email {
    4. acassen@firewall.loc
    5. failover@firewall.loc
    6. sysadmin@firewall.loc
    7. }
    8. notification_email_from Alexandre.Cassen@firewall.loc
    9. smtp_server 127.0.0.1
    10. smtp_connect_timeout 30
    11. router_id LVS_02
    12. #主备服务的id,主和备的id不能一致
    13. vrrp_skip_check_adv_addr
    14. #vrrp_strict
    15. vrrp_garp_interval 0
    16. vrrp_gna_interval 0
    17. }
    18. vrrp_instance VI_1 {
    19. state BACKUP
    20. #标识身份,主备BACKUP
    21. interface ens33
    22. #指定VIP地址的物理接口
    23. virtual_router_id 10
    24. #虚拟机路由器的id号
    25. priority 90
    26. #优先级
    27. advert_int 1
    28. #发送报文的间隔时间默认10
    29. authentication {
    30. auth_type PASS
    31. auth_pass 1111
    32. }
    33. virtual_ipaddress {
    34. 20.0.0.100
    35. #指定集群的VIP地址
    36. }
    37. }
    38. virtual_server 20.0.0.100 80 {
    39. delay_loop 6
    40. #健康检查的间隔时间
    41. lb_algo rr
    42. #负载均衡的调度算法
    43. lb_kind NAT -- DR
    44. #指定lvs集群的工作方式,要大写
    45. persistence_timeout 50 --0
    46. #连接保持时间50秒,,为了实验效果设为0
    47. real_server 20.0.0.40 80 {
    48. weight 1
    49. #后端服务器的轮询权重
    50. TCP_CHECK {
    51. connect_port 80
    52. #检测目标的端口号
    53. connect_timeout 3
    54. #检测连接超时时间
    55. nb_get_retry 3
    56. #重试次数
    57. delay_before_retry 4
    58. #重试间隔秒数
    59. }
    60. }
    61. real_server 20.0.0.41 80 {
    62. weight 1
    63. #后端服务器的轮询权重
    64. TCP_CHECK {
    65. connect_port 80
    66. #检测目标的端口号
    67. connect_timeout 3
    68. #检测连接超时时间
    69. nb_get_retry 3
    70. #重试次数
    71. delay_before_retry 4
    72. #重试间隔秒数
    73. }
    74. }
    75. }
     配置后端服务器

    先关闭防火墙和安全机制

    安装nginx服务

    配置vip

    1. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    2. DEVICE=lo:0
    3. ONBOOT=yes
    4. IPADDR=20.0.0.100
    5. NETMASK=255.255.255.255

    ifup ifcfg-lo:0生效

    绑定回环接口

    route add -host 20.0.0.100 dev lo:0

    vim /etc/sysctl.conf

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

    sysctl -p立刻生效

    nginx2同上操作

    客户机测试

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

    主服务vip转移到备服务上

    主服务器

    备服务器

    测试结果

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

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

    开启nginx的服务

    轮询

    在配置该权重然后在测试

  • 相关阅读:
    DVWA——反射型XSS(low级别)
    2023 泰山杯 --- Crypto wp
    第六章:Property-based Testing and Test Oracles
    PID--位置型PID和增量式PID比较
    Java获取Object中Value的方法
    【云原生之Docker实战】使用docker部署PicUploader图床工具
    vue学习之Font Awesome图标
    webSocket基于面向对象二次封装
    HTML5生成二维码
    35 岁失业了真的会很难找到工作吗?
  • 原文地址:https://blog.csdn.net/qq_71147683/article/details/133989619