赞
踩
目录
ipvsadm
是用于配置IP负载均衡的工具,实现LVS内核的工具,用于实现负载均衡,将传入的连接分发给一组后端服务器
选项 | 说明 |
---|---|
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc) |
-a | 添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定VIP地址及TCP端口 |
-r | 指定RIP地址及TCP端口 |
-m | 表示使用NAT群集模式 |
-g | 表示使用DR模式 |
-j | 表示使用TUN模式 |
-w | 设置权重(权重为0时表示暂停节点) |
-p | -p 60 表示保持长连接60秒 |
-l | 列表查看 LVS虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln |
- #管理集群服务
- ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
- ipvsadm -D -t|u|f service-address #删除
- ipvsadm –C #清空
- ipvsadm –R #重载,相当于ipvsadm-restore
- ipvsadm -S [-n] #保存,相当于ipvsadm-save
- #管理集群中的RS
- ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
- ipvsadm -d -t|u|f service-address -r server-address
- ipvsadm -L|l [options]
- ipvsadm -Z [-t|u|f service-address]
-
- 选项:
- lvs类型:
- -g: gateway, dr类型,默认
- -i: ipip, tun类型
- -m: masquerade, nat类型
- -w weight:权重
-
- 例子:
- ipvsadm -A -t 12.0.0.1:80 -s rr
- -A 新建代理服务器
- -t tcp协议
- 12:0.0.1:80
- -s 指定调度算法
-
- ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m
- -r 真实服务器
- -m 表示使用NAT群集模式

- Unit File: ipvsadm.service
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config
- ipvs调度规则文件:/etc/sysconfig/ipvsadm
前提:关闭所有设备的防火墙和核心防护
- [root@localhost ~]#systemctl stop firewalld
- [root@localhost ~]#setenforce 0
注:
- 当客户端访问负载调度服务器,负载调度服务器会根据轮询的调度算法,将请求调度到节点服务器1或节点服务器2上(比例1:1)。
- 然后节点服务器1和节点服务器2从NFS共享存储服务器上获取网页资源,然后再通过负载调度服务器返回给客户端
在现实环境中,节点服务器1和节点服务器2从NFS共享存储服务器上获取的网页资源内容是一样的,但这里,为了方便展示效果,就使用不同的网页资源,方便区分。
浏览器访问:
情况一:
http://172.16.12.10/ ---> 负载调度服务器 ---> 节点服务器1 ---> NFS共享存储服务器:welcome to web 1
情况二:
http://172.16.12.10/ ---> 负载调度服务器 ---> 节点服务器2 ---> NFS共享存储服务器:welcome to web 2
NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS
协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡
群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支
持的一种协议
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程
到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS
共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持
- [root@localhost ~]#yum install nfs-utils rpcbind -y
- [root@localhost ~]#systemctl start rpcbind
- [root@localhost ~]#systemctl start nfs
- [root@localhost ~]#mkdir /opt/web1 /opt/web2
- [root@localhost ~]#chmod 777 /opt/web1 /opt/web2
- [root@localhost ~]#echo 'welcome to web 1' > /opt/web1/index.html
- [root@localhost ~]#echo 'welcome to web 2' > /opt/web2/index.html
- [root@localhost ~]#vim /etc/exports
- /opt/web1 172.16.12.0/24(rw,sync)
- /opt/web2 172.16.12.0/24(rw,sync)
- [root@localhost ~]#exportfs -r
- [root@localhost ~]#exportfs -v
- [root@localhost ~]#systemctl restart nfs
- [root@localhost ~]#yum install epel-release.noarch -y
- [root@localhost ~]#yum install -y nginx
- [root@localhost ~]#systemctl start nginx
- [root@localhost ~]#showmount -e 172.16.12.13
- [root@localhost ~]#mount 172.16.12.13:/opt/web1 /usr/share/nginx/html
- [root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- BOOTPROTO=static
- DEFROUTE=yes
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- IPADDR=172.16.12.11
- NETMASK=255.255.255.0
- GATEWAY=172.16.12.10
- DNS1=8.8.8.8
- DNS2=114.114.114.114
- [root@localhost ~]#systemctl restart network
- [root@localhost ~]#yum install epel-release.noarch -y
- [root@localhost ~]#yum install -y nginx
- [root@localhost ~]#systemctl start nginx
- [root@localhost ~]#showmount -e 172.16.12.13
- [root@localhost ~]#mount 172.16.12.13:/opt/web2 /usr/share/nginx/html
- [root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- BOOTPROTO=static
- DEFROUTE=yes
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- IPADDR=172.16.12.12
- NETMASK=255.255.255.0
- GATEWAY=172.16.12.10
- DNS1=8.8.8.8
- DNS2=114.114.114.114
- [root@localhost ~]#systemctl restart network
- #添加新网卡并配置网卡信息,修改旧网卡网关
- [root@localhost ~]#cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36
- [root@localhost network-scripts]#vim ifcfg-ens36
- TYPE=Ethernet
- BOOTPROTO=static
- DEFROUTE=yes
- NAME=ens36
- DEVICE=ens36
- ONBOOT=yes
- IPADDR=11.0.0.10
- NETMASK=255.255.255.0
- GATEWAY=11.0.0.10
- DNS1=8.8.8.8
- DNS2=114.114.114.114
- [root@localhost network-scripts]#vim ifcfg-ens33
- TYPE=Ethernet
- BOOTPROTO=static
- DEFROUTE=yes
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- IPADDR=172.16.12.10
- NETMASK=255.255.255.0
- GATEWAY=172.16.12.10
- DNS1=8.8.8.8
- DNS2=114.114.114.114
- [root@localhost network-scripts]#systemctl restart network
- [root@localhost network-scripts]#ifconfig

- [root@localhost ~]#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
- [root@localhost ~]#sysctl -p
- [root@localhost ~]#sysctl -a | grep ip_forward
- #加载模块
- [root@localhost ~]#modprobe ip_vs
- [root@localhost ~]#cat /proc/net/ip_vs
- #搭建本地yum仓库安装ipvsadm
- [root@localhost ~]#mount /dev/sr0 /mnt
- [root@localhost ~]#cd /etc/yum.repos.d/
- [root@localhost yum.repos.d]#mkdir bak
- [root@localhost yum.repos.d]#mv *.repo bak
- [root@localhost yum.repos.d]#vim local.repo
- [local]
- name=local
- baseurl=file:///mnt
- gpgcheck=0
- [root@localhost yum.repos.d]#yum clean all
- [root@localhost yum.repos.d]#yum makecache
- [root@localhost ~]#yum install -y ipvsadm.x86_64
- #开启ipvsadm服务
- [root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
- [root@localhost ~]#systemctl start ipvsadm.service
- [root@localhost ~]#systemctl status ipvsadm.service
- [root@localhost ~]#ipvsadm -C
- [root@localhost ~]#ipvsadm -ln
- [root@localhost ~]#ipvsadm -A -t 11.0.0.10:80 -s rr
- [root@localhost ~]#ipvsadm -a -t 11.0.0.10:80 -r 172.16.12.11:80 -m
- [root@localhost ~]#ipvsadm -a -t 11.0.0.10:80 -r 172.16.12.12:80 -m
- [root@localhost ~]#ipvsadm -ln
- [root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]#curl 11.0.0.10
模拟节点服务器1宕机:
即关闭节点服务器1的nginx服务,那么NAT模式下的LVS负载调度服务器会有对后端节点服务器的健康检查机制吗?
客户端测试得知,当节点服务器1宕机,LVS负载调度服务器仍会调度到宕机的节点服务器1上,所以LVS负载调度服务器不会对后端的节点服务器进行健康检测,不会检测后端的服务器是否正常工作
注:
在调度服务器可查看,当前系统上 IPVS 的配置信息
- [root@localhost ~]#cat /proc/net/ip_vs
- [root@localhost ~]#ipvsadm -ln
前提:关闭所有设备的防火墙和核心防护
- [root@localhost ~]#systemctl stop firewalld
- [root@localhost ~]#setenforce 0
注:
- 当客户端发送请求时,请求会首先到达负载调度服务器。负载调度服务器根据轮询的调度算法,将请求转发给节点服务器1或节点服务器2
- 当节点服务器1或节点服务器2接收到请求后,处理并生成响应,直接将响应数据包发送回客户端,不需要经过负载调度服务器
- 需要在负载调度服务器、所有的节点服务器上的配置虚拟IP(VIP),关闭所有节点服务器的arp广播
在现实环境中,从节点服务器1和节点服务器2获取的网页资源内容是一样的,但这里,为了方便展示效果,就使用不同的网页资源,方便区分。
浏览器访问:
情况一:
http://172.16.12.200/ ---> 负载调度服务器 ---> 节点服务器1 ---> welcome to web 1
客户端 <----
情况二:
http://172.16.12.200/ ---> 负载调度服务器 ---> 节点服务器2 ---> welcome to web 2
客户端 <----
- [root@localhost ~]#ifconfig lo:0 172.16.12.200/32
- [root@localhost ~]#ip a
- [root@localhost ~]#cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
- [root@localhost network-scripts]#vim ifcfg-lo:0
- #修改回环网卡名,IP地址,子网掩码
- DEVICE=lo:0
- IPADDR=172.16.12.200
- NETMASK=255.255.255.255
- NETWORK=127.0.0.0
- [root@localhost network-scripts]#systemctl restart network
- [root@localhost network-scripts]#ip a
- [root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
- [root@localhost network-scripts]#route -n
- #添加系统只响应目的IP为本地IP的ARP请求
- #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
- [root@localhost ~]#vim /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.default.arp_ignore = 1
- net.ipv4.conf.default.arp_announce = 2
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- [root@localhost ~]#sysctl -p
- [root@localhost ~]#yum install epel-release.noarch -y
- [root@localhost ~]#yum install -y nginx
- [root@localhost ~]#systemctl start nginx
- [root@localhost ~]#echo "welcome to web 1" > /usr/share/nginx/html/index.html
- [root@localhost ~]#cat /usr/share/nginx/html/index.html
- [root@localhost ~]#ifconfig lo:0 172.16.12.200/32
- [root@localhost ~]#ip a
- [root@localhost ~]#cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
- [root@localhost network-scripts]#vim ifcfg-lo:0
- #修改回环网卡名,IP地址,子网掩码
- DEVICE=lo:0
- IPADDR=172.16.12.200
- NETMASK=255.255.255.255
- NETWORK=127.0.0.0
- [root@localhost network-scripts]#systemctl restart network
- [root@localhost network-scripts]#ip a
- [root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
- [root@localhost network-scripts]#route -n
- #添加系统只响应目的IP为本地IP的ARP请求
- #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
- [root@localhost ~]#vim /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.default.arp_ignore = 1
- net.ipv4.conf.default.arp_announce = 2
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- [root@localhost ~]#sysctl -p
- [root@localhost ~]#yum install epel-release.noarch -y
- [root@localhost ~]#yum install -y nginx
- [root@localhost ~]#systemctl start nginx
- [root@localhost ~]#echo "welcome to web 2" > /usr/share/nginx/html/index.html
- [root@localhost ~]#cat /usr/share/nginx/html/index.html
- [root@localhost ~]#ifconfig ens33:0 172.16.12.200/32
- [root@localhost ~]#ip a
- [root@localhost ~]#cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
- [root@localhost network-scripts]#vim ifcfg-ens33:0
- #删除dns与网关,注意子网
- NAME=ens33:0
- DEVICE=ens33:0
- IPADDR=172.16.12.200
- NETMASK=255.255.255.255
- [root@localhost network-scripts]#systemctl restart network
- [root@localhost ~]#ip a
对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
- [root@localhost ~]#vim /etc/sysctl.conf
- net.ipv4.ip_forward = 0
- net.ipv4.conf.all.send_redirects = 0
- net.ipv4.conf.default.send_redirects = 0
- net.ipv4.conf.ens33.send_redirects = 0
- [root@localhost ~]#sysctl -p
- #加载模块
- [root@localhost ~]#modprobe ip_vs
- [root@localhost ~]#cat /proc/net/ip_vs
- #搭建本地yum仓库安装ipvsadm
- [root@localhost ~]#mount /dev/sr0 /mnt
- [root@localhost ~]#cd /etc/yum.repos.d/
- [root@localhost yum.repos.d]#mkdir bak
- [root@localhost yum.repos.d]#mv *.repo bak
- [root@localhost yum.repos.d]#vim local.repo
- [local]
- name=local
- baseurl=file:///mnt
- gpgcheck=0
- [root@localhost yum.repos.d]#yum clean all
- [root@localhost yum.repos.d]#yum makecache
- [root@localhost ~]#yum install -y ipvsadm.x86_64
- #开启ipvsadm服务
- [root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
- [root@localhost ~]#systemctl start ipvsadm.service
- [root@localhost ~]#systemctl status ipvsadm.service
- [root@localhost ~]#ipvsadm -C
- [root@localhost ~]#ipvsadm -ln
- [root@localhost ~]#ipvsadm -A -t 172.16.12.200:80 -s rr
- [root@localhost ~]#ipvsadm -a -t 172.16.12.200:80 -r 172.16.12.11:80 -g
- [root@localhost ~]#ipvsadm -a -t 172.16.12.200:80 -r 172.16.12.12:80 -g
- [root@localhost ~]#ipvsadm -ln
- [root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
- #客户端访问负载调度服务器的虚拟网卡
- [root@localhost ~]#curl 172.16.12.200
模拟节点服务器1宕机:
即关闭节点服务器1的nginx服务,那么DR模式下的LVS负载调度服务器会有对后端节点服务器的健康检查机制吗?
客户端测试得知,当节点服务器1宕机,LVS负载调度服务器仍会调度到宕机的节点服务器1上,所以LVS负载调度服务器不会对后端的节点服务器进行健康检测,不会检测后端的服务器是否正常工作
注:
在调度服务器可查看,当前系统上 IPVS 的配置信息
- [root@localhost ~]#cat /proc/net/ip_vs
- [root@localhost ~]#ipvsadm -ln
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。