互联网中,站点对硬件性能、响应速度、服务稳定性、数据可靠性的要求很高。(单台服务器难以承担所有访问的需要)
LVS——企业中常用的一种群集(Cluster)服务(Linux Virtual Server 虚拟服务器)
Cluster,集群、群集
由多台主机(至少两台节点服务器)构成,但对外只表现为一个整体,只提供一个访问接口(域名或 IP)
提高应用系统的响应能力。获得高并发、高负载(LB)的整体性能。例(DNS轮询、应用层交换、反向代理)等
提高应用系统的可靠性。 例(故障切换、双击热备、多机热备)
工作方式:
提高应用系统的 CPU 运算速度,扩展硬件资源和分析能力。例(云计算、网格计算),依赖于"分布式计算"“并行计算”
访问这个群集系统的唯一入口。对外为 VIP 地址(虚拟 IP/群集 IP 地址)。通常配置主、从双机热备,确保高可用性
每个节点都有独立的 rip(真实 IP),只处理调度器分发的客户机请求;
某个节点暂时失效时,负责调度器的容错机制将其隔离。错误排除后再重新纳入服务器池;
为服务器池提供稳定、一致的文件存取服务,确保群集的统一性;
可使用 NAS 设备或提供 NFS 共享服务的专用服务器;
地址转换(NAT)模式:
IP隧道(TUN)模式:
直接路由(DR)模式:
区别:
准备工作:
主机名 | 操作系统 | 虚拟网卡 | IP地址 | 网关 |
---|---|---|---|---|
NAT-Server | CentOS7 | VM1 ,2 |
192.168.1.1 ,192.168.10.1 |
充当网关 |
Web1 | CentOS7 | VM1 | 192.168.1.2 | 192.168.1.1 |
Web2 | CentOS7 | VM1 | 192.168.1.3 | 192.168.1.1 |
NFS | CentOS7 | VM1 | 192.168.1.4 | 192.168.1.1 |
外网客户机 | Win7 | VM2 | 192.168.10.2 | 192.168.10.1 |
[root@NAT-Server ~]# modprobe ip_vs
[root@NAT-Server ~]# cat /proc/net/ip_vs
[root@NAT-Server ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@NAT-Server ~]# sysctl -p
挂载光盘,并配置yum源
[root@NAT-Server ~]# yum -y install ipvsadm
创建虚拟服务器,VIP必须是本机真实ip地址
[root@NAT-Server ~]# ipvsadm -C #清除原有的策略
[root@NAT-Server ~]# ipvsadm -A -t 192.168.10.1:80 -s rr
添加服务器节点 Web1,Web2
[root@NAT-Server ~]# ipvsadm -a -t 192.168.10.1:80 -r 192.168.1.2:80 -m -w 1
[root@NAT-Server ~]# ipvsadm -a -t 192.168.10.1:80 -r 192.168.1.3:80 -m -w 1
保存策略,并设置开机自启
[root@NAT-Server ~]# ipvsadm-save
[root@NAT-Server ~]# systemctl enable ipvsadm
挂载光盘,并配置yum源
[root@NFS ~]# yum -y install nfs-utils rpcbind
[root@NFS ~]# systemctl enable nfs
[root@NFS ~]# systemctl enable rpcbind
[root@NFS ~]# mkdir -p /opt/web1 /opt/web2
将文件夹web1,web2分别共享给web1,web2主机使用,允许读写操作
[root@NFS ~]# vim /etc/exports
添加:
/opt/web1 192.168.1.2(rw,sync,no_root_squash)
/opt/web2 192.168.1.3(rw,sync,no_root_squash)
注解:
rw 读写
sync 同步写入
no_root_squash 客户机以root身份访问时赋予本地root权限
[root@NFS ~]# systemctl start rpcbind
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# netstat -anpu | grep rpcbind
[root@NFS ~]# showmount -e
挂载光盘,并配置yum源
[root@Web1 ~]# yum -y install httpd
[root@Web1 ~]# yum -y install rpcbind nfs-utils
[root@Web1 ~]# systemctl start rpcbind
[root@Web1 ~]# showmount -e 192.168.1.4
[root@Web1 ~]# mount 192.168.1.4:/opt/web1 /var/www/html/ #Web2 将 /opt/web1 换成 /opt/web2
[root@Web1 ~]# echo "This is Web1
" > /var/www/html/index.html #Web2 将 web1 换成 web2
[root@Web1 ~]# echo "192.168.1.4:/opt/web1 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab #Web2 将 /opt/web1 换成 /opt/web2
[root@Web1 ~]# systemctl start httpd
使用 Win7 客户机访问:http://192.168.10.1
多访问几次,不然看不到效果
在 LVS 调度器上查看 LVS 策略
[root@NAT-Server ~]# ipvsadm -ln
准备工作:
主机名 | 操作系统 | 虚拟网卡 | IP地址 |
DR-Server | CentOS7 | VM1 | 192.168.1.1 |
Web1 | 192.168.1.2 | ||
Web2 | 192.168.1.3 | ||
NFS | 192.168.1.4 | ||
测试客户机 | Win7 | 192.168.1.5 |
采用虚接口的方式,为 ens33 绑定 VIP 地址,以便响应群集访问
[root@DR-Server ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
添加:
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33:0"
DEVICE="ens33:0"
ONBOOT="yes"
IPADDR="192.168.1.188"
PREFIX="24"
[root@localhost network-scripts]# systemctl restart network #重启网卡
[root@localhost network-scripts]# ifconfig ens33:0 #查看IP是否改成
对于 DR 群集模式来说,用于 LVS 负载调度器和各节点需要公用 VIP 地址,应该关闭 linux 内核重定向参数
[root@localhost ~]# cat <<END >> /etc/sysctl.conf
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
挂载光盘,并配置yum源
[root@DR-Server ~]# yum -y install ipvsadm #安装ipvsadm工具
[root@DR-Server ~]# ipvsadm -C
[root@DR-Server ~]# ipvsadm -A -t 192.168.1.188:80 -s rr
[root@DR-Server ~]# ipvsadm -a -t 192.168.1.188:80 -r 192.168.1.2:80 -g -w 1
[root@DR-Server ~]# ipvsadm -a -t 192.168.1.188:80 -r 192.168.1.3:80 -g -w 1
[root@DR-Server ~]# ipvsadm-save
[root@DR-Server ~]# systemctl enable ipvsadm
Web1 Web2 操作一致
使用DR模式,节点服务器,也需要配置VIP地址,使用这个地址做web响应的源地址
[root@Web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
NETMASK=255.255.255.255 #子网掩码必须为255.255.255.255
IPADDR=192.168.1.188 #改为VIP地址
[root@Web1 ~]# systemctl restart network #重启网卡
[root@Web1 ~]# ip a #查看IP是否生效
为 Web1 和 Web2 添加一台路由记录,将 VIP 的数据限制在本地,避免通信混乱
[root@Web1 ~]# yum -y install net-tools
[root@Web1 ~]# route add -host 192.168.1.188 dev lo:0
[root@Web1 ~]# echo "/sbin/route add -host 192.168.1.188 dev lo:0" >> /etc/rc.local
[root@Web1 ~]# cat <<END >> /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
END
[root@Web1 ~]# sysctl -p
挂载光盘,并配置yum源
[root@NFS ~]# yum -y install nfs-utils rpcbind
[root@NFS ~]# systemctl enable nfs
[root@NFS ~]# systemctl enable rpcbind
[root@NFS ~]# mkdir -p /opt/web1 /opt/web2
将文件夹 web1 web2 分别共享给 Web1 Web2 主机使用,允许读写操作
[root@NFS ~]# vim /etc/exports
添加:
/opt/web1 192.168.1.2(rw,sync,no_root_squash)
/opt/web2 192.168.1.3(rw,sync,no_root_squash)
[root@NFS ~]# systemctl start rpcbind
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# netstat -anpu | grep rpcbind
[root@NFS ~]# showmount -e
挂载光盘,并配置yum源
[root@Web1 ~]# yum -y install httpd
[root@Web1 ~]# yum -y install rpcbind nfs-utils
[root@Web1 ~]# systemctl start rpcbind
[root@Web1 ~]# showmount -e 192.168.1.4
[root@Web1 ~]# mount 192.168.1.4:/opt/web1 /var/www/html/ #Web2 将 /opt/web1 换成 /opt/web2
[root@Web1 ~]# echo "This is Web1
" > /var/www/html/index.html #Web2 将 web1 换成 web2
[root@Web1 ~]# echo "192.168.1.4:/opt/web1 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab #Web2 将 /opt/web1 换成 /opt/web2
[root@Web1 ~]# systemctl start httpd
使用浏览器访问:http://192.168.1.188
也可以用脚本测试:
[root@NFS ~]# for i in $(seq 10); do curl http://192.168.1.188;done