集成keepalived sersync 多机免密互信autossh 一键安装脚本:https://download.csdn.net/download/a1058926697/85371873
1. 软件介绍
1.1 NFS介绍
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
-
2 Keepalived介绍
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管。
-
3 Rsync介绍
rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件。它使用所谓的“rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。
运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据;也可以多个rsync server备份一个client的数据。rsync可以搭配ssh甚至使用daemon模式。rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
-
4 Inotify介绍
inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
2. 环境介绍
2.1 主机介绍
主机 | IP | 功能 |
vm-shaldr02 | 10.72.243.141(主) | NFS+Keepalived+rsync+Inotify |
vm-shaldr03 | 10.72.243.142(备) | NFS+Keepalived+rsync |
nfsserver-test | 10.72.243.143(VIP) | 提供客户端挂载 |
2.2 实验拓扑
3. 软件安装配置
3.1 配置keepalived
登录两个节点上安装keepalved
#yum –y install keepalived
#systemctl enable keepalived
登录主节点vm-shaldr02,配置keepalived服务
#vi /etc/keepalived/keepalived.conf 添加以下内容
! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com
}
notification_email_from admin@example.com 设置邮件报警
smtp_server IP 设置邮件服务器的IP
smtp_connect_timeout30
router_id NFS_M
}
vrrp_instance NFS_10.72.243.143 {
state Master 主节点
interface ens160 网卡的名称
virtual_router_id 8 同一局域网内ID不能相同
priority 100
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.72.243.143
}
}
登录vm-shaldr03备节点,配置keepalived服务
#vi /etc/keepalived/keepalived.conf 添加以下内容
! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com
}
notification_email_from admin@example.com 设置邮件报警
smtp_server IP 设置邮件服务器的IP
smtp_connect_timeout 30
router_id Nfs_M
}
vrrp_instance Nfs_IP {
state Backup 主节点
interface ens160 网卡的名称
virtual_router_id 8 同一局域网内ID不能相同
priority 90 不同节点的优先级值不一样,防止脑裂,争抢资源
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.72.243.143
}
}
配置完成后,分别登录各节点启动服务
#systemctl enable keepalived
#systemctl start keepalived
此时虚拟IP已经可以ping通,内网设置此虚拟IP的DNS解析如下:
10.72.243.143>nfsserver-test
3.2 配置NFS
登录两台主机安装nfs服务
#yum -yinstall nfs-utils
#vi /etc/idmapd.conf 第5行改成公司的域名
Domain = example.com
#vi /etc/exports 添加挂载共享的目录,此目录需存在
/jenkins_dev_home *(rw,sync,no_root_squash)
/jenkins_home *(rw,sync,no_root_squash)
/riskappdata *(rw,sync,no_root_squash)
# systemctl startrpcbind nfs 启动服务
查看挂载信息
#showmount -e nfsserver-test
Export list for nfsserver-test:
/riskappdata *
/jenkins_home *
/jenkins_dev_home *
3.3 配置rsync及inotify
登录备节点vm-shaldr03配置
安装rsync,一般默认已经安装
#yum -y install rsync
#vi /etc/rsyncd.conf 添加以下内容
log file= /var/log/rsyncd.log #日志文件位置
pid file= /var/run/rsyncd.pid #rsync服务端数据目录路径
lock file= /var/run/rsync.lock
secretsfile = /etc/rsync.password #用户认证配置文件,里面保存用户名称和密码
motd file= /etc/rsyncd.motd
[jenkins_dev_log] #定义模板,自定义名称
path =/jenkins_dev_home/ #rsync服务端数据目录路径
comment =jenkins_dev_log #模块名称与[jenkins_dev_log]自定义名称相同
uid =root
gid = root
port=873
usechroot = false
read only= false
list =false
maxconnections = 200
timeout =600
authusers = backuser
hostsallow = 10.72.243.141
hostsdeny = *
[jenkins_log]
path =/jenkins_home/
comment =jenkins_log
uid =root
gid =root
port=873
usechroot = false
read only= false
list =false
maxconnections = 200
timeout =600
authusers = backuser
hostsallow = 10.72.243.141
hostsdeny = *
[risk_log]
path =/riskappdata/
comment =risk_log
uid =root
gid =root
port=873
usechroot = false
read only= false
list =false
maxconnections = 200
timeout =600
authusers = backuser
hostsallow = 10.72.243.141
hostsdeny = *
# vim /etc/rsync.password #编辑用户认证配置文件
backuser:centos
# chmod 600 /etc/rsync.password #一定要把用户认证配置文件的权限改成600
# systemctl enable rsyncd.service #设置rsync服务开机自启
# systemctl start rsyncd.service #启动服务
登录主节点vm-shaldr02配置
安装rsync,一般默认已经安装
#yum -y install rsync
# vim /etc/rsync.password #编辑用户认证配置文件
backuser:centos
# chmod 600 /etc/rsync.password #一定要把用户认证配置文件的权限改成600
http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #下载inotify源码包
# tar -xzvf inotify-tools-3.14.tar.gz -C /usr/local/ #解压到/usr/logcal目录
# mkdir /usr/local/inotify #创建安装目录
# cd /usr/local/inotify-tools-3.14/
# ./configure--prefix=/usr/local/inotify #指定安装目录为/usr/local/inotify
# make &&make install #编译安装
# systemctl enable rsyncd.service #设置rsync服务开机自启
# systemctl start rsyncd.service #启动服务
4. 测试及配置脚本自动同步
-
登录主节点,执行同步命令
#rsync-vzrtopg --progress /jenkins_dev_home/ backuser@10.72.243.142::jenkins_dev_log--password-file=/etc/rsync.password
#rsync-vzrtopg --progress /jenkins_home/ backuser@10.72.243.142::jenkins_log--password-file=/etc/rsync.password
#rsync-vzrtopg --progress /riskappdata/ backuser@10.72.243.142::risk_log--password-file=/etc/rsync.password
登录备节点,查看目录已经同步完成。
-
设置自动同步脚本
[root@vm-shaldr02~]# vi inotify1.sh 添加以下脚本内容
#!/bin/bash
/usr/local/inotify/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib /jenkins_dev_home/ | while read files
do
/usr/bin/rsync-vzrtopg --delete /jenkins_dev_home/ backuser@10.72.243.142::jenkins_dev_log--password-file=/etc/rsync.password
echo"${files} was rsynced" >> /var/log/rsyncd.log 2>&1
done
[root@vm-shaldr02~]# vi inotify2.sh 添加以下脚本内容
#!/bin/bash
/usr/local/inotify/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib /jenkins_home/ | while read files
do
/usr/bin/rsync-vzrtopg --delete /jenkins_home/ backuser@10.72.243.142::jenkins_log--password-file=/etc/rsync.password
echo"${files} was rsynced" >> /var/log/rsyncd.log 2>&1
done
[root@vm-shaldr02~]# vi inotify3.sh 添加以下脚本内容
#!/bin/bash
/usr/local/inotify/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib /riskappdata/ | while read files
do
/usr/bin/rsync-vzrtopg --delete /riskappdata/ backuser@10.72.243.142::risk_log--password-file=/etc/rsync.password
echo"${files} was rsynced" >> /var/log/rsyncd.log 2>&1
done
[root@vm-shaldr02~]# chmod u+x *.sh 脚本赋予执行权限
[root@vm-shaldr02~]#nohup /root/inotify1.sh & #分别后台运行三个脚本
[root@vm-shaldr02~]#nohup /root/inotify2.sh &
[root@vm-shaldr02~]#nohup /root/inotify3.sh &
[root@vm-shaldr02~]# vim /etc/rc.local #添加以下内容,设置开机自启动
#rsync+inotify
/root/inotify1.sh
/root/inotify2.sh
/root/inotify3.sh
[root@vm-shaldr02~]#chmod +x /etc/rc.d/rc.local 赋予执行权限
-
验证自动同步
登录主节点创建目录和文件
[root@vm-shaldr02~]# cd /jenkins_dev_home/
[root@vm-shaldr02jenkins_dev_home]# mkdir test1
[root@vm-shaldr02jenkins_dev_home]# touch test2
[root@vm-shaldr02jenkins_dev_home]# ls -ld test*
drwxr-xr-x2 root root 6 May 9 15:48 test1
-rw-r--r--1 root root 0 May 9 15:48 test2
登录备节点查看自动生成的目录和文件
[root@vm-shaldr03~]# cd /jenkins_dev_home/
[root@vm-shaldr03jenkins_dev_home]# ls -ld test*
drwxr-xr-x2 root root 6 May 9 15:48 test1
-rw-r--r--1 root root 0 May 9 15:48 test2
结果显示,前后两边生成文件的时间戳一样,自动同步。
删除文件也会自动同步,测试过程如下:
[root@vm-shaldr02jenkins_dev_home]# rm test2
rm:remove regular empty file ‘test2’? y
[root@vm-shaldr02jenkins_dev_home]# rmdir test1
[root@vm-shaldr02jenkins_dev_home]# ls -ld test*
ls:cannot access test*: No such file or directory
查看备节点文件
[root@vm-shaldr03jenkins_dev_home]# ls -ld test*
ls:cannot access test*: No such file or directory