概述 {#heading-1}
本文章主要介绍主备部署时,主备 JumpServer 的录像同步解决方案。
一、同步脚本 {#heading-2}
该方式适用于客户允许主备之间配置免密登录方式。
录像同步脚本
#!/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 点半执行备份)
主备节点均设置定时任务,互相备份即可。
二、以守护进程的方式传输数据,同步录像 {#heading-3}
该方式适用于客户不允许主备 JumpServer 之间部署免密登录。
该方式适合将备服务器作为 rsync 的服务端,主服务器作为 rsync 的客户端。定时将主服务器也就是 rsync 的客户端的录像文件推送到备服务器也就是 rsync 的服务端。(主要考虑平时为主服务器提供服务,rsync 服务端部署在主上,可能给主造成不必要的压力)
守护进程模式搭建 {#heading-4}
如果开启了防火墙,需要打开 873 端口。
rsync 客户端与服务端均需要安装 rsync 以及进行时间同步。
yum install ntpdate -y
ntpdate cn.pool.ntp.org
hwclock -w
date
服务端 {#heading-5}
#确认 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
`
客户端 {#heading-6}
#创建密码文件
[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
`
测试同步数据 {#heading-7}
将 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
测试成功!
定时任务 {#heading-8}
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`