赞
踩
提高性能,如计算密集型应用,如:天气预报、核试验模拟,较低成本,相对百万美元的超级计算机,价格便宜,提高可扩展性,只要增加集群节点即可,增强可靠性,多个节点完成相同功能,避免单点失败。
前端:负载均衡层,由一台或者多台负载调度器构成。中间:服务器群组层,由一组实际运行应用服务的服务的服务器组成,低端:数据共享存储层,提供共享存储空间的存储区域。
LVS的工作模式:
术语:
常见的调度算法,共10个,常用的有4个:
准备环境
client1:eth0->192.168.4.10,网关192.168.4.5
lvs1: eth0 -> 192.168.4.5;eth1->192.168.2.5
web1:eth1->192.168.2.100;网关192.168.2.5
web2:eth1->192.168.2.200;网关192.168.2.5
配置好网段后注意需要关闭selinux和防火墙
[root@web1 ~]# vim /etc/yum.repos.d/local.repo [local_repo] name=CentOS-$releasever - Base baseurl=ftp://192.168.2.254/centos-1804 enabled=1 gpgcheck=0 [root@web2 ~]# vim /etc/yum.repos.d/local.repo [local_repo] name=CentOS-$releasever - Base baseurl=ftp://192.168.2.254/centos-1804 enabled=1 gpgcheck=0 [root@web1 ~]# yum install -y httpd [root@web2 ~]# yum install -y httpd # 创建测试页面 [root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html [root@web2 ~]# echo "apache web server2" > /var/www/html/index.html [root@web1 ~]# systemctl enable httpd --now [root@web2 ~]# systemctl enable httpd --now # 在lvs1上测试到web服务器的访问 [root@lvs1 ~]# curl http://192.168.2.100/ 192.168.2.100 [root@lvs1 ~]# ^100^200 # 将上一条命令中的100换成200,执行 curl http://192.168.2.200/ apache web server2
# 查看ip转发功能的内核参数
[root@lvs1 ~]# sysctl -a # 查看所有的内核参数
[root@lvs1 ~]# sysctl -a | grep ip_forward # 查看ip_foward参数
net.ipv4.ip_forward = 1 # 1表示打开转发,0表示关闭转发
# 永久设置打开ip_forward功能
[root@lvs1 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@lvs1 ~]# sysctl -p
# 测试从客户端到服务器的访问
[root@client1 ~]# curl http://192.168.2.100/
192.168.2.100
[root@client1 ~]# curl http://192.168.2.200/
apache web server2
[root@lvs1 ~]# yum install -y ipvsadm
[root@lvs1 ~]# ipvsadm
-A: 添加虚拟服务器
-E: 编辑虚拟服务器
-D: 删除虚拟服务器
-t: 添加tcp服务器
-u: 添加udp服务器
-s: 指定调度算法。如轮询rr/加权轮询wrr/最少连接lc/加权最少连接wlc
-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器
-r: 指定真实服务器
-w: 设置权重
-m: 指定工作模式为NAT
-g: 指定工作模式为DR
# 为web服务器创建虚拟服务器,使用rr调度算法 [root@lvs1 ~]# ipvsadm -A -t 192.168.4.5:80 -s rr # 查看配置 [root@lvs1 ~]# ipvsadm -Ln # L是列出,n是使用数字,而不是名字 # 向虚拟服务器中添加RIP [root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m [root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 2 -m # 查看配置 [root@lvs1 ~]# ipvsadm -Ln # 验证 [root@client1 ~]# for i in {1..4} > do > curl http://192.168.4.5/ > done apache web server2 192.168.2.100 apache web server2 192.168.2.100 # 删除配置。(如果配置有错,用以下命令删除重配置) [root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80 # 修改调度模式为加权轮询 [root@lvs1 ~]# ipvsadm -E -t 192.168.4.5:80 -s wrr # 验证配置 [root@client1 ~]# for i in {1..6}; do curl http://192.168.4.5/; done apache web server2 apache web server2 192.168.2.100 apache web server2 apache web server2 192.168.2.100
# 删除lvs虚拟服务器配置 [root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80 [root@lvs1 ~]# ipvsadm -Ln # 删除lvs1上eth1的配置 [root@lvs1 ~]# nmcli connection modify eth1 ipv4.method disabled ipv4.addresses '' [root@lvs1 ~]# ifdown eth1 # 修改web1的配置:停掉eth1的地址。配置eth0的地址为192.168.4.100 # 进入网卡配置文件目录 [root@web1 ~]# cd /etc/sysconfig/network-scripts/ # eth0网卡的配置文件叫ifcfg-eth0 [root@web1 network-scripts]# ls ifcfg-eth* ifcfg-eth0 ifcfg-eth1 ifcfg-eth2 ifcfg-eth3 # 配置eth0地址 [root@web1 network-scripts]# vim ifcfg-eth0 TYPE=Ethernet # 网络类型为以太网 BOOTPROTO=none # IP地址是静态配置的,也可以用static NAME=eth0 # 为设备重命名 DEVICE=eth0 # 网卡设备名 ONBOOT=yes # 开机激活网卡 IPADDR=192.168.4.100 # IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.4.254 # 网关 [root@web1 network-scripts]# ifdown eth0; ifup eth0 # 禁用激活网卡 # 在web1上停掉eth1 [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE=Ethernet BOOTPROTO=none NAME=eth1 DEVICE=eth1 ONBOOT=no [root@web1 ~]# ifdown eth1 # 修改web2的网络 [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.4.200 NETMASK=255.255.255.0 GATEWAY=192.168.4.254 [root@web2 ~]# ifdown eth0; ifup eth0 [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE=Ethernet BOOTPROTO=none NAME=eth1 DEVICE=eth1 ONBOOT=no [root@web2 ~]# ifdown eth1 # 终端卡住,关掉它,在新终端重新连
使用ARP防火墙也可以禁止对VIP的ARP请求
[root@web ~]# yum install -y arptables_if
[root@web ~]# arptables -A lN -d <virtual_ip>-j DROP
[root@web ~]# arptables -A OUT -s <virtual_ip>-j mangle \
> --mangle-ip-s <real_ip>
[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@lvs1 network-scripts]# vim ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15
PREFIX=24
[root@lvs1 network-scripts]# ifup eth0:0
# 查看新的地址
[root@lvs1 network-scripts]# ifconfig
[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@web1 network-scripts]# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.4.15 NETMASK=255.255.255.255 NETWORK=192.168.4.15 BROADCAST=192.168.4.15 ONBOOT=yes NAME=lo:0 [root@web1 network-scripts]# ifup lo:0 [root@web1 network-scripts]# ifconfig # 把web1的配置拷贝到web2上 [root@web1 network-scripts]# scp ./ifcfg-lo:0 192.168.4.200:/etc/sysconfig/network-scripts/ [root@web2 ~]# ifup lo:0 [root@web2 ~]# ifconfig
[root@web1 ~]# sysctl -a | grep arp_ignore net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 0 [root@web1 ~]# sysctl -a | grep arp_announce net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 0 [root@web1 ~]# 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 [root@web1 ~]# sysctl -p [root@web2 ~]# 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 [root@web2 ~]# sysctl -p
# 创建虚拟服务器 [root@lvs1 ~]# ipvsadm -A -t 192.168.4.15:80 -s wlc # 向虚拟服务器中加真实服务器 [root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -w 1 -g [root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -w 2 -g # 查看配置 [root@lvs1 ~]# ipvsadm -Ln # 客户验证 [root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done apache web server2 192.168.2.100 apache web server2 apache web server2 192.168.2.100 apache web server2
[root@web1 ~]# systemctl stop httpd # 客户端访问时,转发到web1上的请求,将会拒绝连接 [root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done apache web server2 curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接 apache web server2 apache web server2 curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接 apache web server2 # 的规则中删除web1 [root@lvs1 ~]# ipvsadm -d -t 192.168.4.15:80 -r 192.168.4.100 [root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done apache web server2 apache web server2 apache web server2 apache web server2 apache web server2 apache web server2
# 在lvs上可以访问到web服务器 [root@lvs1 ~]# curl http://192.168.4.100/ 192.168.2.100 [root@lvs1 ~]# curl http://192.168.4.200/ apache web server2 # 查看vip [root@lvs1 ~]# ifconfig eth0:0 eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.4.15 netmask 255.255.255.0 broadcast 192.168.4.255 ether 52:54:00:0d:fb:79 txqueuelen 1000 (Ethernet) [root@web1 ~]# ifconfig lo:0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.4.15 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback) # 查看内核参数 [root@web1 ~]# sysctl -p 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 # 查看规则 [root@lvs1 ~]# 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.4.15:80 wlc -> 192.168.4.100:80 Route 1 0 0 -> 192.168.4.200:80 Route 2 0 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。