先说结论
Selinux的问题。。。。
发现过程:
首先查看这个ipvsadm这个服务start或者stop会运行的命令
[root@lvs ~]# cat /usr/lib/systemd/system/ipvsadm.service
---省略部分----
[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes
---省略部分----
通过这个服务文件我们可以发现,start这个服务时,会把/etc/sysconfig/ipvsadm配置文件中的规则应用回来,stop这个服务时,会把当前规则导出到/etc/sysconfig/ipvsadm这个文件,然后清空规则。
上图是stop服务时,对文件监控的日志
测试时发现,stop服务时,这个规则并不能保存下来,规则配置文件是会被清空的。
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.200.200:80 -s rr
-a -t 172.25.200.200:80 -r 192.168.10.70:80 -m -w 1
-a -t 172.25.200.200:80 -r 192.168.10.100:80 -m -w 1
[root@lvs ~]# systemctl stop ipvsadm.service
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
[root@lvs ~]#
然后我们手动配置这个规则文件,start服务,这个规则又会自动应用上,说明/usr/lib/systemd/system/ipvsadm.service这个服务文件的Start效果是正常的,辨证如下:
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.200.200:80 -s rr
-a -t 172.25.200.200:80 -r 192.168.10.70:80 -m -w 1
-a -t 172.25.200.200:80 -r 192.168.10.100:80 -m -w 1
[root@lvs ~]# systemctl start ipvsadm.service
[root@lvs ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs:http rr
-> 192.168.10.70:http Masq 1 0 0
-> 192.168.10.100:http Masq 1 0 0
由此我怀疑是不是这个服务对于/etc/sysconfig/ipvsadm这个文件只有读取(start)没有写入(stop)的权限,然后我对文件的权限进行了修改
[root@lvs ~]# ll /etc/sysconfig/ipvsadm
-rwxrwxrwx. 1 root root 0 3月 14 19:43 /etc/sysconfig/ipvsadm
然后进行stop和start,发现这个文件依旧会被清空
然后突然想到还有selinux这一个东西,把selinux关闭测试一下
[root@lvs ~]# getenforce
Enforcing
[root@lvs ~]# setenforce 0
[root@lvs ~]# getenforce
Permissive
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.200.200:80 -s rr
-a -t 172.25.200.200:80 -r 192.168.10.70:80 -m -w 1
-a -t 172.25.200.200:80 -r 192.168.10.100:80 -m -w 1
[root@lvs ~]# systemctl start ipvsadm.service
[root@lvs ~]# ipvsadm -Ln #检查配置文件被应用
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.200.200:80 rr
-> 192.168.10.70:80 Masq 1 0 0
-> 192.168.10.100:80 Masq 1 0 0
[root@lvs ~]# systemctl stop ipvsadm.service
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.200.200:80 -s rr
-a -t 172.25.200.200:80 -r 192.168.10.70:80 -m -w 1
-a -t 172.25.200.200:80 -r 192.168.10.100:80 -m -w 1
Perfect!解决成功,就是简单的SELINUX影响了服务的文件写入。