linux运维学习第10周
目录
1、防火墙原理总结以及防火墙规则示例
1.1防火墙原理
1.1.1数据包过滤的基本逻辑
1.1.2内核层的流量控制机制
1.1.3防火的规则处理流程与动作
1.2防火墙规则示例
2、总结LVS的的NAT和DR模型工作原理,并完成DR工作模型实践
2.1NAT模型工作原理
2.2DR模型工作原理
2.3DR模型实践
2.3.1主机资源分析
2.3.2定制LVS-route主机
2.3.3定制lvs-server主机
2.3.4定制lvs-rs1主机
2.3.5定制lvs-rs2主机
2.3.6lvs-client主机定制默认的网关出口为lvs主机
2.3.7lvs-route主机环境配置
2.3.8lvs-server主机定制数据包转发
2.3.9RS1主机定制环境
2.3.10RS2主机定制环境
2.3.11lvs-server主机定制集群
2.3.12测试效果
3、总结LVS调度算法
3.1算法分类
3.2静态方法
3.3动态方法
4、完成keepalived高可用集群实践
4.1配置解析
4.2简单实践
4.2.1配置解析
4.2.2nginx环境配置
4.2.3网卡环境配置
4.2.4keepalived配置
4.2.5测试效果
1、防火墙原理总结以及防火墙规则示例
1.1防火墙原理
1.1.1数据包过滤的基本逻辑
防火墙本质是网络流量的门卫,通过预设规则对进出系统的数据包进行检查,决定其是否通过,检测原理基于五元组匹配,状态检测,上下文感知
1.1.2内核层的流量控制机制
Ntfilter框架是linux中用于网络数据包过滤、NAT和数据包修改的底层框架,包括五个重要的钩子函数。
iptables是针对IPV4网络的规则管理工具,通过操作Netfilter的钩子函数定义规则
nftables是iptables的替代品,更统一,更高效
1.1.3防火的规则处理流程与动作
规则按添加顺序依次匹配,一旦匹配成功则执行对应动作,不在检查后续规则
常见处理动作有accept,drop,reject,log.SNAR/DNAT
1.2防火墙规则示例
清空所有规则
iptables -F
丢弃来自10.0.0.12这个IP地址的所有入站流量
iptables -t filter -A INPUT -s 10.0.0.12 -j DROP
查看iptables规则
iptables -vnL
保存规则
iptables-save > iptables.rules
还原规则
iptables-restore < iptables.rules
2、总结LVS的的NAT和DR模型工作原理,并完成DR工作模型实践
2.1NAT模型工作原理
当客户端CIP访问LVS的VIP时,LVS将请求源IP地址改为DIP,目的IP地址转换为RIP,当后端服务器处理完请求并返回时,LVS将请求的源IP地址改为VIP,目的IP地址转换为CIP
2.2DR模型工作原理
客户端访问VIP,LVS调度器将数据包的目标MAC改为RIP的MAC,源MAC改为LVS自身网卡的MAC,通过二层MAC替换实现转发,让数据包看起来是从LVS直接到RS
RS收请求后处理并直接返回给CIP,绕开LVS
2.3DR模型实践
2.3.1主机资源分析
2.3.2定制LVS-route主机
vim /etc/netplan/50-cloud-init.yaml
修改配置为
network:version: 2ethernets:ens33:addresses:- 10.0.0.16/24nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2ens37:addresses:- 192.168.8.16/24
生效配置
netplan apply
2.3.3定制lvs-server主机
ip add add 192.168.8.100/32 dev ens33:1
2.3.4定制lvs-rs1主机
ip a add 192.168.8.100/32 dev lo
2.3.5定制lvs-rs2主机
ip a add 192.168.8.100/32 dev lo
此时使用arping命令可以看到有三台主机存在192.168.8.100的IP地址
2.3.6lvs-client主机定制默认的网关出口为lvs主机
ip route del default
ip route add default via 10.0.0.16
ip route list
2.3.7lvs-route主机环境配置
root@ubuntu24-16:~# cat /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
root@ubuntu24-16:~# sysctl -p /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
2.3.8lvs-server主机定制数据包转发
定制内核参数
root@ubuntu24-13:~# cat /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
root@ubuntu24-13:~# sysctl -p /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
定制路由策略
ip route add default via 192.168.8.16
2.3.9RS1主机定制环境
ip route del default
ip route add default via 192.168.8.16
定制arp策略
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2.3.10RS2主机定制环境
ip route del default
ip route add default via 192.168.8.16
定制arp策略
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2.3.11lvs-server主机定制集群
清除所有规则
ipvsadm -c
增加主机列表
ipvsadm -A -t 192.168.8.100:80
ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.14
ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.15
2.3.12测试效果
[root@rocky9-12 ~]# curl 192.168.8.100
<h1>hello RS2</h1>
[root@rocky9-12 ~]# curl 192.168.8.100
<h1>hello RS1</h1>
3、总结LVS调度算法
3.1算法分类
静态方法:仅仅从调度策略本身实现的功能角度进行工作
RR、WRR、DH、SH
动态方法:在满足调度策略本身实现功的前提下,还要考虑后端主机的动态负载效果
LC、WLC、LBLC、LBLCR、SED、NQ
3.2静态方法
RR:Round Robin,轮询算法,
LVS 服务器将前端请求轮流转发到后端每一台 RS 服务器上,后端每台 RS 服务器处理的请求量都是相同的
WRR:Weight RR,加权轮询算法,
LVS 服务器将前端请求根据后端 RS 服务器的权重进行转发,对于后端 RS 服务器中性能好的机器可以设置较高的权
重,物尽其用
SH:Source Hash,源 IP 地址 hash,
将来自于同一个 IP 地址的客户端请求调度到后端同一台 RS 服务器上,从而实现会话保持
DH:Destinatio Hash,目标 IP 地址 hash,
客户端的请求第一次被调度到某到 RS 服务器后,其后续的请求都将会被发往同一台 RS 服务器,一般用于正向代理缓
存场景
3.3动态方法
LC:Least Connections,最少连接算法,
将前端请求调度到己建立的连接数最少的后端 RS 服务器上,如果集群后端服务器具有相同的配置和相近的系统性能,采用此调度算法可以较好的均衡负载。
Overhead = 活动连接数 * 256 + 非活动连接数负载值越小,则被调度的优先级越高,256个非活动连接相当于1个活动连接
WLC:Weighted Least Connections,加权最少连接算法,此算法是 LVS 的默认调度算法
在 LC 算法中,只考虑了 RS 服务器的连接数,而没有考虑 RS 服务器会有不同的配置和性能,此算法优化了负载均衡性能,具有较高权重值的 RS 服务器将承受较大比例的活动连接负载。
Overhead =(活动连接数 * 256 + 非活动连接数)/ Weight
权重值越大,则计算出的负载值越小,相应的,被调度的优先级越高 256个非活动连接相当于1个活动连接)。
SED:Shortest Expected Delay,最短延迟调度算法,此算法是 WLC 算法的改进版
为了避免WLC在初始环境下,多台主机没有任何活动请求,这个时候权重值就失效了,所以出了SED,也就是说,将所有主机的活动连接数,默认都是存在至少1个活动连接。
Overhead =(活动连接数 + 1)* 256 / Weight
权重值越大,则计算出的负载值越小,相应的,被调度的优先级越高
不考虑非活动连接的原因是为了防止 WLC 算法中 非活动连接数 过大影响调度的准确性,+1 是为了保证被除数大于0,防止出现计算结果为0的情况,计算结果为0则意味着每台 RS 被调度的概率是一致的,权重值设置无效。
NQ:Never Queue,最少队列调度算法/永不排队调度算法,初始的时候先做一次轮循,保证每台 RS 都至少被调度一次,后续使用 SED 调度算法。
4、完成keepalived高可用集群实践
4.1配置解析
keepalived默认配置文件主要有三部分组成,global_defs、vrrp_instance、virtual_server,其中最重要的配置内容是vrrp_instance,在这个配置段中,设置了我们keepalived对外提供的统一入口
global_defs - 全局配置段在这部分的配置段中,我们暂时只需要关心router_id即可router_id 设定当前keepalived提供的路由标识,它在keepalived集群中必须唯一
vrrp_instance - vrrp配置段在这部分的配置段中,我们选优关心以下几处的配置信息:state 描述keepalived主机间的角色定位的,一般只有两个值MASTER、BACKUPinterface 指定在哪个网卡上绑定VIPvirtual_router_id 指定VIP的唯一标识,在keepalived集群中,此配置必须一致。priority 被VRRP协议来判断那个router_id作为主路由,值越大,优先级越高authentication 多个路由之间通信的认证virtual_ipaddress 指定VIP的地址,可以是多个。virtual_server - vs配置段在这部分的配置段中,我们主要关系一下几处的配置信息:lb_algo 定制算法信息protocol 数据通信协议的定制real_server 后端真实主机的定制
4.2简单实践
4.2.1配置解析
两台主机10.0.0.13和10.0.0.23作为高可用方案主机,其中10.0.0.13作为主机,10.0.0.23作为从机,当主机出故障时,从机自动接替主机的工作
4.2.2nginx环境配置
10.0.0.13主机nginx环境配置
apt install nginx rsyslog -y
echo 'keepalived master' > /var/www/html/index.nginx-debian.html
测试效果
root@ubantu24-13:~# curl localhost
keepalived master
10.0.0.23从机nginx环境配置
apt install nginx rsyslog -y
echo 'keepalived slave' > /var/www/html/index.nginx-debian.html
测试效果
root@ubantu24-23:~# curl localhost
keepalived slave
4.2.3网卡环境配置
主机定制网卡
network:version: 2renderer: NetworkManagerethernets:ens33:addresses:- "10.0.0.13/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2ens37:addresses:- "192.168.8.13/24"
生效网卡
netplan apply
从机定制网卡
network:version: 2renderer: NetworkManagerethernets:ens33:addresses:- "10.0.0.23/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2ens37:addresses:- "192.168.8.23/24"
4.2.4keepalived配置
主机安装并启动keepalived
apt install keepalived -y
cp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
sed -i '/virtual_server/,$d' /etc/keepalived/keepalived.conf
sed -i 's/eth0/ens33/g' /etc/keepalived/keepalived.conf
systemctl start keepalived
主机配置文件
global_defs {router_id kpmaster
}vrrp_instance VI_1 {state MASTERinterface ens37virtual_router_id 50priority 100authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.8.100}
}
重启服务
systemctl restart keepalived.service
从机也是先安装并启动,从机的配置文件为
global_defs {router_id kpslave
}vrrp_instance VI_1 {state BACKUPinterface ens37virtual_router_id 50priority 99authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.8.100}
}
由于主机占用VIP,所以此时从机并没有显示VIP
4.2.5测试效果
nginx访问测试
root@ubantu24-13:~# for i in {1..10};do curl 192.168.8.100;done
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
keepalived master
断开13主机的keepalived服务,使用23主机进行抓包
root@ubantu24-23:/etc/netplan# tcpdump -i ens37 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on ens37, link-type EN10MB (Ethernet), snapshot length 262144 bytes
23:40:57.761786 IP 192.168.8.23 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 99, authtype simple, intvl 1s, length 20
23:40:58.762719 IP 192.168.8.23 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 99, authtype simple, intvl 1s, length 20
23:40:59.763249 IP 192.168.8.23 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 99, authtype simple, intvl 1s, length 20
23:41:00.764078 IP 192.168.8.23 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 99, authtype simple, intvl 1s, length 20
23:41:01.765074 IP 192.168.8.23 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 99, authtype simple, intvl 1s, length 20
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
查看IP
root@ubantu24-23:~# hostname -I
10.0.0.23 192.168.8.23 192.168.8.100
此时从机已经获得VIP
重新开启主机keepalived服务
通过ip a命令可以查看到VIP已经回到13主机,成功实现了高可用的简单实践