LVS集群

LVS集群

一. lvs Linux Virtual Server

1. 含义
  • 通过高速网络将很多服务器集中起来,一起提供同一种服务,在客户端看来就像是只有一个服务器。
  • 可以在付出较低成本的情况下获得性能、可靠性、灵活性方面的相对较高的收益
  • 任务调度 是集群系统中的核心技术
1.1 集群:多台主机做同一件事
2. 集群分类
  • 高性能集群HPC
    • 通过以集群开发的并行应用程序,解决复杂的科学问题。
    • 保障业务的可用性
    • 超级计算机
    • 天气预报,地震,火山预测,算法开发
  • 负载均衡(LB)集群
    • 客户端负载在计算机集群中尽可能平均分摊
    • 提升效率
    • 软件实现方式:lvs(效率较高,基于四层负载) haproxy nginx
    • 负载均衡器,是一台主机,没有安装网站,有端口号,端口号是假的,只负责转发请求,后面其他主机闲一些,将请求交给他。
  • 高可用(HA)集群
    • 避免单点故障,当一个系统发生故障时,可以快速迁移
    • 算法科学,一般人接触不到
    • 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果
    • HA的工作方式包括双工和主从两种模式
    • 弄两台负载均衡器,平时一台工作,一台挂掉,另一台使用
    • VIP:v,虚拟的,公网的地址,用户通过公网的地址找到均衡器
3. lvs
3.1 l4:四层交换,四层路由
  • 根据请求报文的目标IP(三层)和PORT(四层)将其转发至后端主机集群中的某一台主机(根据挑选算法)
3.2 iptables四表及其对应的功能
  • iptables四表分别是filter、nat、mangle和raw。四表各自的功能如下:
filter:过滤,防火墙

nat:network address translation,网络地址转换

mangle:拆解报文,做出修改,封装报文

raw:关闭nat表上启用的连接追踪机制
3.3 iptables五链
  • iptables五链分别是PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

  • 数据包的处理方式不同,流经的链也不同:

数据流入时要经过的链:PREROUTING --> INPUT
prerouting 流量还没有进入当前主机,还没进入调度器中,如果目标是找的目标,则是input

数据转发时要经过的链:PREROUTING --> FORWARD --> POSTROUTING
是经过forward状态,在转发出去postrouting状态

数据流出时要经过的链:OUTPUT --> POSTROUTING
在本地直接出去,在里面output,出去之后postrouting
  • 各功能的分别实现位置:
filter:INPUT,FORWARD,OUTPUT

nat:PREROUTING(DNAT),OUTPUT,POSTROUTING(SNAT)

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

raw:PREROUTING,OUTPUT
3.4 lvs
  • ipvsadm:用户空间的命令行工具,用于管理集群服务

  • ipvs:工作于内核中netfilter INPUT钩子上

  • 支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议

grep -i -A 2 'ipvs' /boot/config-2.6.32-504.el6.x86_64        查看系统对ipvs的支持情况,包括算法
3.5 架构
- lvs arch:负载均衡器
  -  调度器:director,dispatcher,balancer
  - RS:Real Server处理请求的服务器

调度器分为两端,一端为客户,一端为通过内网跟rs沟通
- Client IP:CIP客户端ip
- Director Virutal IP:VIP 负载均衡的调度器ip,调度器公网的地址,调度器让用户访问的地址
- Director IP:DIP调度器本身的ip
- Real Server IP:RIP真正的服务器IP
- lvs type- lvs-nat:masquerade
4. lvs类型
4.1 nat模式

在这里插入图片描述

  • lvs-nat:masquerade

  • 调度器跟rs在同一网段,内网

  • 客户端用自己的cip请求lvs的vip,收到后用自己的dip转发一下,将客户端的cip转发为rip

  • 找到资源,在经过rip转给cip,在到lvs,dip,在返回客户端

4.1.1 lvs-nat本质上就是多目标的DNAT(iptables)

在这里插入图片描述

  • lvs-nat模式通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出来的某个RS的RIP地址实现转发
4.1.2 lvs-nat的特点:
  • RS和DIP应该使用私网地址,且RS的网关要指向DIP
  • 请求和响应报文都要经由director转发,所以配置时需要将director的转发功能开启,极高负载的场景中,director可能会成为系统性能瓶颈
  • 支持端口映射
  • RS可以使用任意OS(系统)
  • RS的RIP和Director的DIP必须在同一IP网络
4.2 dr(direct routing),默认模式

在这里插入图片描述

  • lvs-dr(direct routing 直接路由):lvs的默认模式,gateway
  • 客户端cip请求访问lvs,vip,lvs把他的请求通过dip的接口找到某一台rs,请求的cipmac改成lvs的mac,vip的改成rsmac地址
  • cip请求处理之后通过rs的vip直接返回到客户端
4.2.1 lvs-dr模式通过修改请求报文的目标MAC地址进行转发
  • Director:调度器要配置VIP,DIP

  • RSs(多个rs):所有的Real Server都要配置RIP,VIP

4.2.2 特点
  • RS的RIP可以使用私有地址,也可以使用公网地址
  • RS跟Director必须在同一物理网络中,中间不能有路由器相隔
  • 请求报文经由Director调度,但响应报文一定不能经由Director
  • 不支持端口映射
  • RS可以是大多数OS(路由器不能使用)
  • RS的网关不能指向DIP
4.2.3 保证前端路由器将目标IP为VIP的请求报文发送给director,解决方案有以下三种:
  • 静态绑定,在客户端中把vip的mac地址绑定到客户端

  • arptables,apr防火墙,apr内网协议,如果客户端跟用户同一个局域网

  • 修改RS主机内核的2个参数:

  • arp_announce:是否接收并记录别人的通告以及是否通告自己的mac地址给别人。
    
    通告:
    要不要听别人介绍
    要不要介绍给别人
    
    arp_announce有三个可选值,012,其意义如下:
    0(default,默认值为0):通告自己所拥有的所有地址
    1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的尽量避免不在该网络接口子网段的本地地址做出arp回应. 
    当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.
    此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
    2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告
    对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.
    首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 
    如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
    
    arp_ignore:是否响应arp请求
    
    
    arp_ignore有9个可选值,012345678,其意义如下:
    0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求
    1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应
    只回答目标IP地址是来访网络接口本地地址的ARP查询请求(如果从eth0进入找eth0这个网卡响应,从eth1进入则不响应)
    2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
    3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应
    4-7:保留未使用
    8:不回应所有(本地地址)的arp查询
    
  • RS不把自己通告给别人,lvs通告了,客户端请求vip,rs不理解,lvs响应之后在转发给rs.

4.3 隧道模式

在这里插入图片描述

  • lvs-tun(ip tunneling):ipip

  • cip去找vip,dip去请求rip时在封装一层,打开包,里面有cip找vip。有两层封装

  • lvs-tun模式不修改请求报文的ip首部,而是通过在原有的ip首部(CIP<–>VIP)之外再封装一个ip首部(DIP<–>RIP)

4.3.1 特点
  • RIP,DIP,VIP必须是公网地址
  • RS的网关不能指向DIP
  • 请求报文必须经由director调度,但响应报文必须不能经由director
  • 不支持端口映射
  • RS的OS必须支持隧道功能
4.4 fullnat模式
  • lvs-fullnat:keepalived,高可用

  • director通过同时修改请求报文的目标地址和源地址进行转发

4.4.1 lvs-fullnat的特点:
  • VIP是公网地址,RIP和DIP是私网地址,RIP与DIP无须在同一网络中
  • RS接收到的请求报文的源地址为DIP,因此要响应给DIP
  • 请求报文和响应报文都必须经由Director
  • 支持端口映射机制
  • RS可以使用任意OS

二. 算法

1. lvs scheduler:lvs调度器,即lvs挑选RS的算法
1.1 静态方法:
  • 仅根据算法本身进行调度
  • RR :round robin,轮调、轮询,你一个,我一个请求
  • WRR:weighted rr,加权的rr,根据一定的比例进行轮调,比如每次RS1给2个请求,RS2给1个请求,能力强,多给请求
  • SH:source hash(哈希),源地址hash,实现session(会话)保持的机制,将来自于同一个IP的请求始终调度至同一RS,每个服务单独调度。源(某一个IP地址)访问web,下次也是那个IP地址访问
  • DH:destination hash,目标地址hash,将对同一个目标(资源)的请求始终发往同一个RS
1.2 动态方法:
  • 根据算法及各RS的当前负载状态进行调度,根据指定的算法算出overhead(负载),最终挑选出overhead值最小的则为被选中的RS。按照工作量,谁先处理完在分配

  • LC:Least Connection,最少连接数,连接数处理时间长短算法如下:
    overhead = Active * 256 + Inactive

  • WLC:Weighted LC,加权的LC,算法如下:
    overhead=(Active*256+Inactive)/ weight

  • SED:Shortest Expection Delay,最短期望延迟,谁处理最快,请求给谁,算法如下:
    overhead = (Active + 1) * 256 / weight

  • NQ:Nevel Queue,是SED算法的改进,根据SED算法每台主机第一次至少要均分配一次,然后再按SED算法来挑选

  • LBLC:Locality-Based LC,基于本地的最少连接数,即为动态的DH算法
    正向代理情形下的cache server调度

  • LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法

2. ipvs的集群服务:
  • 支持TCP(port),UDP,AH,EST,AH_EST,SCTP等协议,数据库
2.1 ipvs集群服务的特点:
  • 一个ipvs主机可以同时定义多个cluster(集群) service

  • 定义时指明lvs-type(lvs的模式)以及lvs scheduler(调度器)

  • 一个cluster service上至少应该有2个real server

2.2 ipvsadm的用法:
管理集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address
        
常见的service-address:
tcp:-t ip:port
udp:-u ip:port
fwm:-f mark
-s scheduler:调度器
默认为wlc,加权的最小连接数
-p [timeout]:定义持久连接,timeout不指定时默认为300秒


管理集群服务中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
        
server-address:后端真实的ip+port
ip[:port]
lvs-type-g:gateway,dr模式
-i:ipip,tun模式
-m:masquerade,nat模式
-w:设定权重,可为0到正无穷数值,设为0时不会被调度,默认为1
权重值越大则表示性能越好,被调度的资源也会更多

清空和查看:
ipvsadm -C	清空
ipvsadm -L|l [options]	查看
options:
-n:numeric,基于数字格式显示地址和端口号
-c:connection,显示当前ipvs连接
--stats:统计数据
--rate:输出速率信息
--exact:显示精确值,不做单位换算


保存和重载:
ipvsadm -R	重载
ipvsadm -S [-n] 	保存


置零计数器:规则清空
ipvsadm -Z [-t|u|f service-address]

三. FWM和session

1. 通过FWM(FireWalld Mark)定义集群的方式:
  • 功用:将共享一组RS的集群服务统一进行定义,统一进行调度

  • 在director上的netfilter的mangle表的PREROUTING链定义用于“打标”的规则:

    • iptables -t mangle -A PREROUTING -d $VIP -p $PROTOCOL --dports $PORT -j MARK --set-mark #
        $VIP:VIP地址
        $PROTOCOL:协议,tcp/udp等
        $PORT:端口号
        最后的#号表示打标的标记号
      
  • 基于FWM定义集群服务:

    • ipvsadm -A -f # -s scheduler
      ipvsadm -a -f # -t $VIP[:PORT] -r $RIP -g
      
2. session保持的方法有以下三种实现方式:
1.session绑定:
对某一特定服务:可以使用lvs的sh算法进行session绑定
对多个共享同一组RS的服务器,需要统一进行绑定时:可以使用lvs的persistence持久连接来实现
功能:无论ipvs使用何种调度方法,其都能实现将来自于同一个Client的请求始终定向至第一次调度时挑选出的RS
lvs的persistence通过一个持久连接模板来实现持久连接,这个持久连接模板独立于算法之外,模板样式如下:
sourceip	rs	timer

持久连接的实现方式:
每端口持久:PPC,单服务持久调度。无论使用何种算法,可以使用此方式实现sh算法的功能,且能定义持久时长
每FWM持久:PFWMC,单FWM持久调度。将多种不同的服务通过iptables打标成同一种标记,然后通过FWM进行统一持久调度
每客户端持久:PCC,单客户端持久调度
director上会将用户的任何请求都识别为集群服务,并向RS进行调度
tcp:1-65535
udp:1-65535
                    
2.session复制
session服务器:memcached,redis(key-value,kv store)
memcached,redis:缓存
缓存是为了调节速度不一致的两个或者多个物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用
memcached:不具备持久化
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

3.lvs缺点:
不具备健康状态检查功能,只是一个调度器而已,lvs不知道后面的rs是正常的

四. 部署nat模式和dr模式

1. nat模式配置
  • lvs-nat配置:director要配置2块网卡
        配置ip地址信息:
            director(dip,vip)
            RS(rip)
        开启director的ip转发功能
        在director上添加并保存规则:
            ipvsadm -A -t vip:port -s rr
            ipvsadm -a -t vip:port -r rip -m
            ipvsadm -S > /etc/sysconfig/ipvsadm
    
1.1 配置,准备三台主机
  • 环境
主机IP配置
lvs192.168.232.132和 10.10.10.128调度器
RS1192.168.232.134服务器1
RS2192.168.232.128服务器2
  • 配置director(dip,vip)
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# ls
ifcfg-ens160  ifcfg-ens192
[root@lvs network-scripts]# vim ifcfg-ens160 
[root@lvs network-scripts]# cat ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.232.132
NETMASK=255.255.255.0
GATEWAY=192.168.232.2
DNS1=114.114.114.114
[root@lvs network-scripts]# vim ifcfg-ens192 
[root@lvs network-scripts]# cat ifcfg-ens192 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=10.10.10.128
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@lvs network-scripts]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@lvs network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:39:e9:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.132/24 brd 192.168.232.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe39:e984/64 scope link 
       valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:39:e9:8e brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.128/24 brd 10.10.10.255 scope global dynamic noprefixroute ens192
       valid_lft 1451sec preferred_lft 1451sec
    inet6 fe80::2b2c:7777:5f5a:183a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@lvs network-scripts]# 
  • RS(rip),先安装httpd,并且提供网站内容
[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# cd /var/www/html/
[root@RS1 html]# ls
[root@RS1 html]# echo "123123" > index.html
[root@RS1 html]# cat index.html 
123123
[root@RS1 html]# 


[root@RS1 network-scripts]# vim ifcfg-ens160 
[root@RS1 network-scripts]# cat ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
ONBOOT=yes
DEVICE=ens160
IPADDR=192.168.232.134
NETMASK=255.255.255.0
GATEWAY=192.168.232.132
DNS1=114.114.114.114
[root@RS1 network-scripts]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@RS1 network-scripts]# 
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:3c:93:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.134/24 brd 192.168.232.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
[root@RS1 ~]# 



[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# cd /var/www/html/
[root@RS2 html]# echo "456456" > index.html
[root@RS2 html]# cat index.html 
456456
[root@RS2 html]# 

[root@RS2 ~]# cd /etc/sysconfig/network-scripts/
[root@RS2 network-scripts]# ls
ifcfg-ens160
[root@RS2 network-scripts]# vim ifcfg-ens160 
[root@RS2 network-scripts]# cat ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.232.128
NETMASK=255.255.255.0
GATEWAY=192.168.232.132
DNS1=114.114.114.114
[root@RS2 network-scripts]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@RS2 network-scripts]# 
[root@RS2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:03:67:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.128/24 brd 192.168.232.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
[root@RS2 ~]# 
  • 开启调度器上的ip转发功能
[root@lvs ~]# vim /etc/sysctl.conf 
[root@lvs ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# 
  • 在director上添加并保存规则
[root@lvs ~]# yum -y install ipvsadm

[root@lvs ~]# ipvsadm -A -t 10.10.10.128:80 -s rr

[root@lvs ~]# ipvsadm -a -t 10.10.10.128:80 -r 192.168.232.134 -m

[root@lvs ~]# ipvsadm -a -t 10.10.10.128:80 -r 192.168.232.128 -m

[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.10.10.128:80 rr
  -> 192.168.232.128:80           Masq    1      0          0         
  -> 192.168.232.134:80           Masq    1      0          0         
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 10.10.10.128:80 -s rr
-a -t 10.10.10.128:80 -r 192.168.232.128:80 -m -w 1
-a -t 10.10.10.128:80 -r 192.168.232.134:80 -m -w 1
[root@lvs ~]# 
  • 启动并关闭防火墙和selinux
[root@RS1 ~]# systemctl start httpd
[root@RS1 ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*          
LISTEN 0      128          0.0.0.0:80        0.0.0.0:*          
LISTEN 0      128             [::]:22           [::]:*          
[root@RS1 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# 


[root@RS2 ~]# systemctl start httpd
[root@RS2 ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      128          0.0.0.0:80        0.0.0.0:*          
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*          
LISTEN 0      128             [::]:22           [::]:*          
[root@RS2 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# 


[root@lvs ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@lvs ~]# setenforce 0
[root@lvs ~]# 
  • 访问

在这里插入图片描述

在这里插入图片描述

2. dr模式
  • 环境
主机ip配置
lvs192.168.232.132调度器
RS1192.168.232.134服务器1
RS2192.168.232.128服务器2
  • lvs-dr配置:director只需要一块网卡,vip配置在lo接口中即可,此处假设dip与rip在同一网段
        配置director的ip地址信息(dip,vip)
            配置dip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)
            配置vip:
                ifconfig eth0:0 vip/32 broadcast vip up
        配置RS的ip地址信息:
            配置rip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)
            修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容:
                net.ipv4.conf.all.arp_ignore = 1
                net.ipv4.conf.all.arp_announce = 2
            配置vip:
                ifconfig lo:0 vip/32 broadcast vip up
            注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
        配置路由信息:在director和所有RS上进行如下配置:
            route add -host vip dev interface:0
        在director上添加并保存规则:
            ipvsadm -A -t vip:port -s wrr
            ipvsadm -a -t vip:port -r rip:port -g
            ipvsadm -S > /etc/sysconfig/ipvsadm
    
2.1 先安装软件,关闭防火墙
[root@lvs ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@lvs ~]# vim /etc/selinux/config 
[root@lvs ~]# setenforce 0
[root@lvs ~]# 



[root@RS1 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# vim /etc/selinux/config
[root@RS1 ~]# setenforce 0


[root@RS2 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# vim /etc/selinux/config
[root@RS2 ~]# setenforce 0
2.1.1 配置RS网站,并打开服务
[root@RS1 ~]# yum -y install httpd net-tools
[root@RS1 ~]# ls /var/www/html/
[root@RS1 ~]# echo "123456 RS1" > /var/www/html/index.html
[root@RS1 ~]# cat /var/www/html/index.html
123456 RS1
[root@RS1 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service 鈫� /usr/lib/systemd/system/httpd.service.
[root@RS1 ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process                                                    
LISTEN 0      128          0.0.0.0:22         0.0.0.0:*                                                               
LISTEN 0      128                *:80               *:*                                                               
LISTEN 0      128             [::]:22            [::]:*                                                               
[root@RS1 ~]# curl 192.168.232.134
123456 RS1
[root@RS1 ~]# 



[root@RS2 ~]# yum -y install httpd net-tools
[root@RS2 ~]# echo "abcdef RS2" > /var/www/html/index.html[root@RS2 ~]# cat /var/www/html/index.html
abcdef RS2
[root@RS2 ~]# systemctl enable --now httpd
[root@RS2 ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process                                                    
LISTEN 0      128          0.0.0.0:22         0.0.0.0:*                                                               
LISTEN 0      128                *:80               *:*                                                               
LISTEN 0      128             [::]:22            [::]:*                                                               
[root@RS2 ~]# curl 192.168.232.128
abcdef RS2
[root@RS2 ~]# 


安装调度器上的工具包
[root@lvs ~]# yum -y install ipvsadm net-tools
2.2 配置调度器的ip地址信息(dip,vip)
配置DIP:192.168.232.132
[root@lvs ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 
[root@lvs ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.232.132
NETMASK=255.255.255.0
GATEWAY=192.168.232.2
DNS1=114.114.114.114
[root@lvs ~]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:39:e9:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.132/24 brd 192.168.232.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe39:e984/64 scope link 
       valid_lft forever preferred_lft forever
[root@lvs ~]# 


配置VIP:192.168.232.180
[root@lvs ~]# ifconfig ens160:0 192.168.232.180/32 broadcast 192.168.232.180 up
[root@lvs ~]# ifconfig 
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.232.132  netmask 255.255.255.0  broadcast 192.168.232.255
        inet6 fe80::20c:29ff:fe39:e984  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:39:e9:84  txqueuelen 1000  (Ethernet)
        RX packets 61950  bytes 19995252 (19.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 97715  bytes 17958704 (17.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.232.180  netmask 0.0.0.0  broadcast 192.168.232.180
        ether 00:0c:29:39:e9:84  txqueuelen 1000  (Ethernet)
2.2 配置RS的ip地址信息,RIP
配置RIP:
[root@RS1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
[root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
ONBOOT=yes
DEVICE=ens160
IPADDR=192.168.232.134
NETMASK=255.255.255.0
GATEWAY=192.168.232.2
DNS1=114.114.114.114
[root@RS1 ~]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)



[root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.232.128
NETMASK=255.255.255.0
GATEWAY=192.168.232.2
DNS1=114.114.114.114
[root@RS2 ~]# ifdown ens160;ifup ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@RS2 ~]# 
  • 配置RS网卡内核参数
RS1
[root@RS1 ~]# vim /etc/sysctl.conf 
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

RS2
[root@RS2 ~]#  vim /etc/sysctl.conf
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
  • 配置RS的vip
RS1
[root@RS1 ~]# ifconfig lo:0 192.168.232.180/32 broadcast 192.168.232.180 up
[root@RS1 ~]# ifconfig 
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.232.180  netmask 0.0.0.0
        loop  txqueuelen 1000  (Local Loopback)


RS2
[root@RS2 ~]# ifconfig lo:0 192.168.232.180/32 broadcast 192.168.232.180 up
[root@RS2 ~]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.232.180  netmask 0.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
  • 配置路由,在调度器,RS上配置
[root@lvs ~]# route add -host 192.168.232.180 dev ens160:0

[root@RS1 ~]# route add -host 192.168.232.180 dev lo:0

[root@RS2 ~]# route add -host 192.168.232.180 dev lo:0
  • 在director上添加并保存规则
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]# ipvsadm -A -t 192.168.232.180:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.232.180:80 -r 192.168.232.134 -g 
[root@lvs ~]# ipvsadm -a -t 192.168.232.180:80 -r 192.168.232.128 -g 
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.232.180:80 wrr
  -> 192.168.232.128:80           Route   1      0          0         
  -> 192.168.232.134:80           Route   1      0          0         
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.232.180:80 -s wrr
-a -t 192.168.232.180:80 -r 192.168.232.128:80 -g -w 1
-a -t 192.168.232.180:80 -r 192.168.232.134:80 -g -w 1
[root@lvs ~]# 
  • 重新读取文件
[root@lvs ~]# ipvsadm -R < /etc/sysconfig/ipvsadm

可以将命令写入脚本
  • 访问

在这里插入图片描述

在这里插入图片描述

  • 查看
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.232.180:80 wrr
  -> 192.168.232.128:80           Route   1      1          2         
  -> 192.168.232.134:80           Route   1      1          1         
[root@lvs ~]# 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值