linux网络服务+linux数据库6
1.rsync
1.1 原理和基础实验
概述:
特性:
工作原理:
实验
步骤 1:准备目录与用户
操作(所有服务器)
- 创建同步目录:
mkdir -p /filesrc # 源目录(NFS 共享数据存放处) mkdir -p /filedst # 目标目录(客户端同步后存放处)
- 创建
rsync
认证用户(服务端):# 创建虚拟用户 user1(非系统用户,仅用于 rsync 认证) echo "user1:123456" > /etc/rsyncd_users.db # 修改密码文件权限(必须为 600,否则认证失败) chmod 600 /etc/rsyncd_users.db
原理
/filesrc
模拟 NFS 共享的数据目录;rsyncd_users.db
存储rsync
客户端认证的 “用户名:密码”,权限600
保证安全。
步骤 2:配置 rsync
服务端(NFS 服务器)
操作
创建
rsyncd.conf
配置文件:vim /etc/rsyncd.conf
添加内容:
uid = nobody gid = nobody port = 873 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid [web] comment = web directory backup path = /filesrc read only = no dont compress = *.gz *.bz2 auth users = user1 secrets file = /etc/rsyncd_users.db
uid/gid = nobody
:rsync
进程以nobody
用户 / 组运行;port = 873
:rsync
守护进程默认端口;[web]
:共享模块名,客户端通过rsync://服务器IP/web
访问;path = /filesrc
:共享的实际目录;read only = no
:允许客户端上传(若为yes
则只读);auth users = user1
:允许认证的用户名;secrets file
:指定认证密码文件。
启动
rsync
守护进程:rsync --daemon
验证
rsync
服务启动:netstat -antp | grep 873
输出应包含
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN <rsync进程号>
。
原理
rsync --daemon
以守护进程方式启动 rsync
服务,根据 rsyncd.conf
配置监听 873 端口,提供共享目录和认证功能。
步骤 3:下行同步(客户端从服务端下载)
操作(客户端)
执行同步命令:
rsync -avz rsync://user1@192.168.88.10/web /filedst
rsync://user1@服务器IP/模块名
:rsync
协议的访问地址;/filedst
:客户端本地目标目录。
输入密码:执行命令后,提示输入密码
123456
(与rsyncd_users.db
中一致)。
原理
客户端通过 rsync
协议连接服务端,用 user1
认证后,将服务端 /filesrc
(web
模块对应的目录)同步到本地 /filedst
。
验证
- 客户端执行
ls /filedst
,应看到服务端/filesrc
中的文件; - 增量验证:在服务端
/filesrc
新增文件echo "new file" > /filesrc/test.txt
,再次执行同步命令,输出应显示 “仅传输新增的test.txt
”。
步骤 4:上行同步(客户端向服务端上传)
操作(客户端)
在客户端创建测试文件:
echo "upload test" > /filedst/upload.txt
执行上传命令:
rsync -avz /filedst/upload.txt rsync://user1@192.168.88.10/web
输入密码:输入
123456
。
原理
客户端将本地文件 upload.txt
通过 rsync
协议上传到服务端的 web
模块(对应 /filesrc
目录)。
验证
- 服务端执行
ls /filesrc
,应看到upload.txt
; - 执行
cat /filesrc/upload.txt
,输出upload test
,与客户端文件一致。
步骤 5:扩展验证(删除冗余文件 + 免密同步)
1. 删除服务端不存在的文件(--delete
)
- 客户端执行:
rsync -avz --delete rsync://user1@192.168.88.10/web /filedst
- 原理:
--delete
会删除客户端/filedst
中服务端/filesrc
不存在的文件,保持完全一致。 - 验证:在客户端
/filedst
手动创建temp.txt
,执行上述命令后,temp.txt
应被删除。
2. 免密同步(环境变量)
- 客户端设置环境变量:
export RSYNC_PASSWORD=123456
- 执行同步命令(无需输入密码):
rsync -avz rsync://user1@192.168.88.10/web /filedst
- 原理:
RSYNC_PASSWORD
环境变量会被rsync
读取,自动填充认证密码。 - 验证:命令执行后直接开始同步,无密码输入提示。
1.2 单向实时同步(配置rsync+inotify)
- inotify:Linux 内核的 “文件系统事件监控机制”,可实时监控目录的 “创建、删除、修改” 等事件。
- rsync:高效的文件同步工具,支持增量传输。
- 结合逻辑:
inotifywait
监控目录事件,触发rsync
同步,实现 “目录变化 → 立即同步” 的实时效果。
步骤 1:部署 inotify-tools(源服务器)
操作
- 安装依赖:
yum -y install gcc
- 下载并编译 inotify-tools:
# 假设压缩包为 inotify-tools-3.14.tar.gz tar -xf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure && make && make install
原理
inotify-tools
提供 inotifywait
命令,用于监控文件系统事件,需编译安装(依赖 gcc
)。
验证
执行 inotifywait --help
,输出命令帮助信息,说明安装成功。
步骤 2:配置免密 rsync(源 → 目标服务器)
操作(源服务器)
- 生成 SSH 密钥对:
ssh-keygen -t rsa
~/.ssh/id_rsa
和~/.ssh/id_rsa.pub
)。 - 上传公钥到目标服务器:
bash
ssh-copy-id root@目标服务器IP
原理
ssh-copy-id
将源服务器的公钥添加到目标服务器的 ~/.ssh/authorized_keys
,实现免密 SSH 登录,从而让 rsync
免密同步。
验证
执行 ssh root@目标服务器IP
,无需输入密码即可登录,说明免密生效。
步骤 3:编写实时同步脚本(源服务器)
操作
创建脚本
sync.sh
:vim /root/sync.sh
添加内容:
#!/bin/bash # 监控 /filesrc 目录的创建、删除事件 inotifywait -mrq -e create,delete /filesrc | while read directory event file do# 触发 rsync 同步(将 /filesrc 同步到目标服务器的 /filedst)rsync -avz /filesrc/ root@目标服务器IP:/filedst/ done
inotifywait -mrq -e create,delete /filesrc
:-m
持续监控,-r
递归,-q
静默,监控 “创建、删除” 事件;while read
:循环读取监控到的事件,触发rsync
。
添加执行权限:
chmod +x /root/sync.sh
原理
脚本通过 inotifywait
实时捕获 /filesrc
的变化,一旦有 “创建 / 删除” 事件,立即执行 rsync
同步到目标服务器。
步骤 4:启动实时同步(源服务器)
操作
后台运行脚本:
nohup /root/sync.sh &
nohup
:忽略挂断信号,确保脚本后台持续运行;&
:将进程放入后台。
验证脚本运行:
ps -ef | grep sync.sh
输出应包含
/root/sync.sh
的进程信息。
原理
nohup
和后台运行让脚本脱离终端,持续监控目录事件。
步骤 5:验证实时同步效果
操作(源服务器)
- 创建测试文件:
echo "test create" > /filesrc/test.txt
- 删除测试文件:
rm /filesrc/test.txt
原理
inotifywait
监控到 “创建 / 删除” 事件,触发 rsync
同步到目标服务器。
验证(目标服务器)
- 创建验证:执行
ls /filedst
,应看到test.txt
;执行cat /filedst/test.txt
,输出test create
...
1.3 unison 双向实时同步
- inotify:监控文件系统事件(创建、删除等),实时感知目录变化。
- unison:双向文件同步工具,可保持两个目录内容一致(支持跨服务器,依赖 OCaml)。
- 结合逻辑:
inotifywait
监控目录事件,触发unison
执行双向同步,实现 “一端变化 → 双向自动同步”。
步骤 1:环境准备
操作(两台服务器)
- 创建同步目录:
filesrc
端:mkdir -p /filesrc
filedst
端:mkdir -p /filedst
- root 免密验证(可选,简化操作):
- 生成密钥对(
filesrc
端):ssh-keygen -t rsa
(一路回车) - 上传公钥到
filedst
端:ssh-copy-id root@filedst服务器IP
- 验证:
ssh root@filedst服务器IP
无需密码即可登录。
- 生成密钥对(
步骤 2:安装依赖软件
1. 安装 inotify-tools
(两台服务器)
# 安装编译依赖
yum -y install gcc# 假设压缩包为 inotify-tools-3.14.tar.gz
tar -xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
验证:inotifywait --help
输出帮助信息,说明安装成功。
2. 安装 OCaml
(两台服务器)
# 假设压缩包为 ocaml-3.10.1.tar.gz
tar -xf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1
./configure # 忽略所有报错(实验环境简化)
make world opt
make install
验证:ocaml -version
输出版本信息,说明安装成功。
3. 安装 unison
(两台服务器)
# 假设压缩包为 unison-2.13.16.tar.gz
tar -xf unison-2.13.16.tar.gz
cd unison-2.13.16
# 已有 Makefile,直接编译(需 OCaml 环境)
make UISTYLE=text THREADS=true STATIC=true
make install
验证:unison -version
输出版本信息,说明安装成功。
步骤 3:编写双向同步脚本
1. filesrc
端脚本(/root/sync_filesrc.sh
)
#!/bin/bash
# 监控 /filesrc 目录的创建、删除事件
inotifywait -mrq -e create,delete /filesrc | while read directory event file
do# 触发 unison 双向同步/usr/local/bin/unison -batch /filesrc/ ssh://root@filedst服务器IP//filedst/
done
inotifywait -mrq -e create,delete /filesrc
:持续监控/filesrc
的 “创建、删除” 事件;unison -batch
:非交互模式,自动确认同步。
添加执行权限:chmod +x /root/sync_filesrc.sh
2. filedst
端脚本(/root/sync_filedst.sh
)
#!/bin/bash
# 监控 /filedst 目录的创建、删除事件
inotifywait -mrq -e create,delete /filedst | while read directory event file
do# 触发 unison 双向同步/usr/local/bin/unison -batch /filedst/ ssh://root@filesrc服务器IP//filesrc/
done
添加执行权限:chmod +x /root/sync_filedst.sh
步骤 4:启动双向同步脚本
1. filesrc
端启动
nohup /root/sync_filesrc.sh &
验证:ps -ef | grep sync_filesrc.sh
显示脚本进程在运行。
2. filedst
端启动
nohup /root/sync_filedst.sh &
验证:ps -ef | grep sync_filedst.sh
显示脚本进程在运行。
步骤 5:验证双向实时同步
1. filesrc
端创建文件,验证 filedst
端同步
filesrc
端操作:echo "test from filesrc" > /filesrc/test.txt
filedst
端验证:cat /filedst/test.txt
输出test from filesrc
。
2. filedst
端修改文件,验证 filesrc
端同步
filedst
端操作:echo "modify from filedst" >> /filedst/test.txt
filesrc
端验证:cat /filesrc/test.txt
输出:test from filesrc modify from filedst
3. filesrc
端删除文件,验证 filedst
端同步
filesrc
端操作:rm /filesrc/test.txt
filedst
端验证:ls /filedst
无test.txt
。
4. filedst
端新建文件,验证 filesrc
端同步
filedst
端操作:echo "new from filedst" > /filedst/new.txt
filesrc
端验证:cat /filesrc/new.txt
输出new from filedst
。
步骤 6:测试脚本后台运行与延迟(可选)
操作
- 后台启动脚本(以
filesrc
端为例):bash /root/sync_filesrc.sh &
- 在两台服务器频繁创建 / 修改文件,观察同步延迟(实验环境延迟通常在秒级内)
2.elk
2.1 概述
2.2 监控服务器端搭建
2.3 被监控Ngix端搭建
- Nginx:Web 服务器,生成访问日志。
- Filebeat:轻量级日志采集器,监控 Nginx 日志文件,将日志发送到 ELK(Elasticsearch + Logstash + Kibana)。
- ELK:
- Elasticsearch:存储和检索日志数据;
- Logstash:(可选)过滤、转换日志(本实验 Filebeat 直连 Elasticsearch,简化流程);
- Kibana:可视化展示 Elasticsearch 中的日志。
步骤 1:安装 Nginx(日志生成端)
操作
yum -y install nginx
验证
- 启动 Nginx:
systemctl start nginx
- 浏览器访问 Nginx 服务器 IP(如
http://192.168.137.13
),显示 Nginx 欢迎页,说明 Nginx 正常运行。
步骤 2:下载并解压 Filebeat
操作
# 下载 Filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.3-linux-x86_64.tar.gz# 解压到 /usr/local/
tar -xf filebeat-6.2.3-linux-x86_64.tar.gz -C /usr/local/
验证
- 执行
ls /usr/local/filebeat-6.2.3-linux-x86_64/
,应看到filebeat
可执行文件和filebeat.yml
配置文件。
步骤 3:修改 Filebeat 配置(filebeat.yml
)
操作
- 进入 Filebeat 目录:
cd /usr/local/filebeat-6.2.3-linux-x86_64/
- 编辑
filebeat.yml
:vim filebeat.yml
- 修改以下关键配置:
- 启用日志监控:
filebeat.inputs: - type: logenabled: true # 将 false 改为 truepaths:- /var/log/nginx/*.log # 监控 Nginx 日志目录
- 注释 Elasticsearch 输出(本实验直连 Logstash,若 ELK 无 Logstash 则需配置 Elasticsearch 输出,此处按步骤调整):
#output.elasticsearch:#hosts: ["localhost:9200"]
- 取消 Logstash 输出注释并修改 ELK 服务器 IP:
yaml
output.logstash:hosts: ["192.168.137.138:5044"] # ELK 服务器的 Logstash 端口(需确保 Logstash 已配置 5044 端口接收 Filebeat 数据)
- 启用日志监控:
原理
enabled: true
开启 Filebeat 的日志采集;paths
指定要监控的 Nginx 日志路径;output.logstash
配置将日志发送到 ELK 的 Logstash 进行处理。
步骤 4:启动 Filebeat 并验证日志
操作
- 后台启动 Filebeat:
nohup ./filebeat -e -c filebeat.yml &
-e
:输出到标准错误(便于调试);-c
:指定配置文件。
- 查看日志:
tail -f nohup.out
验证
- 日志中无明显错误(如 “connection failed”),且显示 “Harvester started” 等信息,说明 Filebeat 已开始监控日志。
步骤 5:生成 Nginx 访问日志
操作
- 浏览器多次访问 Nginx 服务器(如
http://192.168.137.13
),生成多条访问日志。
原理
每次访问 Nginx 都会在 /var/log/nginx/access.log
中生成一条日志,Filebeat 会捕获这些新日志。
步骤 6:验证 ELK 中日志收集
操作(访问 Kibana)
- 浏览器访问 Kibana(如
https://192.168.137.138:5601
)。 - 点击左侧 “Discover”。
- 配置索引模式:
- 输入
logstash-*
(若 Filebeat 直连 Elasticsearch,索引名可能为filebeat-*
,需根据实际情况调整),点击 “Next step”。 - 选择时间过滤字段(如
@timestamp
),点击 “Create index pattern”。
- 输入
验证
- Kibana “Discover” 页面应显示 Nginx 访问日志的条目,包含请求 IP、时间、URL 等信息。