JumpServer双机备份方案

简介:

一、写在前头


由于jumpserver目前不支持双机热备,因此本方案采用数据库以及系统用户数据备份实现,主要有以下方面:

1、MySQL数据库主主同步

2、系统文件:/etc/passwd /etc/shaow /etc/group文件同步(rsync+crontab)

3、jumpserver相关用户以及key文件:jumpserver/keys同步(rsync+crontab)

4、主服务器:10.44.131.212、从服务器:10.169.210.223

二、rsync配置


1、主服务器部分


①、关闭SELINUX 编辑防火墙配置文件/etc/selinux/config如下:

        #SELINUX=enforcing #注释掉

        #SELINUXTYPE=targeted #注释掉

        SELINUX=disabled #增加

    执行setenforce 0 立即生效


    开启防火墙tcp 873端口,编辑防火墙配置文件/etc/sysconfig/iptables,添加以下内容:

        -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

    重启防火墙使配置生效 /etc/init.d/iptables restart 


②、安装Rsync服务端软件

    yum install rsync -y


三、创建rsyncd.conf配置文件/etc/rsyncd.conf,添加以下内容:

    uid = root

    gid = root

    use chroot = no

    max connections = 4

    pid file = /var/run/rsyncd.pid

    lock file = /var/run/rsync.lock

    log file = /var/log/rsyncd.log


    [jumpserver]

    path = /data/jumpserver/keys

    #ignore errors

    read only = false

    list = false

    hosts allow = 10.169.210.223

    hosts deny = 0.0.0.0/32

    auth users = juser

    secrets file = /etc/rsync.pass


    [home]

    path = /home

    #ignore errors

    read only = false

    list = false

    hosts allow = 10.169.210.223

    hosts deny = 0.0.0.0/32

    auth users = juser

    secrets file = /etc/rsync.pass


    [sysfile]

    path = /etc/

    #ignore errors

    read only = false

    list = false

    hosts allow = 10.169.210.223

    hosts deny = 0.0.0.0/32

    auth users = juser

    secrets file = /etc/rsync.pass



④、创建用户认证文件/etc/rsync.pass添加以下内容

    juser:juser20160125 #格式,用户名:密码,可以设置多个,每行一个用户名:密码

    修改配置文件权限:

    chown root.root /etc/rsync.pass

    chmod 600 /etc/rsync.pass


⑤、启动rsync

    /usr/bin/rsync --daemon --config=/etc/rsyncd.conf


2、从服务器部分


①、创建认证密码文件 /etc/rsync.passc

    修改配置文件权限:

    chown root.root /etc/rsync.passc

    chmod 600 /etc/rsync.passc


②、执行数据同步测试操作:

    rsync -avH --port=873 --progress --delete juser@10.44.131.212:jumpserver --password-file=/etc/rsync.passc /data/jumpservertest/

    (命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--exclude "logs/" 表示不对/www/logs目录下的文件进行备份。--exclude "conf/ssl.*/"表示不对/www/conf/ssl.*/目录下的文件进行备份。

    juser@10.44.131.212:jumpserver表示对该命令是对服务器10.44.131.212中的jumpserver模块进行备份)

三、MySQL数据库主主配置


MySQL配置文件(主)

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

wait_timeout=864000

interactive_timeout=864000

server-id = 1

log-bin=mysql-bin

binlog_format=mixed

expire_logs_days=5

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


MySQL配置文件(从)

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

server-id = 2

log-bin=mysql-bin

binlog_format=mixed

expire_logs_days=5

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


修改配置文件后,重启MySQL:service mysqld restart


分别使用root用户登录两台数据库,执行以下密令进行主从复制授权:

GRANT REPLICATION SLAVE ON *.* TO repl@'10.169.210.223' IDENTIFIED BY 'xiaoniu0125';

GRANT REPLICATION SLAVE ON *.* TO repl@'localhost' IDENTIFIED BY 'xiaoniu0125';

GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'xiaoniu0125';

flush privileges;


导出数据库数据,并上传到从服务器上执行数据导入:

mysqldump --single-transaction -h127.0.0.1 -ujumpserver -p jumpserver > jumpserver.sql

scp jumpserver.sql root@10.169.210.223:/data/


使用jumpserver用户登录从数据库执行数据导入:source /data/jumpserver.sql


使用root用户登录主数据库查看主数据库当前二进制日志信息:show master status \G


使用root用户登录从数据库,执行以下数据同步命令:

change master to master_host='10.44.131.212', master_port=3306, master_user='repl', master_password='xiaoniu0125', master_log_file='mysql-bin.000004', master_log_pos=188397822;


启动数据同步:start slave


查看数据同步状态:show slave status \G


使用root用户登录从数据库查看主数据库当前二进制日志信息:show master status \G


使用root用户登录主数据库,执行以下数据同步命令:

change master to master_host='10.169.210.223', master_port=3306, master_user='repl', master_password='xiaoniu0125', master_log_file='mysql-bin.000004', master_log_pos=188397822;


启动数据同步:start slave


查看数据同步状态:show slave status \G

四、系统用户相关文件、jumpserver相关用户以及key文件备份


1、登录从服务器备份/etc/passwd /etc/shaow /etc/group文件

mv /etc/passwd /etc/passwd_bak

mv /etc/shaow /etc/shaow_bak

mv /etc/group /etc/group_bak


2、登录主服务器并复制/etc/passwd /etc/shaow /etc/group 到从服务器

scp /etc/passwd root@10.169.210.223:/etc/

scp /etc/shaow root@10.169.210.223:/etc/

scp /etc/group root@10.169.210.223:/etc/


3、登录主服务器并复制/home路径下所有文件 到从服务器

scp -r /home/* root@10.169.210.223:/home/


3、登录主服务器并复制jumpserver下所有文件 到从服务器

scp -r /jumpserver root@10.169.210.223:/data/


4、执行jumpserver安装

    yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz

    cd jumpserver/install && pip install -r requirements.txt

    python install.py


5、修改相关文件权限,创建change.sh,内容如下:

    #!/bin/sh

    users=`ls -l /data/jumpserver/keys/user | grep pub | awk '{print $9}' | awk -F . '{print $1}'`

    echo $users

    for user in $users

        do

            echo /home/$user

            echo /data/jumpserver/keys/user/$user*

            /usr/bin/id $user >& /dev/null

            result=$?

            if [ $result == 0 ];then

                echo "开始修改文件用户权限!"

                chown $user.$user /home/$user

                chown $user.$user /data/jumpserver/keys/user/$user*

                result=`echo $?`

                if [ $result == 0 ];then

                    echo [$now_time] "修改用户" $user "目录权限成功" >> /data/jumpserver/logs/jump_cron.log

                else

                    echo [$now_time] "修改用户" $user "目录权限失败" >> /data/jumpserver/logs/jump_cron.log

                    exit 0

                fi

            else

                echo [$now_time] $user "用户不存在!" >> /data/jumpserver/logs/jump_cron.log

            fi

        done

    exit 0

    执行改脚本:sh ./change.sh


6、修改日志文件权限:chmod 777 /data/jumpserver/logs/jumpserver.log


7、创建文件定时同步脚本,jump_cron.sh,内容如下:

    #!/bin/sh

    ##获取当前系统时间

    now_time=`date "+%Y-%m-_%d %H:%M:%S"`


    ##开始同步jumpserve用户以及keys数据

    /usr/bin/rsync -avH --port=873 --progress --delete juser@10.44.131.212::jumpserver --password-file=/etc/rsync.passc /data/jumpserver/keys

    result=`echo $?`

    if [ $result == 0 ];then

        echo [$now_time] "同步jumpserve用户以及keys数据成功" >> /data/jumpserver/logs/jump_cron.log

    else

        echo [$now_time] "同步jumpserve用户以及keys失败" >> /data/jumpserver/logs/jump_cron.log

        exit 0

    fi

    ##同步系统用户数据

    /usr/bin/rsync -avH --port=873 --progress --delete juser@10.44.131.212::home --password-file=/etc/rsync.passc /home

    result=`echo $?`

    if [ $result == 0 ];then

        echo [$now_time] "同步系统用户数据成功" >> /data/jumpserver/logs/jump_cron.log

    else

        echo [$now_time] "同步系统用户失败" >> /data/jumpserver/logs/jump_cron.log

        exit 0

    fi


    ##同步shaow passwd group文件

    /usr/bin/rsync -avH --port=873 --progress --delete --include 'shaow' --include 'passwd' --include 'group' --exclude '*' juser@10.44.131.212::sysfile --password-file=/etc/rsync.passc /etc/

    result=`echo $?`

    if [ $result == 0 ];then

        echo [$now_time] "同步shaow passwd group文件成功" >> /data/jumpserver/logs/jump_cron.log

    else

        echo [$now_time] "同步shaow passwd group文件失败" >> /data/jumpserver/logs/jump_cron.log

        exit 0

    fi


    ##获取当前用户信息用于修改相关文件权限

    users=`ls -l /data/jumpserver/keys/user | grep pub | awk '{print $9}' | awk -F . '{print $1}'`

    echo $users

    for user in $users

        do

            echo /home/$user

            echo /data/jumpserver/keys/user/$user*

            /usr/bin/id $user >& /dev/null

            result=$?

            if [ $result == 0 ];then

                echo "开始修改文件用户权限!"

                chown $user.$user /home/$user

                chown $user.$user /data/jumpserver/keys/user/$user*

                result=`echo $?`

                if [ $result == 0 ];then

                    echo [$now_time] "修改用户" $user "目录权限成功" >> /data/jumpserver/logs/jump_cron.log

                else

                    echo [$now_time] "修改用户" $user "目录权限失败" >> /data/jumpserver/logs/jump_cron.log

                    exit 0

                fi

            else

                echo [$now_time] $user "用户不存在!" >> /data/jumpserver/logs/jump_cron.log

            fi

        done

    exit 0

8、创建定时任务,5分钟执行一次数据同步操作crontab -e:

   */5 * * * * /bin/sh /data/jumpserver/jump_cron.sh >> /dev/null 2>&1


9、启动jumpserver:

    ./service.sh start





     本文转自aaron428 51CTO博客,原文链接:http://blog.51cto.com/aaronsa/1740524,如需转载请自行联系原作者



相关文章
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
66355 2
详解步进电机的结构和三种控制模式
详解步进电机的结构和三种控制模式
1012 0
详解步进电机的结构和三种控制模式
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
171742 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
PHP 数据库 数据安全/隐私保护
|
12月前
|
数据采集 边缘计算 缓存
从流量到留量:ESA 安全加速守护零售行业交易全链路
零售业正经历数字技术驱动的深度变革,电商蓬勃发展,消费持续升级。阿里云边缘云推出零售交易行业解决方案,通过分布式边缘计算、智能路由与安全防护,助力企业应对跨地域交易挑战,实现安全高效发展。
619 14
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
740 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
传感器 人工智能 运维
吃得安心靠AI?聊聊AI在食品供应链安全里的“神操作”
吃得安心靠AI?聊聊AI在食品供应链安全里的“神操作”
534 6
|
缓存 JavaScript Windows
手把手教你在Windows下搭建Vue开发环境
在Windows下搭建Vue开发环境:
2362 0
手把手教你在Windows下搭建Vue开发环境
|
人工智能 安全 开发者
OpenDevin出技术报告了,大模型Agent开发者必读
【8月更文挑战第25天】近期发布的OpenDevin技术报告备受瞩目,此报告由来自伊利诺伊大学香槟分校、卡内基梅隆大学等顶尖学府的研究员联合撰写。OpenDevin作为一个社区驱动的开放平台,旨在为AI软件开发者提供一个模拟通用代理的强大工具。平台采用事件流架构促进用户界面、代理与环境间的交互,并构建了包含沙盒操作系统和网络浏览器的任务执行环境。此外,它支持多代理协同作业及一系列评估标准,目前已涵盖15个评估基准。作为拥有160多位贡献者的社区项目,OpenDevin展现了极高的灵活性和安全性,同时也面临着技术门槛和进一步研发等挑战。
571 2
|
安全 关系型数据库 MySQL
MySQL非root安装-初始化数据库时unknown variable ‘defaults-file=**/my.cnf‘
解决安装过程中出现的问题通常需要仔细地检查错误日志、配置文件和执行命令,保证各项配置设置的精确无误是顺利完成安装的关键。通过上述的步骤分析和解决方案,非root用户安装MySQL时遇到"unknown variable 'defaults-file=**/my.cnf'"的问题应该可以得到妥善的解决。
1455 0