- 背景:
目前我们代码编译后,会先存在在一个中间文件服务器(源码服务器),然后通过文件服务器向外进行代码分发和同步,目前文件服务器是单台服务器,并且未备份,一旦文件服务器出现宕机或者异常情况时,将严重影响流水线的正常使用。
2.目标:
实现文件服务器的高可用,当文件服务器其中一台机器出现异常时,不影响流水线的发布和使用,当机器恢复后,文件服务器之间自动实现同步,保持其代码的一致性。
3.方案:
使用方案:rsync + inotify + heartbeat + supervisor
说明: 1、 inotify 监控目录文件代码是否发生变化 ,记录发生变化的文件、文件夹。
2、 rsync 实现两台机器之间代码的同步。
3、 heartbeats 检测两台机器的网络、服务,是否宕机。出现问题实现主备切换,虚拟IP的漂移。
4、 supervisor 守护:守护rsync服务和同步脚本。
Demo:
1、两台机器上都需要安装:rsync + inotify + heartbeat + supervisor
2. 同步脚本:(主备机器目标IP不同.)
#!/bin/bash
host=172.26.8.156 ## 目标服务器的IP
mould=f6NUSuSMFqemVDir ### rsync 模块
src=/data/www/java/maoyuefei ###监控的目录
des=/data/www/java/ ### 同步目标路劲
user=root ### 同步账户
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files #### 监控目录变化
do
rsync -vzrtopg --delete --progress $src $host::$mould$des ### 文件同步
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
3. heartbeats 配置:
主要涉及三个位置文件:ha.cf(主配置文件) haresources(监控服务,虚拟IP等) authkeys(认证)
ha.cf配置文件:(主备IP地址不同,分别为对方的ip地址)
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 172.26.8.157 ### ip地址
auto_failback on
node devops-test-3.none ### 主节点
node devops-test-2.none ###备
ping 172.26.11.254 ### 一般设置路由
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail ### 服务检测,如果服务挂了,由备节点接管服务
haresources 配置:(主备保持一致)
devops-test-3.none IPaddr::172.26.8.135/24/eth0 snmpd rsync snmptrapd