赞
踩
Load Balance
High Availability
High Performance Computing
LVS
:Linux Virtual Server
,Linux
虚拟服务器LVS
的工作模式
NAT
:网络地址转换DR
:路由模式TUN
:隧道模式LVS
服务器VIP
:虚拟地址,提供给用户访问的地址DIR
:指定地址,LVS
服务器上与真实服务器通信的地址RIP
:真实地址,真实服务器的地址rr
:真实服务器轮流提供服务(一共有两台服务器,第一个给A,第二个给B,第三个再给A…)wrr
:根据服务器性能设置权重,权重大的服务器得到分配的请求就越多lc
:根据真实服务器的连接数分配请求,优先分配连接少的wlc
:类似wrr
,根据权重分配请求ipvsadm
使用说明
-A
:添加虚拟服务器-E
:编辑虚拟服务器-D
:删除虚拟服务器-t
:添加tcp
服务器-u
:添加udp
服务器-s
:指定调度算法。如轮巡rr
、加权轮巡wrr
、最小连接lc
、加权最小连接wlc
-a
:添加虚拟服务器后,向虚拟服务器中加入真实服务器-r
:指定真实服务器-w
:设置权重-m
:指定工作模式为NAT
-g
:指定工作模式为DR
NAT
模式:通过lvs
服务器来接收用户的请求,然后通过调度算法分配请求到真实服务器,然后真实服务器返回数据给lvs
服务器,再有lvs
服务器返回给用户client
:eth0
->192.168.88.10,gateway
->192.168.88.5lvs
:eth0
->192.168.88.5;eth1
->192.168.99.5web1
:eth0
->192.168.99.100,gateway
->192.168.99.5web2
:eth0
->192.168.99.200,gateway
->192.168.99.5client
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.10/24 ipv4.gateway 192.168.88.5 connection.autoconnect yes
# 启动
nmcli connection up eth0
lvs
# 设置eth0的ip nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 connection.autoconnect yes # 启动 nmcli connection up eth0 # 设置eth1的ip nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.5/24 connection.autoconnect yes # 启动 nmcli connection up eth1 # 查看ip转发功能的内核参数 sysctl -a # 这是查看所有的内核参数 sysctl -a | grep ip_forward # net.ipv4.ip_forward = 0 # 1表示打开转发,0表示关闭转发 # 永久打开ip_forward功能,可以使client和web1、web2互通 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
web1
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.99.100/24 ipv4.gateway 192.168.99.5 connection.autoconnect yes
# 启动
nmcli connection up eth0
# 安装httpd,并启动
yum install -y httpd
systemctl enable httpd --now
echo "web1" > /var/www/html/index.html
web2
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.99.200/24 ipv4.gateway 192.168.99.5 connection.autoconnect yes
# 启动
nmcli connection up eth0
# 安装httpd,并启动
yum install -y httpd
systemctl enable httpd --now
echo "web1" > /var/www/html/index.html
lvs
服务器# 安装lvs yum install -y ipvsadm # 创建虚拟服务器,使用轮巡rr调度算法 ipvsadm -A -t 192.168.88.5:80 -s rr # 添加RIP ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -m ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -m # 查看配置 ipvsadm -Ln # 此时使用client访问192.168.88.5:80,效果是web1:web2,比例是1:1 # 删除配置,使用加权轮巡wrr ipvsadm -D -t 192.168.88.5:80 -s wrr ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -w 1 -m ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -w 2 -m # 此时使用client访问192.168.88.5:80,效果是web1:web2,比例是1:2
DR
模式相比于NAT
模式,它不会因为lvs
服务器的带宽而影响业务DR
模式:通过lvs
服务器来接收请求,然后分配请求到真实服务器,然后通过真实服务器的虚拟网卡直接返回给用户client
:eth0
->192.168.88.10lvs
:eth0
->192.168.88.5;eth0:0
->192.168.88.15web1
:eth0
->192.168.88.100;lo:0
->192.168.88.15/32web2
:eth0
->192.168.88.200;lo:0
->192.168.88.15/32client
相比与上一个实验无需操作lvs
# 删除eth1网卡 nmcli connection delete eth1 # 修改eth0,将ipv6那部分都删除,不然配置eth0:0的时候会报错ipv6冲突 vim ifcfg-eth0 # 文件内容如下,#后面的不用加入 TYPE=Ethernet # 以太网 BOOTPROTO=none # dhcp/none/static,none和static代表静态配置 NAME=eth0 # 为设备重命名 DEVICE=eth0 # 网卡设备名 ONBOOT=yes # 开机激活 IPADDR=192.168.88.5 # ip PREFIX=24 # 子网掩码 GATEWAY=192.168.88.254 # 网关 # 重启网卡 ifdown eth0; ifup eth0 # 配置eth0:0,这里使用的是直接修改网卡配置文件的方法 cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-eth0:0 vim ifcfg-eth0:0 # 文件内容如下 TYPE=Ethernet BOOTPROTO=none NAME=eth0:0 DEVICE=eth0:0 ONBOOT=yes IPADDR=192.168.88.15 PREFIX=24 # 重启网卡 ifdown eth0:0; ifup eth0:0 # 查看是否成功 ifconfig
web1
cd /etc/sysconfig/network-scripts/ # 修改eth0网络 vim ifcfg-eth0 # 文件内容如下 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.88.200 PREFIX=24 GATEWAY=192.168.88.254 # 重启网卡(虚拟机情况下,修改完ip之后,记得修改一下网卡的连接,不然会连不上) ifdown eth0; ifup eth0 # 添加lo:0网卡 cp ifcfg-eth0 ifcfg-lo:0 # 文件内容如下 TYPE=Ethernet BOOTPROTO=none NAME=lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.88.15 PREFIX=32 # 这里掩码一定是32位,因为这个是一个虚拟地址 # 重启网卡 ifdown lo:0; ifup lo:0 # 查看是否生效 ifconfig # 配置内核参数,使它不响应192.168.88.15的请求(这一步很重要) vim /etc/sysctl.conf # 文件内容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 # 重新加载内核 sysctl -p
web2
cd /etc/sysconfig/network-scripts/ # 修改eth0网络 vim ifcfg-eth0 # 文件内容如下 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.88.100 PREFIX=24 GATEWAY=192.168.88.254 # 重启网卡(虚拟机情况下,修改完ip之后,记得修改一下网卡的连接,不然会连不上) ifdown eth0; ifup eth0 # 添加lo:0网卡 cp ifcfg-eth0 ifcfg-lo:0 # 文件内容如下 TYPE=Ethernet BOOTPROTO=none NAME=lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.88.15 PREFIX=32 # 这里掩码一定是32位,因为这个是一个虚拟地址 # 重启网卡 ifdown lo:0; ifup lo:0 # 查看是否生效 ifconfig # 配置内核参数,使它不响应192.168.88.15的请求(这一步很重要) vim /etc/sysctl.conf # 文件内容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 # 重新加载内核 sysctl -p
lvs
服务器# 清除之前的配置 ipvsadm -D -t 192.168.88.5:80 # 创建虚拟服务器,使用的调度算法是最少连接lc ipvsadm -A -t 192.168.88.15:80 -s lc # 向虚拟服务器中添加真实服务器(注意这里是-g,设置了权重是不影响的,因为使用的是lc,这里是为了下面演示修改虚拟服务器的调度算法) ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.100 -w 100 -g ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.200 -w 200 -g # 此时使用client访问192.168.88.15:80,效果是web1:web2,比例是1:1 # 修改虚拟服务器的调度算法为wlc ipvsadm -E -t 192.168.88.15:80 -s wlc # 查看配置 ipvsadm -Ln # 此时使用client访问192.168.88.15:80,效果是web1:web2,比例是1:2
keepalived
用于实现高可用集群VRRP
(虚拟冗余路由协议)lvs
服务器自动切换,并且可以根据web
服务器的工作情况自动添加和删除client
:eth0
->192.168.88.10lvs
集群,使用keepalived
服务,配置虚拟ip
为192.168.88.15/24
lvs1
:eth0
->192.168.88.5,Master
lvs2
:eth0
->192.168.88.6,Backup
web
集群,都配置lo:0
为192.168.88.15/32
web1
:eth0
->192.168.88.100web2
:eth0
->192.168.88.200client
不做修改lvs1
# 配置网络
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 ipv4.gateway 192.168.88.254 autoconnect yes
nmcli connection up eth0
# 安装keepalived和ipvsadm
yum install -y keepalived ipvsadm
lvs2
# 配置网络
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.6/24 ipv4.gateway 192.168.88.254 autoconnect yes
nmcli connection up eth0
# 安装keepalived和ipvsadm
yum install -y keepalived ipvsadm
web1
和web2
跟上次实验操作一致,不需要额外操作lvs1
# 编辑keepalived配置文件 vim /etc/keepalived/keepalived.conf # 修改内容如下 1 ! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 acassen@firewall.loc 6 failover@firewall.loc 7 sysadmin@firewall.loc 8 } 9 notification_email_from Alexandre.Cassen@firewall.loc 10 smtp_server 192.168.200.1 11 smtp_connect_timeout 30 12 router_id lvs1 # 唯一id 13 vrrp_iptables # 添加一行,自动开启iptables放行规则 14 vrrp_skip_check_adv_addr 15 vrrp_strict 16 vrrp_garp_interval 0 17 vrrp_gna_interval 0 18 } 19 20 vrrp_instance VI_1 { 21 state MASTER # 状态:MASTER为主,BACKUP为备 22 interface eth0 # 网卡 23 virtual_router_id 51 # 虚拟路由器地址 24 priority 100 # 优先级 25 advert_int 1 # 发送心跳信息的间隔 26 authentication { 27 auth_type PASS # 认证类型为共享密码 28 auth_pass aabb # 集群中密码相同,才能成为集群 29 } 30 virtual_ipaddress { 31 192.168.88.15 # VIP地址 32 } 33 } 34 # 以下为keepalived配置lvs的规则 35 virtual_server 192.168.88.15 80 { # 声明虚拟服务器的地址和端口 36 delay_loop 6 # 健康检查延迟6s开始 37 lb_algo rr # 调度算法为rr 38 lb_kind DR # 工作模式为DR 39 persistence_timeout 50 # 50s内相同客户端调度到相同服务器 40 protocol TCP # 协议为TCP 41 42 real_server 192.168.88.100 80 { # 声明真实服务器的地址和端口 43 weight 1 # 权重 44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查 45 connect_timeout 3 # 连接超时时间为3秒 46 nb_get_retry 3 # 3次访问失败则认为真实服务器故障 47 delay_before_retry 3 # 两次检查时间的间隔3秒 48 } 49 } 50 51 real_server 192.168.88.200 80 { # 第二个真实服务器配置跟第一台差不多 52 weight 2 53 TCP_CHECK { 54 connect_timeout 3 55 nb_get_retry 3 56 delay_before_retry 3 57 } 58 } 59 } # 启动服务 systemctl start keepalived.service # 查看设置是否成功 ip a s eth0 | grep 192.168.88.15 # inet 192.168.88.15/32 scope global eth0 ipvsadm -Ln
lvs2
# 编辑keepalived配置文件 1 ! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 acassen@firewall.loc 6 failover@firewall.loc 7 sysadmin@firewall.loc 8 } 9 notification_email_from Alexandre.Cassen@firewall.loc 10 smtp_server 192.168.200.1 11 smtp_connect_timeout 30 12 router_id lvs2 # 唯一id 13 vrrp_iptables # 添加一行,自动开启iptables放行规则 14 vrrp_skip_check_adv_addr 15 vrrp_strict 16 vrrp_garp_interval 0 17 vrrp_gna_interval 0 18 } 19 20 vrrp_instance VI_1 { 21 state BACKUP # 状态:MASTER为主,BACKUP为备 22 interface eth0 # 网卡 23 virtual_router_id 51 # 虚拟路由器地址 24 priority 100 # 优先级 25 advert_int 1 # 发送心跳信息的间隔 26 authentication { 27 auth_type PASS # 认证类型为共享密码 28 auth_pass aabb # 集群中密码相同,才能成为集群 29 } 30 virtual_ipaddress { 31 192.168.88.15 # VIP地址 32 } 33 } 34 # 以下为keepalived配置lvs的规则 35 virtual_server 192.168.88.15 80 { # 声明虚拟服务器的地址和端口 36 delay_loop 6 # 健康检查延迟6s开始 37 lb_algo rr # 调度算法为rr 38 lb_kind DR # 工作模式为DR 39 persistence_timeout 50 # 50s内相同客户端调度到相同服务器 40 protocol TCP # 协议为TCP 41 42 real_server 192.168.88.100 80 { # 声明真实服务器的地址和端口 43 weight 1 # 权重 44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查 45 connect_timeout 3 # 连接超时时间为3秒 46 nb_get_retry 3 # 3次访问失败则认为真实服务器故障 47 delay_before_retry 3 # 两次检查时间的间隔3秒 48 } 49 } 50 51 real_server 192.168.88.200 80 { # 第二个真实服务器配置跟第一台差不多 52 weight 2 53 TCP_CHECK { 54 connect_timeout 3 55 nb_get_retry 3 56 delay_before_retry 3 57 } 58 } 59 } # 启动服务 systemctl start keepalived.service # 因为lvs2是备用服务器,当主服务器正常运行时,是不会出现VIP的,只能通过ipvsadm的配置查看 ipvsadm -Ln
for i in {1..6}; do curl http://192.168.88.15; done
# 结果都是web1或者web2,是因为上面的keepalived配置文件中第39行,配置了50s内相同服务器调度到相同服务器
lvs1
关机,然后查看lvs2
的ip,再次访问测试# lvs2
ip a s | grep 192.168.88.15
# 输出: inet 192.168.88.15/32 scope global eth0
# client正常能够访问,实现了自动切换
for i in {1..6}; do curl http://192.168.88.15; done
web2
的httpd
服务器关闭,然后查看lvs2
的ipvsadm
配置,再次访问测试# lvs2
ipvsadm -Ln
# 结果只有一个真实服务器TCP -> 192.168.88.100:80 Route 1 0 0
# client正常能够访问,只能访问到web1
for i in {1..6}; do curl http://192.168.88.15; done
lvs1
启动,并启动它的keepalived
服务,查看VIP
会不会自动切换过来,再次访问测试# 查看lvs1网卡,发现VIP自动切换过来了
ip a s | grep 192.168.88.15
# 输出: inet 192.168.88.15/32 scope global eth0
# client正常能够访问,只能访问到web1
for i in {1..6}; do curl http://192.168.88.15; done
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。