第十六周作业

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  [email protected]::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='[email protected]::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算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器

你可能感兴趣的:(第十六周作业)