知识库

Loading

0 评论 / 0 点赞 / 110 阅读  最佳实践 最后更新: 2022-07-26 作者: 飞致云 总字数: 3461

概述

本文章主要介绍主备部署时,主备JumpServer的录像同步解决方案。

一、同步脚本

该方式适用于客户允许主备之间配置免密登录方式。
录像同步脚本

#!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出

pcount=$#

if((pcount==0)); 

then

echo "no args";

exit;

fi 

p1=$1 #远程要备份的目录

remotehost=$2 #远程主机IP

dir_p1=`dirname $p1`

PINGRET=$( ping $remotehost  -c 4 | grep "Unreachable" )

if [[ "$PINGRET" == "" ]]

then

  # 实现远程服务器到本机的增量备份,前提得实现本机到远程服务器的免密登录&本机安装rsync软件包

rsync -vzrtopg --progress  -e 'ssh -p 22' root@$remotehost:$p1  $dir_p1/replay

else

  echo "ping failed,please check the network of remotehost";

  crontab -r;#删除定时任务

  exit;

fi

创建定时任务,定时执行该脚本即可同步。同步命令中添加–delete可能会导致丢失部分录像,不建议加–delete选项。
30 2 * * 7 sh rsync.sh /opt/jumpserver/core/data/media/replay 主IP (每周日晚上2点半执行备份)
主备节点均设置定时任务,互相备份即可。

二、以守护进程的方式传输数据,同步录像

该方式适用于客户不允许主备JS之间部署免密登录。
该方式适合将备服务器作为rsync的服务端,主服务器作为rsync的客户端。定时将主服务器也就是rsync的客户端的录像文件推送到备服务器也就是rsync的服务端。(主要考虑平时为主服务器提供服务,rsync服务端部署在主上,可能给主造成不必要的压力)

守护进程模式搭建

如果开启了防火墙,需要打开873端口。
rsync客户端与服务端均需要安装rsync以及进行时间同步。

yum install ntpdate -y
ntpdate cn.pool.ntp.org
hwclock -w
date

服务端

#确认rsync已经安装
[root@a-server ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
 
#修改rsync的配置文件 [root@a-server ~]# cp -p /etc/rsyncd.conf{,.bak}
[root@a-server ~]# vim /etc/rsyncd.conf
[root@a-server ~]# grep -vE "^#|^$" /etc/rsyncd.conf
uid = root  #用户
gid = root   #组
use chroot = no  #程序安全设置
max conections = 200   #客户端连接数
timeout = 300  #超时时间
pid file = /var/run/rsyncd.pid   #进程号文件位置
lock file = /var/run/rsync.lock   #进程锁
log file = /var/run/rsyncd.log   #日志文件位置
[backup]
path = /opt/jumpserver/core/data/media/replay/   #使用目录
ignore errors     #有错误时忽略
read only = false   #可读可写
list = false   #阻止远程列表(不让远程方式查看服务端有什么)
hosts allow = 192.168.10.0/24   #允许IP
hosts deny = 0.0.0.0/32     #阻止IP
auth users = rsync_backup   #虚拟用户
secrets file = /etc/rsync.password    #存放用户和密码的文件 #创建共享目录以及添加rsync程序用户
 
[root@a-server ~]# useradd -M -s /sbin/nologin rsync
[root@a-server ~]# cat /etc/passwd | grep rsync
rsync:x:1000:1000::/home/rsync:/sbin/nologin
[root@a-server ~]# cat /etc/group | grep rsync
rsync:x:1000:
 
#启动服务并查看
[root@a-server ~]# rsync --daemon
[root@a-server ~]# netstat -antup | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7897/rsync        
tcp6       0      0 :::873                  :::*                    LISTEN      7897/rsync
 
修改共享目录的属主以及权限 (该操作不会影响录像形成,已测试)
[root@a-server ~]# chown -R rsync:rsync /opt/jumpserver/core/data/media/replay/
[root@a-server ~]# chmod -R 755 /opt/jumpserver/core/data/media/replay/
 
#创建rsync虚拟账户和密码
[root@a-server ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@a-server ~]# cat /etc/rsync.password
rsync_backup:123456
 
#将账户密码文件权限设置为600(重要),并将rsync启动作为开机自启
[root@a-server ~]# chmod 600 /etc/rsync.password
[root@a-server ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 2月  14 11:38 /etc/rsync.password
[root@a-server ~]# echo "rsync --daemon" > /etc/rc.local
[root@a-server ~]# tail -1 /etc/rc.local
rsync --daemon

客户端

#创建密码文件
[root@b-server ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
[root@b-server ~]# echo "123456" > /etc/rsync.password
  
#将密码文件的权限设置为600
[root@b-server ~]# chmod -R 600 /etc/rsync.password
[root@b-server ~]# ll /etc/rsync.password
-rw-------. 1 root root 7 12月 29 22:04 /etc/rsync.password 

测试同步数据

将rsync客户端(主服务器)的录像文件推送到rsync服务端(备服务器)的共享目录中
rsync avzP /opt/jumpserver/core/data/media/replay/ rsync_backup@备服务器的IP::backup - password-file=/etc/rsync.password
测试成功!
将rsync服务端(备服务器)的共享目录下的全部内容同步到客户端的录像文件存放地
rsync avzP rsync_backup@备服务器的IP::backup /opt/jumpserver/core/data/media/replay/ - password-file=/etc/rsync.password
测试成功!

定时任务

crontab -e

0 2 * * 7 rsync avzP /opt/jumpserver/core/data/media/replay/ rsync_backup@备服务器的IP::backup - password-file=/etc/rsync.password #每周日晚上两点主JS同步到备JS

30 2 * * 7 rsync avzP rsync_backup@备服务器的IP::backup  /opt/jumpserver/core/data/media/replay/ - password-file=/etc/rsync.password  #每周日晚上两点半备JS同步到主JS
文章目录
其他资源