使用ssh免密登录实现自动化部署rsync+nfs+lsync(脚本)

单机一键部署ssh+rsync+nfs+lsync

执行准备

主机信息

主机角色 外网IP 内网IP 主机名
nfs、lsync 10.0.0.31 176.16.1.31 nfs
客户端 10.0.0.7 176.16.1.7 web01
rsync、nfs 10.0.0.41 172.16.1.41 backup

秘钥信息

sh 复制代码
#web01可以免密连接nfs和backup
[root@web01 ~]# ssh-keygen
[root@web01 ~]# ssh-copy-id 172.16.1.31
[root@web01 ~]# ssh-copy-id 172.16.1.41
#远程免密登录测试
#一定要测

脚本文件rnl.sh

创建文件

sh 复制代码
#创建脚本文件并编辑
[root@web01 ~]# vim rnl.sh

编写文件

sh 复制代码
#使用web01为backup服务器远程部署rsync服务
ssh 172.16.1.41 '
yum install -y rsync &> /dev/null
cat > /etc/rsyncd.conf <<EOF
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log

[code]
path = /code
[img]
path = /img
EOF

groupadd -g 666 rsync
useradd -g 666 -u 666  -M -s /sbin/nologin rsync
echo rsync_backup:123 > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd 
mkdir /code /img
chown rsync.rsync /code /img
systemctl start rsyncd &> /dev/null
systemctl enable  rsyncd &> /dev/null
exit
' &> /dev/null
echo '已成功为backup(172.16.1.41)部署rsync服务,共两个模块:[code]和[img]'
echo '--------------------------------------------------------------'

ssh 172.16.1.31 '
#使用web01为nfs服务器部署nfs服务
yum install -y nfs-utils &> /dev/null
cat > /etc/exports<<EOF
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
EOF

groupadd -g 666 rsync
useradd -g 666 -u 666  -M -s /sbin/nologin rsync
mkdir /data
chown rsync.rsync /data/
systemctl start nfs &> /dev/null
systemctl enable nfs &> /dev/null
exit
'  &> /dev/null
echo '已成功为NFS(172.16.1.31)部署nfs服务,共享目录为/data'
echo '--------------------------------------------------------------'

ssh 172.16.1.31 '
#使用web01为nfs服务器部署lsync服务
yum install -y lsyncd &> /dev/null
cat > /etc/lsyncd.conf<<EOF
settings {
	logfile = "/var/log/lsyncd/lsyncd.log",
	statusFile = "/var/log/lsyncd/lsyncd.status",
	maxProcesses = 2,
	nodaemon = false,
}
sync {
	default.rsync,
	source = "/data",
	target = "rsync_backup@172.16.1.41::img",
	delete = true,
	delay = 1,
	rsync = {
		binary = "/usr/bin/rsync",
		password_file = "/etc/rsyncd.pwd",
		archive = true,
		compress = true,
	}
}
EOF

echo 123 > /etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd
systemctl start lsyncd &> /dev/null
systemctl enable lsyncd &> /dev/null
exit
'  &> /dev/null
echo '已成功为NFS(172.16.1.31)部署lsync服务,监控目录为本机的/data'
echo '若/data发生变化将会发送给172.16.1.41的/img目录'
echo '--------------------------------------------------------------'

#web01本机挂载共享目录/data
mkdir /imag
mount -t nfs 172.16.1.31:/data /imag
echo '已成功挂载172.16.1.31:/data目录于本机的/imag目录'
echo '--------------------------------------------------------------'
echo '****rsync+nfs+lsync 服务部署完成,进行测试吧!****'

执行文件

sh 复制代码
[root@web01 ~]# sh 1.sh 
已成功为172.16.1.41部署rsync服务,共两个模块:code和img
已成功为172.16.1.31部署nfs服务,共享目录为/data
已成功为172.16.1.31部署lsync服务,监控目录为/data,发生变化将会发送给172.16.1.41的/img目录
已成功挂载172.16.1.31:/data目录于本机的/imag目录
rsync+nfs+lsync 服务部署完成,进行测试吧!

测试服务

sh 复制代码
#在web01中的imag目录中创建文件
[root@web01 ~]# touch /imag/shell.txt
[root@web01 ~]# ll /imag/shell.txt 
-rw-r--r-- 1 666 666 0 Dec  5 20:30 /imag/shell.txt
#查看nfs中/data下文件是否存在
[root@nfs ~]# ll /data/
-rw-r--r-- 1 rsync rsync 0 Dec  5 20:30 shell.txt
#查看backup中模块img的/img目录下文件是否存在
[root@backup ~]# ll /img/
-rw-r--r-- 1 rsync rsync 0 Dec  5 20:30 shell.txt

解决单点故障脚本nfs.sh

使用web01为backup服务器部署nfs服务并监控故障

脚本文件

sh 复制代码
vim nfs.sh

编写脚本

sh 复制代码
ssh 172.16.1.41 '
yum install -y nfs-utils &> /dev/null
cat > /etc/exports << EOF
/img 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
EOF

systemctl start nfs
systemctl enable  nfs
exit
'

#编写监控脚本
cat >> /neterror.sh << EOF 
#!/bin/bash
ping -c1 -W1 172.16.1.31 &>/dev/null #或者使用
#showmount -e 172.16.1.31 &>/dev/null
if [ $? -ne 0 ];then
umount -lf /imag &>/dev/null &
sleep 2
umount -lf /imag &>/dev/null
mount -t nfs 172.16.1.41:/img /imag
fi
EOF

#编写监控脚本的定时任务
cat >> /etc/crontab <<EOF
01 * * * *  root 	sh /neterror.sh
EOF
相关推荐
用户1204872216117 小时前
Linux驱动编译与加载
linux·嵌入式
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房1 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux
扛枪的书生3 天前
Linux 网络管理器用法速查
linux
顺风尿一寸3 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode3 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫3 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao5 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80