集群的概述和分类和负载均衡集群
集群的概述
分布式:由多台机器共同完成同一项任务的服务器构架方式
集群的分类
- 负载均衡:多台机器完成同一类任务;对外表现为一个整体
- 高可用性
- 高性能计算
性能扩展方式
- 垂直扩展:增加服务器硬件性能
- 水平扩展:增加服务器数量负载
负载均衡性集群
- 硬件:硬件负载均衡服务器(OSI模型的2,4,7层)
- 软件:LVS(Linux Virtual Server):通过匹配ip地址和端口来决定数据包的处理方案
OSI中层级划分
- 应用层负载(七层):nginx(默认支持七层,可通过特殊模块支持4层),通过拦截请求实现负载均衡,共有两次TCP连接
- 传输层负载(四层):LVS(默认支持4层),通过转发请求实现负载均衡,共一次TCP连接
- 链路层负载(二层):智能交换机,服务器——包含动态聚合(LACP协议)
实例:多级负载:高并发场景
一级:LVS
二级:Nginx Nginx
真实服务器:httpd httpd httpd httpd
集群规则的增删改查
创建
语法:ipvsadm -A -t ip:port -s rr或ipvsadm -a -t ip:port -r ip1:port1 -m
选项:
- -A:添加一个集群规则
- -t:过滤数据包的条件,匹配数据包的传输协议是否是tcp
- ip:port:过滤数据包的条件,匹配数据包的包头信息,即目标ip和目标port
- -s rr:指定符合条件数据包的调度算法
- -a:向已存在的集群规则中添加真实服务器列表
- -r:指定真实服务器的ip和port
- -m:LVS软件的工作模式(-m:NAT模式)
查看
语法:ipvsadm -ln
选项:
- -l:列出
- -n:数字化显示代码
删除
语法:ipvsadm -D -t ip:port或ipvsadm -d -t ip:port -r ip1:port1
选项:
- -D:删除整个集群
- -d:删除集群内的指定真实服务器
修改
语法:ipvsadm -E -t ip:port -s wrr -p 300或ipvsadm -e -t ip:port -r ip1:port1 -m -w n(数字)
选项:
- -E:修改集群信息,列出算法类型
- -p:持久化连接
- -e:修改集群中真实服务器的信息,如权重比例
规则保存和还原
- ipvsadm-save -n > filename:另存为,切记要使用-n选项进行保存
- ipvsadm-restore < filename:还原
开启自启动集群规则
vim /etc/rc.d/rc.localipvsadm-restore < filename#记得添加执行权限
chmod +x /etc/rc.d/rc.local
防火墙服务
注:不管是ipvsadm还是iptables都是包过滤机制
- 开启时自动加载规则配置文件,加载到内存中使其生效(让内核中的防火墙函数能够识别到)
- 手动写的规则也是写入内存空间,服务即便不启动也会被内核中的防火墙函数识别到
1.丢弃数据包
#禁止icpm协议访问
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP-A:追加规则
INPUT:入站时执行
-p:指定协议
-j:匹配规则后执行的动作
2.拒绝数据包
#清空防火墙规则
[root@localhost ~]# iptables -F
#拒绝icmp数据包
[root@localhost ~]# iptables -A INPUT -p icmp -j REJECT
3.放行数据包
#放行icmp数据包
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT
扩展——名词解释
- Session(会话):是服务器端用于跟踪用户状态的机制,确保用户在多次请求中保持连续性,即持久化连接
- Cookie :是服务器发送到客户端,客户端在后续请求中自动携带 Cookie,帮助服务器识别用户身份,不必再次登录验证
实验:Nginx和LVS负载效果对比实验
拓扑结构
一台测试机(3.130),一台调度器(+路由器)(3.140,4.140),两台真实服务器(httpd)(4.150,4.160),共享存储服务器(4.170)
1.准备工作
类型 | ip | 服务 | 虚拟ip |
测试机 | 192.168.3.130 | curl,浏览器 | 无 |
调度器+路由器 | 192.168.3.140 192.168.4.140 | LVS(IPVS),Nginx | 192.168.3.140 |
真实服务器1 | 192.168.4.150 | httpd | 无 |
真实服务器2 | 192.168.4.160 | httpd | 无 |
共享存储服务器 | 192.168.4.170 | NFS | 无 |
2.构建共享存储
4.170
# 创建共享目录
$ mkdir /data/www -p
# 安装RPCbind和NFS服务
$ dnf -y install rpcbind nfs-utils
# 编写共享配置文件,设置共享目录,共享对象,共享权限,映射关系,同步方式
$ vim /etc/exports
/data/www 192.168.4.0/24(rw,all_squash,sync)
$ chown nobody:nobody /data/www
# 启动服务
$ systemctl enable --now rpcbind
$ systemctl enable --now nfs-server
3.构建web服务
4.150,4.160
# 分别在两台web服务器上进行httpd软件的安装和共享存储的挂载
$ dnf -y install httpd
$ mount 192.168.4.170:/data/www /var/www/html
# 为两个web服务器创建各自专属的首页文件
$ echo "web server 130..." >> /var/www/html/index130.html
$ echo "web server 140..." >> /var/www/html/index140.html
# 分别修改两个web服务器配置文件的DirectoryIndex选项绑定各自的首页文件
130主机绑定index130.html
140主机绑定index140.html
# 启动服务
$ systemctl enable --now httpd
4.构建代理服务器
3.140——记得开启路由转发功能
[root@localhost ~]# dnf -y install nginx
[root@localhost ~]# vi /etc/nginx/nginx.conf
upstream apache {server 192.168.4.150;server 192.168.4.160;}server {location / {proxy_pass http://apache;}[root@localhost ~]# systemctl enable --now nginx
5.测试nginx负载效果
在测试机(3.130)上访问nginx代理服务器
总结:nginx负载均衡是通过拦截测试机的http请求实现的,拦截后再通过本地ip地址访问apache服务器,共经过了两次tcp连接
6.构建LVS负载服务器
3.140
# LVS 分为内核空间的IPVS模块和用户空间的ipvsadm命令,IPVS模块是内核的一部分不需要安
装,只需要验证是否启用即可;ipvsadm命令则需安装才能使用
# 验证IPVS模块是否启用
$ grep -i "ip_vs" /boot/config-5.14.0-427.13.1.el9_4.x86_64
# 安装ipvsadm命令
$ dnf -y install ipvsadm[root@localhost ~]# ipvsadm -A -t 192.168.3.140:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.3.140:80 -r 192.168.4.150:80 -m
[root@localhost ~]# ipvsadm -a -t 192.168.3.140:80 -r 192.168.4.160:80 -m
[root@localhost ~]# 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.3.140:80 rr-> 192.168.4.150:80 Masq 1 0 0 -> 192.168.4.160:80 Masq 1 0 0
[root@localhost ~]#
3.130测试
总结:LVS传输层负载均衡服务器通过转发http请求实现负载均衡,共经过一次tcp连接