一、什么是LVS、群集的概述
(1)群集技术概述
在互联网中,站点对硬件性能、响应速度、服务器稳定性、数据可靠性的要求是很高的
因为单台服务器难以承担所有访问的需求,所以就有了多种解决方案:
(1)使用大型机——价格昂贵
(2)专用负载分流设备——资源浪费
(3)构建集群服务器——通过整合多台相对价格低廉的普通服务器,以同一个地址对外提供服务
——而LVS就是企业中常用的一种群集(cluster)服务 (即Linux Virtual Server虚拟服务器)
扩展:
Linux Virtual Server是Linux内核的一部分,是针对Linux内核的负载均衡解决方案
Linux Virtual Server是在1998年5月由我国章文嵩博士创建,官方网站为:http://www.linuxvirtualserver.org/ 有兴趣可以去看一看
(2)群集的含义
别名: Cluster、集群、群集
含义: 即由多台节点服务器 (至少两台节点服务器)
构成,但是对外只表现为一个整体,即只提供一个访问接口 (这个访问接口可以是域名或ip)
(3)群集的类型
负载均衡群集(Load Balancer)
主要是提高应用系统的响应能力,从而获得高并发、高负载然后提高整体性能
例: DNS轮询、应用层交换、反向代理等
高可用群集(High Available)
主要是提高应用系统的可靠性,使用两台或多台节点服务器进行切换等
例: 故障切换、双击热备、多机热备
工作方式主要是:
1.双工:所有节点同时在线
2.主从:主节点在线,从节点在主节点发生故障时自动切换为主节点
高性能运算群集(High Performance Computer,这个用的比较少)
主要是提高应用系统的CPU运算速度,扩展硬件资源和分析能力
例: 云计算、网格计算,依赖于分布式计算和并行计算
————在特殊环境中可以合并使用这几种群集模式,我们这里只说负载均衡群集
(4)负载均衡群集的结构
第一层:负载调度器 (Load Balancer或Director,至少需要一个)
即访问这个群集系统的唯一入口,对外为VIP地址 (虚拟ip/群集ip地址) ,通常配置为主、从方式的双击热备,确保群集的高可用性
第二层:服务器池 (Server Pool,这里使用的是大量的真实服务器)
首先每个节点都有独立的rip (即真实ip) ,这里的节点服务器只处理调度器分发的客户机请求,当某个节点服务器暂时失效时,负责调度器的容错机制会将其隔离,在错误排除后再重新纳入服务器池
第三层:共享存储 (Share Storage)
这里是为服务器池提供稳定的、一致的文件存储服务,确保群集的数据统一性,可以使用NAS设备或者搭建NFS共享服务的专用服务器
(5)负载均衡群集的工作模式
工作模式有: 基于ip、端口、内容等,基于ip的工作模式效率是最高的
因为在工作中一般使用最多的是基于ip的工作模式,所以这里只说基于ip的模式
地址转换模式(NAT模式)
原理: 调度器为节点服务器的网关,是客户机的访问入口和各节点服务器的回应出口。即调度器同时提供访问入口和回应出口
结构: 服务器和调度器使用私有ip,在同一物理网络,安全性优于IP隧道模式和直接路由模式
IP隧道模式(TUN模式)
原理: 调度器为客户机的访问入口,节点服务器通过专用ip隧道与调度器互相通信,然后节点服务器直接回应客户机。即客户机访问调度器,调度器通过专用ip隧道和节点服务器进行通信,再通过节点服务器直接回应客户机
结构: 是开放式的网络结构,节点服务器都具有独立的公网ip,分散在不同的地方,可以直接回应客户机
直接路由模式(DR模式)
原理: 调度器只为客户机提供访问入口,然后传给节点服务器,再通过节点服务器直接回应客户机。即客户机访问调度器,调度器通过本地网络和节点服务器进行通信,然后节点服务器直接回应客户机
结构: 是半开放式的网络结构,节点服务器集中在一起,和调度器在同一物理网络,通过本地连接
——————————————————总结——————————————————
NAT模式只需要一个公网ip,最易于使用,而且安全性高,许多硬件负载均衡器会采用。DR模式和TUN模式的负载能力更强大,使用的范围更广,但是节点的安全性稍微低一点。
(6)LVS的负载调度算法一般分为:
- 轮询(Round Robin): 按照顺序轮流分配,不管实际连接数和系统负载
- 加权轮询(Weighted Round Robin): 自动查询各节点的负载情况,动态调整其权重
- 最少连接(Least Connections): 优先分配给连接数最少的节点
- 加权最少连接(Weighted Least Connections): 服务器节点性能差异大时,自动调整权重,权重高的承担更大比例的活动连接负载
二、搭建LVS负载均衡群集(NAT模式)
本次实验的操作系统均为Centos7
(1)实验环境
名称 | ip地址 | 扮演角色 | 网卡 |
LVS | 192.168.100.1 200.0.0.1 | LVS负载调度器 | ens33(VM1网卡) ens37(VM2网卡) |
Web1 | 192.168.100.2 | web服务器 | ens33(VM1网卡) |
Web2 | 192.168.100.3 | web服务器 | ens33(VM1网卡) |
NFS | 192.168.100.4 | nfs共享存储 | ens33(VM1网卡) |
win7 | 200.0.0.2 | 客户机 | VM2网卡 |
内网的Web1、Web2的网关要指向调度器
(2)实验步骤
首先先把各个服务器的ip配置好,并且ping通,关闭防火墙、Selinux等(略)
LVS调度器配置
******(1)进行基础配置 [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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:ad:db brd ff:ff:ff:ff:ff:ff inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::7762:f351:dbfc:cb0e/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:ad:e5 brd ff:ff:ff:ff:ff:ff [root@lvs ~]# cd /etc/sysconfig/network-scripts/ [root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens37 (复制原来的网卡ens33到新的网卡) [root@lvs network-scripts]# vim ifcfg-ens37 (编辑新的网卡) 修改为: TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens37 DEVICE=ens37 ONBOOT=yes IPADDR=200.0.0.1 PREFIX=24 IPV6_PRIVACY=no 保存退出 [root@lvs network-scripts]# systemctl restart network (重启网卡) [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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:ad:db brd ff:ff:ff:ff:ff:ff inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::7762:f351:dbfc:cb0e/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:ad:e5 brd ff:ff:ff:ff:ff:ff inet 200.0.0.1/24 brd 200.0.0.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::18f:b43e:375e:defb/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@lvs network-scripts]# cd ******(2)加载LVS模块,查看内核是否支持LVS [root@lvs ~]# modprobe ip_vs (加载模块) [root@lvs ~]# cat /proc/net/ip_vs (确认内核支持LVS) IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn ******(3)因为调度器充当网关的角色,所以要开启路由功能 [root@lvs ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf [root@lvs ~]# sysctl -p net.ipv4.ip_forward = 1 ******(4)使用yum安装ipvsadm [root@lvs ~]# mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护,将以只读方式挂载 [root@lvs ~]# yum -y install ipvsadm 。。。。。。 完毕! [root@lvs ~]# ipvsadm -v (查看版本) ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1) ******(5)使用ipvsadm ————————————————————————————————华丽分割线—————————————————————————————————— ipvsadm的相关命令 格式: ipvsadm 选项 -A 后面跟-t的虚拟ip地址以及端口号加-s选择负载调度算法 (添加虚拟服务器) 如:ipvsadm -A -t 200.0.0.1:80 -s rr -t 后面跟vip地址以及tcp端口号 (vip就是虚拟ip,必须是本机的真实ip地址) -s 选择负载调度算法(轮询为rr、加权轮询为wrr、最少链接为lc、加权最少连接为wlc) -a 后面跟-t的虚拟ip以及端口号加-r的真实ip以及端口号加选择什么模式如-m选择net模式最后加-w设置权重 (添加节点服务器) 如:ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1 -r 后面跟rip地址以及tcp端口 (rip就是真实ip) -m 使用nat群集模式 -g 使用DR模式 -i 使用TUN模式 -w 设置权重(0时暂停节点) -d 后面跟-r的真实ip以及端口加-t的虚拟ip地址以及端口(删除单个节点) 如:ipvsadm -d -r 192.168.100.2:80 -t 200.0.0.1:80 -D 后面跟-t的虚拟ip以及端口 (删除整个虚拟服务器) 如:ipvsadm -D -t 200.0.0.1:80 -C 清空策略 ——————————————————————————————————————————————————————————————————————————— [root@lvs ~]# ipvsadm -A -t 200.0.0.1:80 -s rr (创建虚拟服务器) [root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1 (创建节点服务器) [root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.3:80 -m -w 1 (创建节点服务器) [root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm (保存配置) [root@lvs ~]# cat /etc/sysconfig/ipvsadm (查看配置) -A -t lvs:http -s rr -a -t lvs:http -r 192.168.100.2:http -m -w 1 -a -t lvs:http -r 192.168.100.3:http -m -w 1 [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 200.0.0.1:80 rr -> 192.168.100.2:80 Masq 1 0 0 -> 192.168.100.3:80 Masq 1 0 0 [root@lvs ~]# systemctl enable ipvsadm (设置开机自启) Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service. [root@lvs ~]# systemctl start ipvsadm (开启服务)