1、使用rsync+inotify实现/www目录实时同步
配置服务器端
安装inotify工具
[root@centos7 ~]# yum install -y rsync inotify-tools
配置/etc/rsyncd.conf文件
[root@centos7 ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no
hosts allow = 10.0.0.0/24
[www]
path = /www
comment = www
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
创建rsync账号密码文件
[root@centos7 ~]# echo "rsyncuser:centos" > /etc/rsync.pass
[root@centos7 ~]# chmod 660 /etc/rsync.pass
创建同步目录并启动服务
[root@centos7 ~]# mkdir /www
[root@centos7 ~]# systemctl start rsyncd
配置客户端
[root@client ~]# yum install -y rsync inotify-tools
创建inotify连接密码文件
[root@client ~]# echo "centos" > /etc/rsync.pass
[root@client ~]# chmod 600 /etc/rsync.pass
用命令连接测试是否同步
[root@client test]# rsync -avz --password-file=/etc/rsync.pass rsyncuser@10.0.0.27::www /test
receiving incremental file list
f1.txt
sent 43 bytes received 447 bytes 980.00 bytes/sec
total size is 595 speedup is 1.21
[root@client test]# ll
total 4
-rw-r--r-- 1 root root 595 Oct 16 11:22 f1.txt
-rw-r--r-- 1 root root 0 Oct 16 11:24 f2.txt
客户端创建inotify_rsync.sh脚本
[root@client ~]# cat inotify_rsync.sh
SRC='/test/' DEST='rsyncuser@10.211.11.10::www'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
执行脚本
[root@client ~]# nohup bash inotify_rsync.sh &
2、使用iptable实现: 放行telnet, ftp, web服务,放行samba服务,其他端口服务全部拒绝
iptables -I INPUT -p tcp -m multiport --dports 21,23,80,139,445 -j ACCEPT
iptables -A INPUT -j REJECT
[root@centos7 ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 159 12385 ACCEPT tcp -- * * 10.0.0.1 0.0.0.0/0 tcp dpt:22
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21,23,80,139,445
3 106 11088 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
3、NAT原理总结
NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
NAT作用:修改请求报文/响应报文的源/目标IP
NAT类型:
- SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装。方法,修改请求报文源IP,将源IP修改成能上外网的IP,实现本地主机访问外部网络。例如路由器
- DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP。方法,修改请求报文:修改目标IP,将目标IP修改成内网服务器IP。
- PNAT: port nat,端口和IP都进行修改
4、iptables实现SNAT和DNAT,并对规则持久保存。
实现SNAT和DNAT都需要开启内核数据转发功能
[root@firewall ~]#cat /etc/sysctl.conf
net.ipv4.ip_forward=1
SNAT使用方法
SNAT:基于nat表的target,适用于固定的公网IP
SNAT选项:
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
SNAT格式:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
范例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.126.83
DNAT使用方法
DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
范例:
iptables -t nat -A PREROUTING -d 192.168.126.83 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.84:80
iptables规则持久保存:
CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
5、LVS调度算法总结
静态算法:经根据算法本身进行调度,不关注真是服务器负载状态
- RR:roundrobin(轮询):将请求依次分配到每个真是服务器。
- WRR:Weighted RR(带权重轮询):根据每个真实服务器到权重占总权重到比例来分配请求。
- SH:Source Hashing(源地址哈希调度),实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。
- DH:Destination Hashing;(目标地址哈希调度),第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态算法:主要根据每真实服务器当前的负载状态及调度算法进行调度,负载值(Overhead)较小的真是服务器将被调度。
- LC:least connections (最小链接调度)适用于长连接应用,始终往链接数最少的真实服务器上调度
Overhead=activeconns256+inactiveconns
负载=活动链接数256+非活动链接 - WLC:Weighted LC(带权重最小链接调度)默认调度方法,
Overhead=(activeconns256+inactiveconns)/weight
负载=(活动链接数256+非活动链接)/权重 - SED(初始链接权重优先)
Overhead=(activeconns+1)256/weight
负载=(活动链接+1)256/权重 - NQ:Never Queue,第一轮均匀分配,后续SED
- LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
内核版本 4.15 版本后新增调度算法:
- FO(加权故障转移)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志位)的且权重最高的真实服务器,进行调度。FO因为有标记位,可以逐步升级服务器
- OVF(连接溢出)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器