实时同步服务

news/2024/10/18 17:52:20/文章来源:https://www.cnblogs.com/daofaziran/p/18460467

1 实时同步应用场景

  • 通过rsync+定时任务实现定时备份/同步
  • 对于NFS我们需要进行实时同步

2 实时同步工具选型

实时同步工具

特点 选型

inotify工具+脚本

inotify监控指定的目录,监控

目录下是否有变化,显示变化了的文件.

通过rsync服务端与客户端传送,书写脚本.

不推荐,有性能问题.

sersync服务

国产开源,sersync集成了inotify监控功能和rsync推送的功能.

可以使用,二进制安装,性能较高,inotify的根本问题没有解决. 很久没有更新了.

lsyncd服务

集成inotify和rsync

性能好,yum安装,更新及时,配置简单

drbd

基于磁盘的block(磁盘分区)级别的数据同步,备节点不可用.

一般用于数据量巨大TB,PB或数据库.

3 Lsyncd极速上手指南

角色

说明 共享目录

backup服务器(172.16.1.67)

rsync服务端 共享/nfsbackup/

nfs01服务器(172.16.1.68)

部署lsyncd实时同步服务 监控/data/

web01服务器(172.16.1.69)

挂载nfs01服务器目录  

lsync服务使用流程

1. 先准备rsync服务与客户端
2. 部署,配置lsyncd服务
3. 测试

3.1  准备lsyncd环境-rsync服务端与客户端

# 1. 修改rsyncd配置文件
[nfsbackup]
comment = nfsbackup
path = /nfsbackup
# 2. 准备共享目录与修改权限
# 3. 客户端(nfs服务器)创建密码文件
# 4. nfs机器上测试,传输数据到backup的nfsbackup模块
rsync -av /etc/hostname rsync_backup@backup::nfsbackup --password-file=/etc/rsync.client

3.2  lsyncd部署

#在哪台机器部署? nfs01
#1.安装
yum install -y lsyncd
#2.检查
rpm -qa |grep lsyncd
#3.配置

3.3 lsync配置详解

/etc/lsyncd.conf配置详解,lua语言,注释--表示注释

配置整体2个部分

settings全局配置部分.pid文件,日志文件.

sync部分用于指定rsync命令和intofiy的选项.

[root@nfs01 ~ ]# grep -v '\-\-' /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd.log",
pidfile = "/var/run/lsyncd.pid",
statusFile = "/var/log/lsyncd.status",
nodaemon = true,
maxProcesses = 2
}
sync {
default.rsync,
source = "/data/",
target = "rsync_backup@172.16.1.67::nfsbackup",
delay = 15,
delete = true,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
password_file = "/etc/rsync.client"
}
}

 

--全局部分主要配置lsyncd服务,日志,pid文件.
settings {
--※※※※※日志文件,主要查看日志文件.
logfile = "/var/log/lsyncd.log",
--pid文件
pidfile = "/var/run/lsyncd.pid",
--服务状态文件
statusFile = "/var/log/lsyncd.status",
--改为非守护进程模式,默认.rsync命令,lsyncd
nodaemon = true,
--控制最多用于传输数据的进程数量 rsync进程数(最大)
--※※※※※根据cpu核心数来 一致或2倍
maxProcesses = 2
}--配置rsync命令,rsync服务端与客户端模式
--sync部分可以有多个.
sync {
--指定rsync工作模式
default.rsync,
--※※※※※ 指定lsyncd监控目录,源目录
source = "/data/",
--※※※※※ 指定目标 rsync服务端 用户名@ip地址::模块名字
target = "rsync_backup@172.16.1.67::nfsbackup",
--※※※※※ 每隔15秒同步一次.
delay = 15,
--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"
}
}

 

lsyncdrsync模式

说明

default.rsync⭐ ⭐ ⭐ ⭐ ⭐

使用rsync守护进程模式

dsfalut.direct

直接模式,本地模式rsync当前cp,mv

default.rsyncssh

通过ssh通道方式连接,rsync命令2个节点,需要配置密钥认证

官方文档:https://lsyncd.github.io/lsyncd/

3.4 启动lsyncd服务与测试

配置文件

settings {
logfile = "/var/log/lsyncd.log",
pidfile = "/var/run/lsyncd.pid",
statusFile = "/var/log/lsyncd.status",
nodaemon = true,
maxProcesses = 3
}
sync {
default.rsync,
source = "/data/",
target = "rsync_backup@172.16.1.67::backup",
delay = 15,
delete = true,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
password_file = "/etc/rsync.client"
}
}

启动lsyncd

systemctl enable lsyncd
systemctl start lsyncd
systemctl status lsyncd
ps -ef |grep lsyncd

检查与测试

3.6 麒麟sp2部署(编译安装lsyncd过程)

麒麟sp2系统 需要编译安装lsyncd 部署流程参考:https://www.yuque.com/lidao996/sre/ri259i7194d82258?singleDoc#

关于编译安装的本质:
./configure #cmake . #根据配置生成Makefile文件,用于提供给make使
用,gcc,cc编译指令.
#lsync使用cmake生成Makefile
make #调用Makefile里面的指令进行编译. 生成二进制文件.
make install #创建目录,复制文件,配置. 收尾工作.

systemctl配置书写

未来参考系统中其他服务即可sshd,crond,nginx
/usr/lib/systemd/system/xxxx.service 我们自己创建,服务安装后创建都在这里.
/etc/systemd/system/xxx.service 系统安装后自带

systemctl  .service文件组

说明 具体的指令

[Unit]

基本信息注释 服务依赖关系

Description After 在指定服务启动后在启动当前服务

[Service]

类型(判断服务运行方法)

用于指定服务开启命令

服务的关闭命令

服务的重启命令

服务自动重启

...这里可以是具体命令或脚本

Type默认是Simple,一般用simple,forking或notify,需要测试

ExecStart=

ExecStop=

ExecRestart=

ExecReload(如果服务支持)

[Install]

内容基本固定用于指定运行级别

WantedBy=multi-user.target

lsyncd服务的systemctl文件

lsyncd.service
 cat >/usr/lib/systemd/system/lsyncd.service<<EOF
[Unit]
Description=Live Syncing (Mirror) Daemon
[Service]
Type=simple
ExecStart=/usr/local/bin/lsyncd -nodaemon /etc/lsyncd.conf
ExecStop=pkill lsyncd
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF#书写或修改systemctl文件后要执行 如下指令,让系统重新读取systemctl配置.
systemctl daemon-reload

温馨提示:如果ExecStart/ExecStop/ExecRestart对应的指令较为复杂,或者调用变量. 需要书写脚本

/etc/init.d/lsyncd {start|stop|restart}

服务管理脚本
 #!/bin/bash
#desc: 服务管理脚本.
choice=$1
function start_lsyncd() {
}
function stop_lsyncd() {
}
function restart_lsyncd() {
}
case "$choice" in
start) start_lsyncd ;;
stop) stop_lsyncd ;;
restart) restart_lsyncd ;;
* ) echo "error "
esac

 

定时任务服务systemctl配置文件
 ####定时任务服务systemctl配置文件
systemctl cat crond
# /usr/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service nss-user-lookup.target systemd-usersessions.service time-sync.target ypbind.service
autofs.service
[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=multi-user.target
Alias=cron.service
###远程连接服务
systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/backends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd-permitrootlogin
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
$PERMITROOTLOGIN
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
###nginx服务
systemctl cat nginx
# /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nsslookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists
but has the wrong
# SELinux context. This might happen when running `nginx -t`
from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
##nfs服务配置
[root@nfs01 ~/lsyncd-2.3.1]# systemctl cat nfs
# /usr/lib/systemd/system/nfs-server.service
[Unit]
Description=NFS server and services
DefaultDependencies=no
Requires= network.target proc-fs-nfsd.mount
Requires= nfs-mountd.service
Wants=rpcbind.socket network-online.target
Wants=rpc-statd.service nfs-idmapd.service
Wants=rpc-statd-notify.service
Wants=nfsdcld.service
After= network-online.target local-fs.target
After= proc-fs-nfsd.mount rpcbind.socket nfs-mountd.service
After= nfs-idmapd.service rpc-statd.service
After= nfsdcld.service
Before= rpc-statd-notify.service
# GSS services dependencies and ordering
Wants=auth-rpcgss-module.service
After=rpc-gssd.service gssproxy.service rpc-svcgssd.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/sbin/exportfs -r
ExecStart=/usr/sbin/rpc.nfsd
ExecStop=/usr/sbin/rpc.nfsd 0
ExecStopPost=/usr/sbin/exportfs -au
ExecStopPost=/usr/sbin/exportfs -f
ExecReload=/usr/sbin/exportfs -r
[Install]
WantedBy=multi-user.target
# /run/systemd/generator/nfs-server.service.d/order-withmounts.conf
# Automatically generated by nfs-server-generator
[Unit]
RequiresMountsFor=/nfs/pics
RequiresMountsFor=/nfsdata

麒麟sp2部署-完成               

4 Lsyncd监控多个目录

cat /etc/lsyncd.conf
 [root@nfs01 /data2]# cat /etc/lsyncd.conf
settings {logfile    = "/var/log/lsyncd.log",pidfile    = "/var/run/lsyncd.pid",statusFile = "/var/log/lsyncd.status",nodaemon   = true,maxProcesses = 2
}
# 监控/data/目录同步到备份服务器的nfs01backup模块
sync {default.rsync,source    = "/data/",target    = "rsync_backup@backup::nfs01backup",delay     = 3,delete    = true,rsync     = {binary   = "/usr/bin/rsync",archive  = true,compress = true,password_file = "/etc/rsync.client"}
}
# 监控/data2/目录同步到备份服务器的nfs01backup2模块
sync {default.rsync,source    = "/data2/",target    = "rsync_backup@backup::nfs01backup2",delay     = 3,delete    = true,rsync     = {binary   = "/usr/bin/rsync",archive  = true,compress = true,password_file = "/etc/rsync.client"}
}

查看结果:/var/log/lsyncd.status 看到有2个sync

/var/log/lsyncd.status
 [root@nfs01 /var/log]# cat lsyncd.status 
Lsyncd status report at Fri Oct 18 16:48:13 2024Sync1 source=/data/
There are 0 delays
Filtering:nothing.Sync2 source=/data2/
There are 0 delays
Filtering:nothing.Inotify watching 2 directories1: /data/2: /data2/

5 实时同步案例

5.1 项目背景

  • 我们要给网站存储做个实时同步.
  • 通过对比发现lsyncd符合需求.
  • 通过lsyncd给nfs服务端做个数据实时同步,同步到backup服务器

5.2 项目架构图

项目流程

1. 准备备份服务器(rsync)服务端与客户端

2. nfs服务(准备共享目录,客户端挂载)

3. 实时同步lsyncd监控指定的nfs目录(先创建好对应的目录)

4. 联调 在web服务器上创建文件,文件应该出现存储和备份上.

5.3 项目主机规划

角色

主机 ip 目录

web服务器

web01 10.0.0.69/172.16.1.69 /mnt (nfs挂载点)

存储服务器

nfs01

10.0.0.68/172.16.1.68

/data www(3999)用户

备份服务器

backup 10.0.0.67/172.16.1.67

共享目录 /nfs01backup/   模块nfs01backup

设置hosts解析

cat /etc/hosts
 [root@nfs01 /var/log]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.69 web01
172.16.1.70 web02
172.16.1.68 nfs01
172.16.1.67 backup
172.16.1.71 m01

5.4 备份服务准备

5.4.1 服务端配置

/etc/rsyncd.conf
# 修改配置文件
cat >/etc/rsyncd.conf <<EOF
##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 = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
#[data]
#comment = www by xk 14:18 2024-1-13
#path = /data[nfs01backup]
comment = www by xk 14:18 2024-1-13
path = /nfs01backup[nfs01backup2]
comment = www by xk 14:18 2024-1-13
path = /nfs01backup2
EOF# 创建目录
mkdir -p /nfs01backup#修改所有者
chown -R rsync.rsync nfs01backup# 添加用户
useradd -s /sbin/nologin -M rsync#添加密码
echo 'rsync_backup:Xk123456' > /etc/rsync.password
chmod 600 /etc/rsync.password# 启动服务
systemctl enable --now rsync
systemctl restart rsync

5.4.2 客户端测试

目录&密码
# 创建目录
mkdir -p /data# 创建密码
echo 'Xk123456' > $secret
chmod 600 $secret

5.5 存储服务准备

5.5.1 服务端

server
 # 1.安装nfs
yum install -y rpcbind nfs-utils# 2.启动rpc和nfs
systemctl start rpcbind
systemctl start nfs# 3.修改配置 (可以加上all_squash)
cat >/etc/exports<<EOF
/nfs01data	172.16.1.0/24(rw,all_squash,anonuid=3999,anongid=3999)
EOF# 4. 添加用户
groupadd -g 3999 www
useradd -u 3999 -g www -s /sbin/nologin -M www# 5.准备共享目录
mkdir /data
chown www.www /data

5.5.2 客户端挂载

deploy_nfs_client.sh
 [root@web01 /server/scripts]# cat deploy_nfs_client.sh 
#!/bin/bash
##############################################################
# File Name:deploy_nfs_client.sh
# Version:V1.0
# Author:xk
# 
# Desc:
##############################################################
# 部署nfs客户端 deploy nfs_client
backup_ip="$1"
share_data="/data"
mount_point="/mnt"# 添加用户
groupadd -g 3999 www
useradd -u 3999 -g www -s /sbin/nologin -M www # 1. 临时挂载
mount -t nfs $backup_ip:$share_data $mount_point
touch $mount_point/1.txt

5.6 实时同步服务准备

5.6.1 修改conf配置文件

/etc/lsyncd.conf
 [root@nfs01 /server/scripts]# cat /etc/lsyncd.conf
settings {logfile    = "/var/log/lsyncd.log",pidfile    = "/var/run/lsyncd.pid",statusFile = "/var/log/lsyncd.status",nodaemon   = true,maxProcesses = 2
}sync {default.rsync,source    = "/data/",target    = "rsync_backup@backup::nfs01backup",delay     = 3,delete    = true,rsync     = {binary   = "/usr/bin/rsync",archive  = true,compress = true,password_file = "/etc/rsync.client"}
}

5.6.2 其他配置参考(Lsyncd极速上手指南) 

5.6.3  测试

在web01服务器/mnt目录下创建文件,先看到nfs01服务器/data目录下有数据,过几秒看到backup服务器/nfs01backup目录下有数据

实时查看数据:watch ls /data/ 

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

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

相关文章

五款免费报表工具推荐:山海鲸报表、Tableau 等优劣对比

在当今数据驱动的时代,报表工具已经成为各类企业进行决策和管理的重要工具。无论是大中型企业还是小微企业,能够快速、高效地生成可视化报表,洞察业务运营情况,已经成为提升竞争力的关键。今天为大家挑选了5款非常优秀的报表软件,并且详细分析了它们的优缺点,希望能够帮助…

DevExpress隐藏列表中显示的加号+

GridView1.OptionsDetail.EnableMasterViewMode = False

人大金仓kingbase部署

环境准备: 系统版本:CentOS Linux release 7.9.2009 (Core) 硬件配置:4C4G200G 安装包准备:KingbaseES_V008R006C008B0020_Lin64_install.iso https://www.kingbase.com.cn/xzzx/index.htmlicense准备:license_企业版.zip https://www.kingbase.com.cn/xzzx/index.htm计划…

从深海探测到海洋强国:数字孪生助力海洋装备跨越式发展

浮力调节系统作为涉及潜水的海洋设备的关键部件,能够为潜水器提供稳定悬浮的深度控制,并能根据工作深度的不同通过改变浮力来带动潜水器上浮或下潜。海洋广袤无垠,蕴藏着丰富的资源。近现代以来,人类使用各种手段探索海洋探索,广袤无垠的海洋与人类的生活越来越紧密,至少…

python - 分享绕过验证码登录的方法

一、通过webdriver启动浏览器:二、添加cookie:三、切换到目标地址: # This is a sample Python script. from selenium import webdriver import time # Press Shift+F10 to execute it or replace it with your code. # Press Double Shift to search everywhere for clas…

通义灵码上线一周年:超 600 万下载量,国内用户规模第一,新功能有奖测评

通义灵码,是基于通义大模型的 AI 研发辅助工具,包含 AI 编码助手和 AI 程序员。其中,AI 编码助手为开发者写代码、补代码、写注释、写单测、写代码优化和排查问题,是开发者的编码搭子!通义灵码,是基于通义大模型的 AI 研发辅助工具,包含 AI 编码助手和 AI 程序员。 其中…

mysql当数据库发现了慢sql怎么定位?--待验证

1、应用侧生成链路id。 使用skywalking 2、mybatis写拦截器,sql里面加入链路id `@Intercepts({ @Signature( type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class} ) }) public class SqlStatementInterceptor implements…

Echarts 关于formatter的使用

其实这个 formatter 很实用哈,可以自定义很多格式内容,尤其是提示和图例那边,还有柱状图的内容啥的 官网给的案例啊,看不懂哈哈哈 来点自己的小经验,几乎都可以实用啊,而且可以搭配rich自定义样式, 1、字符串模板 最简单的就是这样使用的,关于参数,这个官网给答案了,…

Higress 重磅更新:AI 能力全面开源,云原生能力再升级

Higress 最新的 1.4 版本基于为通义千问,以及多家云上 AGI 厂商客户提供 AI 网关的积累沉淀,开源了大量 AI 原生的网关能力。作者:澄潭、钰诚 新版本简介 Higress 最新的 1.4 版本基于为通义千问,以及多家云上 AGI 厂商客户提供 AI 网关的积累沉淀,开源了大量 AI 原生的网…

普天同悲

谨记,谨记。世人若学我,当如堕魔道。

Denoising Diffusion Implicit Models(去噪隐式模型)

DDPM有一个很麻烦的问题,就是需要迭代很多步,十分耗时。有人提出了一些方法,比如one-step dm等等。较著名、也比较早的是DDIM。 原文:https://arxiv.org/pdf/2010.02502 参考博文:https://zhuanlan.zhihu.com/p/666552214?utm_id=0 DDIM假设 DM假设 ddim给出了一个新的扩…

20222408 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 1.1本周学习内容 本次实验中,学习的重点是后门的实现与启动方式,学习内容还有后门的定义、原理以及可能影响,netcat、socat、MSF meterpreter软件的应用。 1.2实验内容简述使用netcat获取主机操作Shell,利用cron启动一项任务 使用socat获取主机操作Shell, 利用创…