前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lsyncd搭建同步镜像-远程实时同步备份

Lsyncd搭建同步镜像-远程实时同步备份

原创
作者头像
Vicson
修改2020-03-26 10:30:09
2.1K0
修改2020-03-26 10:30:09
举报
文章被收录于专栏:日常技术日常技术

背景:因自研日志系统改造,为容灾需要,需将主日志机的日志文件完整备份到备机,而公司内部并没有相应的系统。经过调研,我们的应用场景很简单,logstash也是可以满足我们的需求,但太重了点,后运维推荐使用lsyncd,故将使用中遇到的坑整理处理

1. Lsyncd是啥

    lsyncd会密切监测本地服务器上的参照目录,当发现目录下有文件或目录变更后,立刻通知远程服务器,并通过rsync 或rsync+ssh方式实现文件同步。这样做的好处就是,你可以利用Lsyncd搭建一个VPS同步镜像,应用场景例如CDN镜像、网站数据备份、网站搬家等等

2. 安装Lsyncd

    我们的服务器比较简单,基于centos的yum安装即可

代码语言:javascript
复制
yum install lsyncd

 之后修改配置文件/etc/lsyncd.conf,对应的参数说明可以参考官方文档 具体如下:

代码语言:javascript
复制
settings {
    logfile      = "/var/log/lsyncd/lsyncd.log",
    statusFile   = "/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",
    maxProcesses = 1000,
    maxDelays    = 200,
}

sync {
    default.rsync,
    source = "/tmp/logs/",
    target = "user00@xxx.xxx.xxx.xxx::backup",
    delay  = 100,
    rsync  = {
        binary    = "/usr/bin/rsync",
        password_file = "/etc/rsyncd.passwd",
        archive   = true,
        compress = false,
        verbose   = true
    }
}

 之后运行测试

代码语言:javascript
复制
lsyncd -log Exec /etc/lsyncd.conf

但是在使用的过程中遇到个问题

代码语言:javascript
复制
Error: error preparing /etc/lsyncd.conf: Parameter "rsync.password_file" unknown. (if this is not a typo add it to checkgauge)

 后来google告诉我这是一个bug,开发者说2.1.2已经修复,但是github上有人反馈2.1.4版本还是有问题,而我们的TLinux1.2默认用yum安装的话就是2.1.4的,于是自己卸载升级为2.1.5,后面附上编译安装流程,问题解决。

之后新建密码文件/etc/rsyncd.passwd

代码语言:javascript
复制
test1234

 执行如下命令进行测试

代码语言:javascript
复制
/usr/bin/rsync --delete -gvsolptD --password-file=/etc/rsyncd.passwd-r /tmp/logs/user00@::backup/

设置文件的owner为root,并将权限设置为600,否则会提示

代码语言:javascript
复制
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

3. Rsync client备机启动

    拿我们正常的机器应该都默认安装了rsync,只需要启动一个监听服务即可。

修改/etc/rsyncd.conf文件

代码语言:javascript
复制
uid=root
gid=root
use chroot=yes
max connections=100
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
timeout=600
port=873
secrets file=/etc/.rsyncd.secrets

[app]
path=//app
comment=rsync files
read only=no
list=yes
auth users=user00

[backup]
path=/tmp/backup
read only=no
list=yes
auth users=user00

 添加密码文件/etc/.rsyncd.secrets

代码语言:javascript
复制
user00:test1234
user01:test12345

设置文件的owner为root,并将权限设置为600

执行启动,启动address为备机的ip,即执行该命令的机器ip

代码语言:javascript
复制
/usr/bin/rsync --address= --config=/etc/rsyncd.conf --daemon

最后启动

代码语言:javascript
复制
service lsyncd start

修改文件可以看到日志文件/var/log/lsyncd/lsyncd.log

日志详情
日志详情

附录:Lsyncd 2.1.5编译安装

代码语言:javascript
复制
yum install lua-devel
tar -xzf lsyncd-2.1.5.tar.gz 
cd lsyncd-2.1.5/
./configure --prefix=/usr/bin
make && make install

lsyncd依赖lua,如果没有lua-devel,会有如下提示

代码语言:javascript
复制
configure: error: Need a Lua toolchain with matching versions ('lua' library and 'lua' and 'luac' programs)

 添加/etc/lsyncd.conf文件

代码语言:javascript
复制
settings {
    logfile      = "/var/log/lsyncd/lsyncd.log",
    statusFile   = "/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",
    maxProcesses = 1000,
    maxDelays    = 200,
}

sync {
    default.rsync,
    source = "/tmp/logs/",
    target = "user00@xxx.xxx.xxx.xxx::backup",
    delay  = 100,
    rsync  = {
        binary    = "/usr/bin/rsync",
        password_file = "/etc/rsyncd.passwd",
        archive   = true,
        compress = false,
        verbose   = true
    }
}

 添加启动service文件

代码语言:javascript
复制
vi /etc/init.d/lsyncd
代码语言:javascript
复制
#!/bin/bash
#
# chkconfig: - 85 15
# description: Lightweight inotify based sync daemon
#
# processname:  lsyncd
# config:       /etc/lsyncd.conf
# config:       /etc/sysconfig/lsyncd
# pidfile:      /var/run/lsyncd.pid

# Source function library
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"

if [ -e /etc/sysconfig/lsyncd ]; then
  . /etc/sysconfig/lsyncd
fi

RETVAL=0

prog="lsyncd"
thelock=/var/lock/subsys/lsyncd

start() {
	[ -f /etc/lsyncd.conf ] || exit 6
        echo -n $"Starting $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                daemon /usr/bin/lsyncd $LSYNCD_OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch $thelock
        fi;
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc lsyncd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f $thelock
        fi;
        echo
        return $RETVAL
}

reload(){
        echo -n $"Reloading $prog: "
        killproc lsyncd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

condrestart(){
    [ -e $thelock ] && restart
    return 0
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        condrestart
        ;;
  status)
        status lsyncd
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
        RETVAL=1
esac

exit $RETVAL

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Lsyncd是啥
  • 2. 安装Lsyncd
  • 3. Rsync client备机启动
  • 附录:Lsyncd 2.1.5编译安装
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档