一、群集概述
1.1 群集的概念
Cluster,集群、群集
有多台主机钩成,但对外只表现为一个整体
1.2 群集的作用
有多台主机钩成,但对外只表现为一个整体
接待用户的请求
1.3 为什么需要群集
互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心
1.31 解决方法
使用价格昂贵的小型机、大型机
使用普通服务器构建服务群集
1.4 群集的种类
根据群集所针对的目标差异,可分为三种类型:
负载均衡群集
高可用群集
高性能运算群集
1.41 负载均衡群集(Load Balance Cluster)
● 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
● LB的负载分配依赖于主节点的分流算法
1.42 高可用群集(High Availability Cluster)——主●备
● 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
● HA的工作方式包括双工和主从两种模式
1.43 高性能运算群集(High Performance Computer Cluster)
● 提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
● 高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
二、负载均衡群集架构
第一层,负载调度器(Load Balancer或Director)
第二层,服务器池(Server Pool)
第三层,共享存储(Share Storage)
2.1 负载均衡群集工作模式分析
负载均衡群集是目前企业用得最多的群集类型
群集的负载调度技术有三种工作模式:
地址转换——NAT;优点:与负载调度器位于同一个物理网络,安全性要优于其他两种方式;缺点:负载量相较于另外两种较低
IP隧道——Tunnel;特点:具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信;优点:承载更多用户
直接路由——DR
相同点:都是各web节点直接响应客户机
不同点:
1、TUN各节点有独立的公网,DR没有
2、TUN各web节点和调度器是IP隧道的方式,而DR各web节点和调度器是局域网方式
3、YUN web节点直接响应,DR web节点需要通过路由器响应
2.11 NAT模式——地址转换
● Network Address Translation,简称NAT模式
● 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
● 服务器节点使用私有IP地址,优点:与负载调度器位于同一个物理网络,安全性要优于其他两种方式;缺点:负载量相较于另外两种较低
2.12 TUN模式——IP隧道
● lP Tunnel,简称TUN模式
● 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
● 服务器节点分散在互联网中的不同位置,特点:具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信;优点:承载更多用户
2.13 DR模式——直接路由
● Direct Routing,简称DR模式
● 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
● 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
2.14 TUN和DR的区别
相同点:都是各web节点直接响应客户机
不同点:
1、TUN各节点有独立的公网,DR没有
2、TUN各web节点和调度器是IP隧道的方式,而DR各web节点和调度器是局域网方式
3、YUN web节点直接响应,DR web节点需要通过路由器响应
三、关于LVS虚拟服务器
3.1 Linux Virtual Server
● 针对Linux内核的负载均衡解决方案
● modprobe ip_vs(加载lvs)
● cat /proc/net/ip_vs(查看lvs)
3.2 LVS的负载调度算法
3.21 轮询(RR)
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等的对待每一台服务器,而不管服务器实际的链接数和系统负载
解释:依次顺序分配,公平
3.22 加权轮询(WRR)
1、根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多
2、保证性能的服务器承担更多的访问流量
解释:权重高的优先分配,按权重比例分配
3.23 最少连接(LC)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
解释:连接数少的优先分配
3.24 加权最少连接(WLC)
1、在服务器节点的性能差异较大时,可以为真实服务器自动调整权重
2、性能较高的节点将承担更大比例的活动连接负载
解释:服务器节点的性能差异较大时,自动调整权重,按权重比例分配连接
四、LVS群集创建与管理
1、创建虚拟服务器
2、添加、删除服务器节点
3、查看群集及节点情况
4、保存负载分配策略
4.1 部署步骤
1、加载ip_vs模块,安装ipvsadm工具
2、开启路由转发
3、新建LVS虚拟服务器并添加节点服务器
4、配置节点服务器
(1)建立测试网站
(2)挂载NFS共享存储
(3)建立测试网页
5、保存规则并测试
4.2 LVS-NAT项目部署
部署环境
调度服务器: | vmnet1:192.168.100.11(内网)vmnet2:192.168.200.11(外网) |
---|---|
web1 | vmnet1:192.168.100.12(内网) |
web2 | vmnet1:192.168.100.13(内网) |
nfs | vmnet1:192.168.100.14(内网) |
客户端 | vmnet2:192.168.200.15(外网) |
1、配置网卡
##配置完网卡记得重启网卡!!内网ping内网,外网ping外网互通
web1、web2的网关需指向调度服务器的vmnet1 |
---|
客户端的网关需指向调度服务器的vmnet2 |
调度服务器的vmnet2记得删除UUID |
2、配置NFS
[root@server4 ~]# yum -y install rpcbind nfs-utils
[root@server4 ~]# mkdir /opt/web1 #创建网页
[root@server4 ~]# mkdir /opt/web2
[root@server4 ~]# echo "<h1> this is web1. </h1>" > /opt/web1/index.html
[root@server4 ~]# echo "<h1> this is web2. </h1>" > /opt/web2/index.html
[root@server4 ~]# vi /etc/exports #添加
/opt/web1 192.168.100.12(ro)
/opt/web2 192.168.100.13(ro)
[root@server4 ~]# systemctl restart nfs
[root@server4 ~]# systemctl restart rpcbind
[root@server4 ~]# showmount -e 192.168.100.14 #查看
Export list for 192.168.100.14:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
3、配置web1和web2
web1:
[root@server2 ~]# yum -y install httpd #新系统未下载过
[root@server2 ~]# showmount -e 192.168.100.14
Export list for 192.168.100.14:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@server2 ~]# mount 192.168.100.14:/opt/web1 /var/www/html
[root@server2 ~]# df -Th #检查挂载
[root@server2 ~]# systemctl restart httpd
[root@server2 ~]# netstat -anpt |grep httpd #检查服务是否开启
tcp6 0 0 :::80 :::* LISTEN 54179/httpd
[root@server2 ~]# curl http://localhost #未出效果
[root@server2 ~]# systemctl stop firewalld #关闭防火墙
[root@server2 ~]# setenforce 0
[root@server2 ~]# curl http://localhost
<h1> this is web1. </h1>
web2:
[root@server3 ~]# yum -y install httpd
[root@server3 ~]# showmount -e 192.168.100.14
Export list for 192.168.100.14:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@server3 ~]# mount 192.168.100.14:/opt/web2 /var/www/html
[root@server3 ~]# df -Th
[root@server3 ~]# systemctl start httpd
[root@server3 ~]# netstat -anpt |grep httpd #检查服务是否开启
tcp6 0 0 :::80 :::* LISTEN 54055/httpd
[root@server3 ~]# curl http://localhost #没出效果
[root@server3 ~]# systemctl stop firewalld #关闭防火墙
[root@server3 ~]# setenforce 0
[root@server3 ~]# curl http://localhost
<h1> this is web2. </h1>
4、配置LVS调度服务器
[root@server1 ~]# echo "net.ipv4.ip_forward=1"> /etc/sysctl.conf #开启路由交换功能
[root@server1 ~]# sysctl -p #检查是否开启
net.ipv4.ip_forward = 1 #这时候内外网可以互ping,因为路由功能以开启
[root@server1 ~]# modprobe ip_vs #加载lvs
[root@server1 ~]# 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 InActCo #lvs未设置
[root@server1 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm #安装管理软件ipvsadm,不需要启动
[root@server1 ~]# vi nat.sh #编写调度脚本
#!/bin/bash
ipvsadm -C #清除虚拟服务器表中所有记录
ipvsadm -A -t 192.168.200.11:80 -s rr #创建虚拟服务器
ipvsadm -a -t 192.168.200.11:80 -r 192.168.100.12:80 -m #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -a -t 192.168.200.11:80 -r 192.168.100.13:80 -m #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -Ln #以数字形式查看节点状态
###参数注释
“-A” | 表示添加虚拟服务器 |
---|---|
“-a” | 表示添加真实服务器 |
“-t” | 用来指定VIP地址及TCP端口 |
“-r” | 用来指定RIP地址及TCP端口 |
“-s” | 用来指定负载调度算法一一rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接) |
“-m” | 表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式) |
[root@server1 ~]# sh nat.sh #执行前在自己网页访问下web ip,自己能访问别人才能通过自己访问
[root@server1 ~]# sh nat.sh #执行脚本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.11:80 rr
-> 192.168.100.12:80 Masq 1 0 0
-> 192.168.100.13:80 Masq 1 0 0
4、客户机访问
[root@server5 ~]# curl http://192.168.200.11 #不出效果
curl: (7) Failed connect to 192.168.200.11:80; 没有到主机的路由 #关闭自己和LVS调度服务器防火墙
[root@server5 ~]# systemctl stop firewalld #LVS调度服务器防火墙也要关
[root@server5 ~]# setenforce 0
[root@server5 ~]# curl http://192.168.200.11
<h1> this is web2. </h1>
[root@server5 ~]# curl http://192.168.200.11
<h1> this is web1. </h1>
5、lvs查看调度情况
[root@server1 ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:53 TIME_WAIT 192.168.200.15:46440 192.168.200.11:80 192.168.100.12:80
TCP 01:52 TIME_WAIT 192.168.200.15:46438 192.168.200.11:80 192.168.100.13:80
TCP 01:53 TIME_WAIT 192.168.200.15:46442 192.168.200.11:80 192.168.100.13:80
TCP 01:54 TIME_WAIT 192.168.200.15:46446 192.168.200.11:80 192.168.100.13:80
TCP 01:54 TIME_WAIT 192.168.200.15:46444 192.168.200.11:80 192.168.100.12:80
TCP 01:55 TIME_WAIT 192.168.200.15:46448 192.168.200.11:80 192.168.100.12:80
[root@server1 ~]# 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.200.11:80 rr
-> 192.168.100.12:80 Masq 1 0 3
-> 192.168.100.13:80 Masq 1 0 3