文章目录

  • 1. 实时同步工具
  • 2. lsyncd 实时同步服务
    • 2.1 环境准备
    • 2.2 rsync准备
      • 2.2.1 服务端检查
      • 2.2.2 客户端检查
      • 2.2.3 备份测试
    • 2.3 配置lsyncd
      • 2.3.1 安装软件
      • 2.3.2 编写配置文件
    • 2.4 测试
  • 3. 案例-网站存储架构
    • 3.1 rsync服务配置
      • 3.1.1 服务端配置
      • 3.1.2 客户端配置
    • 3.2 lsyncd服务配置
      • 3.2.1 服务端配置
    • 3.3 nfs服务配置
      • 3.3.1 服务端配置
      • 3.3.2 客户端配置
    • 3.4 测试
  • 4. Ubuntu模板机
    • 4.1 配置host解析
    • 4.2 远程连接优化
    • 4.3 关闭防火墙
    • 4.4 配置apt源
    • 4.5 安装常用工具
    • 4.6 同步时间
    • 4.7 配置vim自动添加脚本注释
    • 4.8 设置root密码
    • 4.9 编写修改主机名和ip的脚本
    • 4.10 配置命令行颜色
    • 4.11 编写回收站脚本,配置rm别名
    • 4.12 克隆模板机
  • 5. 案例2-网站存储架构-Ubuntu 22.04
    • 5.1 配置rsync服务
      • 5.1.1 客户端
      • 5.1.2 客户端
    • 5.2 配置lsyncd服务
      • 5.2.1 服务端
    • 5.3 配置nfs服务
      • 5.3.1 客户端
      • 5.3.2 客户端
    • 5.4 测试
  • 6. 踩坑记录
    • 1. clnt_create: RPC: Timed out
    • 2. ISO镜像故障
    • 3. Ubuntu报错:Job for lsyncd.service failed because a timeout was exceeded.
  • 7. 思维导图

1. 实时同步工具

同步工具说明
inotify不推荐使用。本质是监控指定目录,需要和rsync服务结合使用;需要书写脚本。
sersync对inotify+rsync二次开发,通过配置文件指定监控的目录,同步数据。
性能较好,但是很久没更新软件。
通过二进制部署,无法通过apt/yum安装
lsyncd类似于sersync,通过配置文件监控指定目录,目录发生变化会调用rsync实现数据同步。
通过apt/域名安装即可
drbd基于磁盘分区(数据块block)的数据同步工具;
主节点正常时,备用节点不运行。

2. lsyncd 实时同步服务

  • lsyncd:Live Syncing Daemon,实时同步服务
  • lsyncd需要监控存放数据的目录,并实时同步给备份服务器,所以lsyncd服务端应该配置在rsync的客户端
  • lsyncd与rsync都是同步服务,rsync是定时备份,可以把lsyncd看作是rsync的扩展程序

2.1 环境准备

服务器主机名
lsyncd服务端(rsync客户端)nfs01
lsyncd客户端(rsync服务端)backup

2.2 rsync准备

2.2.1 服务端检查

[root@backup ~]# systemctl is-active rsyncd.service 
active
[root@backup ~]# cat /etc/rsyncd.conf 
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super = yes 
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup
[blog]
comment = www by old0boy 14:18 2012-1-13
path = /nfs/backup/blog
[root@backup ~]# id rsync
用户id=1000(rsync) 组id=1000(rsync)=1000(rsync)
[root@backup ~]# cat /etc/rsync.password
rsync_backup:1
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 15  612 10:08 /etc/rsync.password
[root@backup ~]# ll /data -d
drwxr-xr-x 2 rsync rsync 6  617 10:39 /data

2.2.2 客户端检查

[root@nfs01 ~]# cat /etc/rsync-client.password 
1
[root@nfs01 ~]# ll /etc/rsync-client.password
-rw------- 1 root root 2  612 11:44 /etc/rsync-client.password

2.2.3 备份测试

在这里插入图片描述

2.3 配置lsyncd

2.3.1 安装软件

  • 该软件一般系统自带
[root@nfs01 ~]# rpm -qa |grep lsyncd
lsyncd-2.2.3-2.ky10.x86_64
[root@nfs01 ~]# rpm -ql  lsyncd
/etc/logrotate.d/lsyncd
/etc/lsyncd.conf # 配置文件
/etc/sysconfig/lsyncd
……

2.3.2 编写配置文件

  • 路径:/etc/lsyncd.conf
[root@nfs01 ~]# cat /etc/lsyncd.conf 
--全局部分主要配置lsyncd服务,日志,pid文件.
settings {--※※※※※日志文件,主要查看日志文件.logfile    = "/var/log/lsyncd.log",--pid文件pidfile    = "/var/run/lsyncd.pid",--服务状态文件statusFile = "/var/log/lsyncd.status",--改为非守护进程模式,默认.rsync命令,lsyncdnodaemon   = true,--控制最多用于传输数据的进程数量 rsync进程数(最大)--※※※※※根据cpu核心数来 一致或2倍maxProcesses = 2
}--配置rsync命令,rsync服务端与客户端模式
--sync部分可以有多个.
sync {--指定rsync工作模式default.rsync,--※※※※※ 指定lsyncd监控目录,源目录 source    = "/nfs/blog",--※※※※※ 指定目标 rsync服务端    用户名@rsync ip地址::模块名字target    = "rsync_backup@172.16.1.41::data",--※※※※※ 每隔5秒同步一次.delay     = 5,--rsync命令的  --delete 选项  保存客户端与服务端 内容一致.delete    = true,-- 配置rsync命令位置,rsync命令选项,rsync     = {-- 命令位置binary   = "/usr/bin/rsync",-- rsync命令的 -a选项archive  = true,-- rsync命令的  -z选项 压缩compress = true,-- ※※※※※配置rsync--password-file密码文件password_file = "/etc/rsync-client.password"}
}
# 重启服务
[root@nfs01 ~]# systemctl restart lsyncd.service

2.4 测试

在这里插入图片描述

3. 案例-网站存储架构

在这里插入图片描述

服务器需求
web服务器NFS共享目录挂载点:/app/code/blog
NFS服务器共享目录:/nfs/blog;虚拟用户:www(1999,1999)
备份服务器(backup)备份目录:/nfs/backup/blog;模块名称:blog

  1. 配置rsync服务
  2. 配置lsyncd服务
  3. 配置nfs服务

3.1 rsync服务配置

3.1.1 服务端配置

  • 修改rsync配置文件,添加blog模块
# 添加blog模块
[root@backup ~]# cat /etc/rsyncd.conf
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super = yes 
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup
[blog]
comment = www by old0boy 14:18 2012-1-13
path = /nfs/backup/blog
  • 查看虚拟用户与用户验证的密码文件
    • 该密码文件必须是root可读或可读可写
[root@backup ~]# id rsync
用户id=1000(rsync) 组id=1000(rsync)=1000(rsync)   
[root@backup ~]# ll /etc/rsync.password 
-rw------- 1 root root 15  612 10:08 /etc/rsync.password
  • 创建模块对应的目录
    • 该目录存放备份文件,所以所属用户/组应该是rsync
[root@backup ~]# mkdir -p /nfs/backup/blog/
[root@backup ~]# chown -R rysnc:rsync /nfs/backup/blog/
[root@backup ~]# ll -d /nfs/backup/blog/
drwxr-xr-x 2 rsync rsync 176  617 19:59 /nfs/backup/blog/
  • 重启服务
[root@backup ~]# systemctl restart rsyncd.service 

3.1.2 客户端配置

  • 备份服务器备份的数据应该是存储服务器的数据,所以客户端应该是nfs01
  • 创建rsync用户的密码文件,也是只能被root用户可读或可读可写
[root@nfs01 ~]# cat /etc/rsync-client.password 
1
[root@nfs01 ~]# ll /etc/rsync-client.password
-rw------- 1 root root 2  612 11:44 /etc/rsync-client.password

3.2 lsyncd服务配置

3.2.1 服务端配置

  • lsyncd服务是监听指定的目录,当目录变化后会执行rsync命令实现伪实时同步
  • 所以lsyncd服务端应该是rsync的客户端,即nfs01
  • 修改配置文件
[root@nfs01 ~]# cat -n /etc/lsyncd.conf1	--全局部分主要配置lsyncd服务,日志,pid文件.2	settings {3	   --※※※※※日志文件,主要查看日志文件.4	   logfile    = "/var/log/lsyncd.log",5	   --pid文件6	   pidfile    = "/var/run/lsyncd.pid",7	   --服务状态文件8	   statusFile = "/var/log/lsyncd.status",9	   --改为非守护进程模式,默认.rsync命令,lsyncd10	   nodaemon   = true,11	   --控制最多用于传输数据的进程数量 rsync进程数(最大)12	   --※※※※※根据cpu核心数来 一致或2倍13	   maxProcesses = 214	}1516	--配置rsync命令,rsync服务端与客户端模式17	--sync部分可以有多个.18	sync {19	    --指定rsync工作模式20	    default.rsync,21	    --※※※※※ 指定lsyncd监控目录,源目录 22	    source    = "/nfs/blog",23	    --※※※※※ 指定目标 rsync服务端    用户名@rsync ip地址::模块名字24	    target    = "rsync_backup@172.16.1.41::blog",25	    --※※※※※ 每隔5秒同步一次.26	    delay     = 5,27	    --rsync命令的  --delete 选项  保存客户端与服务端 内容一致.28	    delete    = true,29	    -- 配置rsync命令位置,rsync命令选项,30	    rsync     = {31	        -- 命令位置32	        binary   = "/usr/bin/rsync",33	        -- rsync命令的 -a选项34	        archive  = true,35	        -- rsync命令的  -z选项 压缩36	        compress = true,37	        -- ※※※※※配置rsync--password-file密码文件38	        password_file = "/etc/rsync-client.password"39	    }40	}
  • 重启服务
[root@nfs01 ~]# systemctl restart lsyncd.service

3.3 nfs服务配置

3.3.1 服务端配置

  • 先启动中介-rpcbind
[root@nfs01 ~]# systemctl is-active rpcbind.service 
active
[root@nfs01 ~]# rpcinfo -p program vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper
  • 配置nfs服务的配置文件
[root@nfs01 ~]# cat /etc/exports
# nfs服务配置文件
/nfs/blog 172.16.1.0/24(rw,all_squash,anonuid=1999,anongid=1999)
  • 添加虚拟用户和创建共享目录
# useradd -s /sbin/nologin -M -u 1999 www
[root@nfs01 ~]# id www
用户id=1999(www) 组id=1999(www)=1999(www)
# 创建目录后要修改所属用户/组
[root@nfs01 ~]# ll -d /nfs/blog/
drwxr-xr-x 2 www www 176  617 19:59 /nfs/blog/
  • 重启nfs服务并查看共享目录
[root@nfs01 ~]# systemctl reload nfs
[root@nfs01 ~]# rpcinfo -p |grep [n]fs100003    3   tcp   2049  nfs100003    4   tcp   2049  nfs100227    3   tcp   2049  nfs_acl
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/nfs/blog 172.16.1.0/24
/nfs/pics 172.16.1.0/24
/nfsdata  172.16.1.0/24

3.3.2 客户端配置

  • 创建nfs文件的挂载点
[root@web01 ~]# mkdir -p /app/code/blog/
  • 查看nfs共享目录并挂载
[root@web01 ~]# showmount -e nfs01 
Export list for nfs01:
/nfs/blog 172.16.1.0/24
/nfs/pics 172.16.1.0/24
/nfsdata  172.16.1.0/24
[root@web01 ~]# mount -t nfs nfs01:/nfs/blog /app/code/blog/
[root@web01 ~]# df -hT /app/code/blog/
文件系统        类型  容量  已用  可用 已用% 挂载点
nfs01:/nfs/blog nfs4   77G  4.0G   73G    6% /app/code/blog
  • 也可永久挂载,需修改磁盘分区配置文件:/etc/fstab
nfs01:/nfs/blog /app/code/blog nfs     defaults        0 0

3.4 测试

在这里插入图片描述

  • 太过完美

在这里插入图片描述

  • 关闭集群时,先关闭客户端web01
    • 再关闭备份服务的客户端:nfs01
    • 最后关闭备份服务器:backup
  • 最最后vmware备份快照
  • 😘

4. Ubuntu模板机

  • Ubuntu 22.04
  • NAT网卡、LAN网卡
  • 分区:/boot 2g、swap 2g、/ 剩余容量

4.1 配置host解析

cat >>/etc/hosts <<EOF
172.16.1.105 lb01-ubt
172.16.1.106 lb02-ubt
172.16.1.107 web01-ubt
172.16.1.108 web02-ubt
172.16.1.109 web03-ubt
172.16.1.131 nfs01-ubt
172.16.1.141 backup-ubt
172.16.1.151 db01-ubt
172.16.1.161 m01-ubt
EOF

4.2 远程连接优化

修改ssh服务端配置文件#2.关闭对应功能
cat >>/etc/ssh/sshd_config<<EOF
UseDNS no
GSSAPIAuthentication no
PermitRootLogin yes
EOF
#3.重启sshd
systemctl restart sshd
#4.检查
egrep '^(PermitRootLogin|GSSAPIAuthentication|UseDNS)' /etc/ssh/sshd_config结果有2个no即可.

4.3 关闭防火墙

systemctl  disable  ufw 
systemctl  stop   ufw

4.4 配置apt源

  • ubuntu版本是22.04 STL

cat >/etc/apt/sources.list<<EOF
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverseEOFapt update 

4.5 安装常用工具

安装工具
apt install -y tree vim   telnet  lrzsz   nmap  ncat  ntpdate

4.6 同步时间

  • 先修改时区为Asia/Shanghai
[root@aliyun-ubuntu ~]# timedatectl set-timezone Asia/Shanghai 
[root@aliyun-ubuntu ~]# date
Wed Jun 18 13:20:22 CST 2025
################################
cat >/var/spool/cron/crontabs/root<<EOF
#1. sync time by lidao996 at 20230101
*/3 * * * * /sbin/ntpdate ntp.aliyun.com  >/dev/null  2>&1
EOFselect-editor选2
vim.basic

4.7 配置vim自动添加脚本注释

vim /etc/vim/vimrc
set ignorecase 
autocmd BufNewFile *.py,*.cc,*.sh,*.java,*.bash exec ":call SetTitle()"func SetTitle()
if expand("%:e") =~ 'sh\|bash'
call setline(1, "#!/bin/bash")
call setline(2,"##############################################################")
call setline(3, "# File Name:".expand("%"))
call setline(4, "# Version:V1.0")
call setline(5, "# Author:oldboy lidao996")
call setline(6, "# Organization:www.oldboyedu.com")
call setline(7, "# Desc:")
call setline(8,"##############################################################")endif
endfunc

4.8 设置root密码

  • 便于使用root远程登录
[root@aliyun-ubuntu ~]# passwd root
New password: 
Retype new password: 

4.9 编写修改主机名和ip的脚本

#!/bin/bash
#author: lidao996
#desc: change ip and hostname
#version: v7.0 fina
#sh   脚本  主机名  ip地址(新的ip)net_config=/etc/netplan/00-installer-config.yaml #0.root?
[ $UID -ne 0 ] && {echo "pls run as root".exit 1
}#1.脚本参数个数
if [ $# -ne 2 ] ;thenecho "请输入2个参数"exit 2
fi#2.模板机ip地址(最后1位)
ip=`hostname -I |awk '{print $1}'|sed 's#.*\.##g'`
#3.新的ip
ip_new=`echo $2 |sed 's#^.*\.##g'`
#4.新的主机名
hostname=$1#5.修改ip
if [ -f $net_config ];thensed -i "s#10.0.0.$ip#10.0.0.$ip_new#g" $net_configsed -i "s#172.16.1.$ip#172.16.1.$ip_new#g" $net_config
elseecho "eth0网卡不存在,修改失败"
fi#6.生效
netplan apply
networkctl reload #7.修改主机名
hostnamectl set-hostname $hostname
  • 使用方式:
    • 如需修改主机名为web01,ip为10.0.0.31、172.16.1.31(ip第4部分必须相同)
    • 命令:bash 脚本路径 web01 10.0.0.31

4.10 配置命令行颜色

vim ~/.bashrc
export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$ '
source ~/.bashrc

4.11 编写回收站脚本,配置rm别名

#.回收站别名
cat  recyle-rm.sh
#!/bin/bash
##############################################################
# File Name:07.recyle-rm.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
###############################################################1.vars
files="$@"
dir=/recyle/#2.判断
if [ $# -eq 0 ];thenecho "Help: $0 file dir ...."exit 
fi#3.创建临时目录
#后期可以加入判断 目录不存在则创建
mkdir -p $dir
tmp_dir=`mktemp -d -p ${dir}`#4.把文件,目录...移动到临时目录
#这里未来可以加入更多的判断.
mv -t ${tmp_dir} ${files}#5.文件,目录已经移动到回收站
echo "文件,目录已经移动到回收站:${tmp_dir}"########################################
# 配置rm别名
echo "alias rm='bash ~/recyle-rm.sh'" >>/etc/profile
source /etc/profile

4.12 克隆模板机

  • 根据hosts文件克隆模板机即可

在这里插入图片描述

  • 没台设备启动后要修改主机名和ip
  • 以lb01为例
    • bash change.sh(脚本路径) lb01 10.0.0.105
    • ip a,查看ip信息
    • hostname,查看主机名
    • 关机,设置快照

5. 案例2-网站存储架构-Ubuntu 22.04

  • 配置服务的顺序
    • rsync
    • lsyncd
    • nfs服务
  • lsyncd需要指定监听的目录,该目录应该是web服务器传递的用户数据,也是nfs共享的目录;从逻辑上考虑第二部应该配置nfs,但是rsync与lsyncd太过相似,且性质相同,所以将nfs服务配置放在最后。

5.1 配置rsync服务

5.1.1 客户端

  • Ubuntu默认安装了rsync,直接查看配置文件位置
# 发现没有conf文件
[root@backup ~]# dpkg -L rsync |grep '*.conf'
# 使用该命令查看
[root@backup ~]# systemctl cat rsync.service

在这里插入图片描述

  • 配置文件位置和kylin一样
  • 修改配置文件
    • vim /etc/rsyncd.conf,然后复制粘贴……
    • 太low了😒
# 1.启动kylin系统的backup虚拟机,使用scp命令传输文件
[root@backup ~]# scp /etc/rsyncd.conf root@172.16.1.141:/etc/
root@172.16.1.141's password: 
rsyncd.conf                                                                    100%  640   652.7KB/s   00:00  
# 2.在Ubuntu的backup中查看文件
[root@backup ~]# cat /etc/rsyncd.conf 
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super = yes 
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup
[blog]
comment = www by old0boy 14:18 2012-1-13
path = /nfs/backup/blog# 3.复制后查看文件有无需要修改的参数
  • 添加虚拟用户rsync
[root@backup ~]# id rsync
id: ‘rsync’: no such user
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
[root@backup ~]# tail -1 /etc/passwd
rsync:x:1001:1001::/home/rsync:/sbin/nologin
  • 创建校验用户密码文件:/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:1
[root@backup ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 15 Jun 18 14:10 /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 15 Jun 18 14:10 /etc/rsync.password
  • 创建blog模块对应的目录:/nfs/backup/blog
[root@backup ~]# mkdir -p /nfs/backup/blog
[root@backup ~]# ll /nfs/backup/blog -d
drwxr-xr-x 2 root root 4096 Jun 18 14:11 /nfs/backup/blog/
[root@backup ~]# chown -R rsync:rsync /nfs/backup/blog
[root@backup ~]# ll /nfs/backup/blog -d
drwxr-xr-x 2 rsync rsync 4096 Jun 18 14:11 /nfs/backup/blog/
  • 启动服务,本地测试
[root@backup ~]# systemctl start rsync.service
[root@backup ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.141::blog
Password: 
sending incremental file list
hostssent 336 bytes  received 43 bytes  252.67 bytes/sec
total size is 432  speedup is 1.14
[root@backup ~]# ll /nfs/backup/blog/
total 12
drwxr-xr-x 2 rsync rsync 4096 Jun 18 14:19 ./
drwxr-xr-x 3 root  root  4096 Jun 18 14:11 ../
-rw-r--r-- 1 rsync rsync  432 Jun 18 09:24 hosts

5.1.2 客户端

  • 创建rsync用户的密码文件
[root@nfs01 ~]# cat /etc/rsync-client.password
1
[root@nfs01 ~]# chmod 600 /etc/rsync-client.passwordll /etc/rsync-client.password
-rw------- 1 root root 2 Jun 18 14:20 /etc/rsync-client.password
  • 测试
[root@nfs01 ~]# rsync -avz /etc/hostname rsync_backup@backup::blog --password-file=/etc/rsync-client.password 
sending incremental file list
hostnamesent 119 bytes  received 43 bytes  324.00 bytes/sec
total size is 6  speedup is 0.04
# 到服务端查看
[root@backup ~]# ls /nfs/backup/blog/
hostname  hosts

5.2 配置lsyncd服务

5.2.1 服务端

  • 安装软件并修改配置文件
[root@nfs01 ~]# apt install -y lsyncd 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
lsyncd is already the newest version (2.2.3-1).
0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.
  • 找一下配置文件位置
[root@nfs01 /nfs/blog]# systemctl cat lsyncd.service 

在这里插入图片描述

  • 查看一下该文件配置

在这里插入图片描述

可见配置文件位置是:/etc/lsyncd/lsyncd.conf.lua

  • 添加配置文件
# 先创建目录
[root@nfs01 ~]# mkdir -p /etc/lsyncd
[root@nfs01 ~]# scp root@172.16.1.31:/etc/lsyncd.conf /etc/lsyncd/lsyncd.conf.luaAuthorized users only. All activities may be monitored and reported.
root@172.16.1.31's password: 
lsyncd.conf                  100% 1439     1.0MB/s   00:00  
[root@nfs01 ~]# ll /etc/lsyncd/lsyncd.conf.lua 
-rw-r--r-- 1 root root 1439 Jun 18 15:04 /etc/lsyncd/lsyncd.conf.lua
[root@nfs01 ~]# cat /etc/lsyncd/lsyncd.conf.lua
--全局部分主要配置lsyncd服务,日志,pid文件.
settings {--※※※※※日志文件,主要查看日志文件.logfile    = "/var/log/lsyncd.log",--pid文件pidfile    = "/var/run/lsyncd.pid",--服务状态文件statusFile = "/var/log/lsyncd.status",--改为非守护进程模式,默认.rsync命令,lsyncdnodaemon   = true,--控制最多用于传输数据的进程数量 rsync进程数(最大)--※※※※※根据cpu核心数来 一致或2倍maxProcesses = 2
}--配置rsync命令,rsync服务端与客户端模式
--sync部分可以有多个.
sync {--指定rsync工作模式default.rsync,--※※※※※ 指定lsyncd监控目录,源目录 source    = "/nfs/blog",--※※※※※ 指定目标 rsync服务端    用户名@rsync ip地址::模块名字target    = "rsync_backup@172.16.1.141::blog",--※※※※※ 每隔5秒同步一次.delay     = 5,--rsync命令的  --delete 选项  保存客户端与服务端 内容一致.delete    = true,-- 配置rsync命令位置,rsync命令选项,rsync     = {-- 命令位置binary   = "/usr/bin/rsync",-- rsync命令的 -a选项archive  = true,-- rsync命令的  -z选项 压缩compress = true,-- ※※※※※配置rsync--password-file密码文件password_file = "/etc/rsync-client.password"}
}
# 查看配置文件,修改相关参数

在这里插入图片描述

  • 这里nodaemon必须为false,否则与systemd冲突
  • 创建监控目录并测试
[root@nfs01 ~]# mkdir -p /nfs/blog
# 重启服务
[root@nfs01 ~]# systemctl restart lsyncd.service 

在这里插入图片描述

5.3 配置nfs服务

5.3.1 客户端

  • 下载服务
apt install nfs-kernel-server -y
  • 编辑配置文件
[root@nfs01 ~]# cat /etc/exports
/nfs/blog 172.16.1.0/24(rw,all_squash,anonuid=1999,anongid=1999)
  • 添加虚拟用户:www uid=1999
[root@nfs01 ~]# id www
id: ‘www’: no such user
[root@nfs01 ~]# useradd -s /sbin/nologin -M -u 1999 www
[root@nfs01 ~]# id www
uid=1999(www) gid=1999(www) groups=1999(www)
[root@nfs01 ~]# tail -1 /etc/passwd
www:x:1999:1999::/home/www:/sbin/nologin
  • 修改共享目录所属用户/组
[root@nfs01 /nfs/blog]# chown -R www:www /nfs/blog/
[root@nfs01 /nfs/blog]# ll -d /nfs/blog/
drwxr-xr-x 2 www www 4096 Jun 18 15:56 /nfs/blog//
  • 启动服务
[root@nfs01 ~]# systemctl restart nfs-server.service 
[root@nfs01 ~]# systemctl status nfs-server.service 
● nfs-server.service - NFS server and servicesLoaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)Active: active (exited) since Wed 2025-06-18 16:43:09 CST; 6s agoProcess: 6008 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)Process: 6009 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)Main PID: 6009 (code=exited, status=0/SUCCESS)CPU: 5msJun 18 16:43:09 nfs01 systemd[1]: Starting NFS server and services...
Jun 18 16:43:09 nfs01 exportfs[6008]: exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_>
Jun 18 16:43:09 nfs01 exportfs[6008]:   Assuming default behaviour ('no_subtree_check').
Jun 18 16:43:09 nfs01 exportfs[6008]:   NOTE: this default has changed since nfs-utils version 1.0.x
Jun 18 16:43:09 nfs01 systemd[1]: Finished NFS server and services.
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/nfs/blog 172.16.1.0/24

5.3.2 客户端

  • 安装nfs客户端工具
apt install nfs-common -y
  • 挂载nfs共享目录
[root@web01 ~]# showmount -e nfs01 
Export list for nfs01:
/nfs/blog 172.16.1.0/24
[root@web01 ~]# mkdir -p /app/code/blog
[root@web01 ~]# mount -t nfs nfs01:/nfs/blog /app/code/blog/
[root@web01 ~]# df -hT /app/code/blog/
Filesystem      Type  Size  Used Avail Use% Mounted on
nfs01:/nfs/blog nfs4   94G  3.4G   86G   4% /app/code/blog
  • 测试

在这里插入图片描述

5.4 测试

在这里插入图片描述

  • 关闭时先关客户端,再关服务端
    • web01
    • nfs0
    • backup

6. 踩坑记录

1. clnt_create: RPC: Timed out

在这里插入图片描述

  • 内网中有多个设备,需要指定NFS服务器

在这里插入图片描述

  • rpcinfo也是同理

在这里插入图片描述

2. ISO镜像故障

在这里插入图片描述

  • 我的硬盘出现问题了;可以将镜像放置在其他盘内

3. Ubuntu报错:Job for lsyncd.service failed because a timeout was exceeded.

在这里插入图片描述

在这里插入图片描述

  • 修改配置文件重的nodaemon参数,改为false

nodaemonlsyncd 的一个关键配置项,用于控制进程是否以 守护进程(daemon)模式 运行:

  • nodaemon = true
    • lsyncd 会以 前台进程 运行(不脱离终端)。
    • 适用于手动调试(如 lsyncd -nodaemon /path/to/config),但 与 systemd 管理冲突
  • nodaemon = false(默认值)
    • lsyncd 以 守护进程 运行(后台服务模式)。
    • 这是与 systemd 配合使用的正确方式。

7. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85956.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85956.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85956.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native WebView键盘难题:如何让输入框不被键盘遮挡?

写在前面 “明明点击了输入框&#xff0c;键盘却把内容顶得不见踪影&#xff01;” —— 这可能是React Native开发者使用WebView时最头疼的问题之一。 想象一下&#xff1a;你的App内嵌了一个网页表单&#xff0c;用户兴奋地准备填写信息&#xff0c;结果键盘弹出后&#xf…

Web攻防-XSS跨站浏览器UXSS突变MXSSVueReactElectron框架JQuery库写法和版本

知识点&#xff1a; 1、Web攻防-XSS跨站-浏览器&转换-UXSS&MXSS 2、Web攻防-XSS跨站-框架和库-VUE&React&Electron&JQuery 分类&#xff1a; 1、框架或三方库的XSS(Vue、React、Electron、JQuery) 2、浏览器或插件的XSS(UXSS) 3、客户端预览内核的XSS(MXS…

PyTorch 中torch.clamp函数使用详解和实战示例

torch.clamp 是 PyTorch 中的一个非常有用的函数&#xff0c;它可以将张量的每个元素限制在一个指定的范围内&#xff0c;超出范围的元素将被裁剪为边界值。 函数签名&#xff1a; torch.clamp(input, minNone, maxNone, outNone)参数说明&#xff1a; input&#xff1a;输入…

详解Redis数据库和缓存不一致的情况及解决方案

数据库与缓存不一致是分布式系统中常见问题&#xff0c;本质是数据在缓存层和存储层出现版本差异。 一、并发写操作导致不一致&#xff08;最常见&#xff09; 场景描述 线程A更新数据库 → 线程B更新数据库 → 线程B更新缓存 → 线程A更新缓存 结果&#xff1a;缓存中存储的…

湖北理元理律师事务所:企业债务危机的“急诊科”式应对方案

当企业陷入债务危机时&#xff0c;传统“头痛医头”的应对往往加速死亡。本方案基于企业债务重组实务&#xff0c;提炼出 “止血-清创-修复”三阶急救体系&#xff0c;助力企业守住生存底线。 第一阶段&#xff1a;精准止血&#xff08;0-30天关键期&#xff09; 目标&#x…

华为云Flexus+DeepSeek征文|基于Dify构建智能票据信息识别助手

华为云FlexusDeepSeek征文&#xff5c;基于Dify构建智能票据信息识别助手 一、构建智能票据信息识别助手前言二、构建智能票据信息识别助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建智能票据信息识别助手实战3.1 配置Dify环境3.2 配置Dify工具…

Python实例题:基于联邦学习的隐私保护 AI 系统(分布式学习、隐私计算)

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于联邦学习的隐私保护 AI 系统&#xff08;分布式学习、隐私计算&#xff09; 问题描述 开发一个基于联邦学习的隐私保护 AI 系统&#xff0c;包含以下功能&#xff…

点点(小红书AI搜索):生活场景的智能搜索助手

1. 产品概述 点点是小红书于2024年12月正式推出的AI搜索助手&#xff0c;由上海生动诗章科技有限公司开发&#xff0c;定位为生活场景搜索工具&#xff0c;聚焦交通、美食、旅游、购物等日常需求&#xff0c;旨在通过即时信息和真实用户分享帮助用户“精准避坑”。 核心特点 …

软件工程概述:核心概念、模型与方法全解析

一、软件工程定义与诞生背景 定义 将系统化、规范化、可度量的方法应用于软件开发、运行和维护的过程&#xff08;IEEE标准&#xff09;。 核心目标&#xff1a;在可控成本下&#xff0c;生产高质量、可维护、满足需求的软件产品。 - 软件开发&#xff1a;需求 → 设计 → 编码…

LVS+Keepalived+nginx

LVSKeepalivednginx 1 安装依赖 sudo yum install ipvsadm keepalived -y 查询是否安装成功 rpm -q -a keepalived 2 配置虚拟IP并安装ipvsadm /etc/sysconfig/network-scripts cp ifcfg-ens33 ifcfg-ens33:1 修改里面配置文件 TYPE"Ethernet" PROXY_METHOD"n…

数据分析实操篇:京东淘宝商品实时数据获取与分析

在电商行业蓬勃发展的当下&#xff0c;数据已然成为驱动决策的核心要素。无论是商家精准把控市场需求、制定营销策略&#xff0c;还是消费者做出明智的购物抉择&#xff0c;都离不开对电商平台商品数据的深入剖析。京东和淘宝作为国内电商领域的两大巨头&#xff0c;汇聚了海量…

微信小程序扫码添加音频播放报错{errCode:10001, errMsg:“errCode:602,err:error,not found param“}

主要流程代码如下&#xff1a; let innerAudioContext wx.createInnerAudioContext() // 提示音 innerAudioContext.autoplay true innerAudioContext.src ../images/scan.mp3 innerAudioContext.onError(function(res){ console.log(onError 开始监听:,res) }) innerAudi…

SVN合并指南,从dev合并部分revision到release指南

dev合并到release 1.进入release的工作区&#xff0c;右击选择Merge 点击Next 2.确认merge来源分支和当前分支 点击Show Log&#xff0c;挑选需要合并的单号 3. 选择需要合并的commit 注意点击Hide no-mergeable revisions&#xff0c;来隐藏掉已经合并的commit 4.选择需…

《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题

复习题 8.1节 R1. 机密性是攻击者截获原始明文消息的密文加密后无法确定原始明文的属性。消息完整性是接收方可以检测发送的消息&#xff08;无论是否加密&#xff09;在传输过程中是否又被更改的属性。 因此&#xff0c;这两者是不同的概念&#xff0c;可以独立存在。一个在传…

抖音小程序开发:ttml和传统html的区别

1 传统 Web 中 HTML 的角色 HyperText Markup Language&#xff1a;用来描述页面结构——标题、段落、图片、表单…… 只负责“放什么元素、排在什么层级”&#xff0c;真正的行为靠 JS&#xff0c;视觉靠 CSS。 <!-- 传统网页&#xff1a;结构 class 交给 CSS --> &…

Unity2D 街机风太空射击游戏 学习记录 #12QFramework引入

概述 这是一款基于Unity引擎开发的2D街机风太空射击游戏&#xff0c;笔者并不是游戏开发人&#xff0c;作者是siki学院的凉鞋老师。 笔者只是学习项目&#xff0c;记录学习&#xff0c;同时也想帮助他人更好的学习这个项目 作者会记录学习这一期用到的知识&#xff0c;和一些…

Proteus如何创建第一个工程

视频教程&#xff1a; [最详细]Proteus新建第一个工程与快捷键设置 操作步骤 1打开Proteus后&#xff0c;左上角点击文件然后点击新建工程。 2新建工程后&#xff0c;弹出以下界面&#xff0c;选择修改自己的工程名字&#xff0c;&#xff08;工程名的后缀“.pdspsj”不要修改…

现代浏览器剪贴板操作指南 + 示例页面 navigator.clipboard 详解与实战

在 Web 开发中&#xff0c;复制文本到剪贴板是一个常见需求。多年来&#xff0c;过去我们依赖 Flash 或 document.execCommand(copy) 来实现。它曾是我们的得力助手&#xff0c;但这些方法存在兼容性差、安全性低的问题。现已经被正式标记为废弃&#xff08;Deprecated&#xf…

OpenCV-Python学习笔记

2 OpenCV中的Gui特性 2-1 图像入门 目标 学习如何读取图像、显示图像和保存图像 学习api函数&#xff1a;cv.imread()、cv.imshow()、cv.imwrite() 学习使用Matplotlib显示图像 使用OpenCV 读取图像 在OpenCV中&#xff0c;使用函数cv.imread()读取图像。 img cv.imread(le…

2025年- H87-Lc195--287.寻找重复数(技巧,二分查找OR动态规划)--Java版

1.题目描述 2.思路 3.代码实现 public class H287 {public int findDuplicate(int[] nums) {// 重复数字可能的最小值int min1;// 重复数字可能的最大值&#xff0c;数组长度为 n&#xff0c;数字范围是 [1, n-1]int maxnums.length-1;while(min<max) {// 防止溢出&#xf…