一、项目需求说明

某公司有多台服务器,里面的数据很重要,如果磁盘坏了,数据就会丢失,所以公司要求把重要服务器数据备份以便出现问题时可以进行恢复,要求:每天晚上00点整在所有服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上)

二、具体需求规划

所有服务器的备份目录必须一致 /backup/

要备份的系统配置文件包括但不限于:

一、定时任务服务器的配置文件(/var/spool/cron/root 适合web服务器和nfs服务器)

二、开机自启动服务的配置文件(/etc/rc.local 适合web和nfs服务器)

三、日常脚本目录(/server/scripts)

四、防火墙iptables的配置文件 (/etc/init.d/iptables)

1、web服务器站点目录例如(/var/html/www)

2、web服务器访问日志路径例如(/app/logs)

3、web服务器保留打包后的7天的备份数据即可(因为本地服务器的磁盘会满)

4、备份服务器上,保留近180天的备份数据,6个月前的数据清除 每周一的所有数据进行保留

5、备份服务器上,要按照备份服务器的内网IP为目录保存备份,备份的文件按照时间名字保存

6、需要保存的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把本分成功及失败的结果信息发送到系统管理员邮箱中

三、服务器信息

服务器说明

外网IP

内网IP

服务器主机名

Nginx web服务器

10.0.0.8/24

172.16.1.8/24

web01

NFS存储服务器

10.0.0.31/24

172.16.1.31/24

nfs01

rsync备份服务器

10.0.0.41/24

172.16.1.41/24

backup

四、项目实战部署—搭建rsync服务端(backup)

1、rsync主配置文件

cat >/etc/rsyncd.conf<<EOF
#rsync server#
#created by yanxinjiang --
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections =
timeout =
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 = 172.16.1.0/
hosts deny = 0.0.0.0/
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
EOF

2、创建统一备份数据的目录,添加备份目录管理用户

useradd -s /sbin/nologin -M rsync
mkdir /backup -p
chown -R rsync.rsync /backup/

3、创建用户认证文件

echo "rsync_backup:123456" >/etc/rsync.password
chmod /etc/rsync.password

4、启动rsync服务并设置开机自启动

rsync --daemon
lsof -i:
echo "rsync --daemon" >>/etc/rc.local

5、rsync客户端创建用户认证文件

echo "" >/etc/rsync.password
chmod /etc/rsync.password

6、客户端验证rsync服务推送功能

①nfs01服务器验证
[root@nfs01 backup]#rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
②web01服务器验证
[root@web01 ~]#rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

7、rsync服务脚本一键部署

#!/bin/sh
. /etc/init.d/functions
#created by yanxinjiang --
BakPath=/backup
Passwd=
IP=172.16.1.0/
Port=`netstat -lntup|grep |wc -l`
Create_file(){
cat >/etc/rsyncd.conf<<EOF
uid = rsync
gid = rsync
use chroot = no
max connections =
timeout =
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 = $IP
hosts deny = 0.0.0.0/
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = $BakPath
EOF
if [ ! -f /etc/rsyncd.conf ]
then
action "rsync配置" /bin/false
exit
elif [ ! -f /usr/bin/rsync ]
then
action "rsync命令" /bin/false
exit
fi
}
Create_user(){
id rsync &>/dev/null
if [ $? -ne ];then
useradd rsync -s /sbin/nologin -M
elif [ ! -d $BakPath ];then
mkdir -p $BakPath
chown -R rsync.rsync $BakPath
echo "rsync_backup:$Passwd" >/etc/rsync.password
/bin/chmod /etc/rsync.password
fi
}
Start_rsync(){
if [ $Port -lt ];then
rsync --daemon
action "Starting rsync..." /bin/true
else
action "Rsync is running..." /bin/true
fi
}
main(){
Create_file
Create_user
Start_rsync
}
main

五、rsync客户端编写备份脚本(web01)

#!/bin/sh
. /etc/init.d/functions
Backup_Dir=/backup
Passwd=
Passwd_File=/etc/rsync.password
IP=`hostname -I|awk '{print $2}'`
Remote_IP=172.16.1.41
#no. create backup dir
Create_dir(){
[ ! -d ${Backup_Dir}/$IP ] && mkdir -p ${Backup_Dir}/$IP
echo "$Passwd" >$Passwd_File && chmod $Passwd_File
}
#no. compress system data to backup_dir
Backup_File(){
cd / &&\
tar zchf ${Backup_Dir}/$IP/sysconfig_$(date +%F).tar.gz var/spool/cron/root etc/rc.local server/scripts etc/sysconfig/iptables &&\
tar zchf ${Backup_Dir}/$IP/html_$(date +%F).tar.gz application/nginx/html/ &&\
tar zchf ${Backup_Dir}/$IP/conf_$(date +%F).tar.gz application/nginx/conf/
}
#no. push finger info data to remote backup
Push_date(){
find ${Backup_Dir}/$IP/ -type f -name "*.tar.gz"|xargs md5sum >${Backup_Dir}/$IP/zhiwen_$(date +%F).txt
rsync -az ${Backup_Dir}/$IP "rsync_backup"@${Remote_IP}::backup --password-file=${Passwd_File}
if [ $? -eq ];then
action "backup" /bin/true
else
action "backup" /bin/false
fi
find ${Backup_Dir}/$IP -type f -name "*.tar.gz" -mtime +|xargs rm -f
if [ $? -eq ];then
action "rm" /bin/true
else
action "rm" /bin/false
fi
}
main(){
Create_dir
Backup_File
Push_date
}
main

六、rsync客户端编写备份脚本(nfs01)

#!/bin/sh
. /etc/init.d/functions
Backup_Dir=/backup
Passwd=
Passwd_File=/etc/rsync.password
IP=`hostname -I|awk '{print $2}'`
Remote_IP=172.16.1.41
Create_dir(){
[ ! -d ${Backup_Dir}/$IP ] && mkdir -p ${Backup_Dir}/$IP
echo "$Passwd" >$Passwd_File && chmod $Passwd_File
}
Backup_File(){
cd / &&\
tar zchf ${Backup_Dir}/$IP/sysconfig_$(date +%F).tar.gz var/spool/cron/root etc/rc.local server/scripts etc/sysconfig/iptables
}
Push_date(){
find ${Backup_Dir}/$IP/ -type f -name "*.tar.gz"|xargs md5sum >${Backup_Dir}/$IP/zhiwen_$(date +%F).txt
rsync -az ${Backup_Dir}/$IP "rsync_backup"@${Remote_IP}::backup --password-file=${Passwd_File}
if [ $? -eq ];then
action "backup" /bin/true
else
action "backup" /bin/false
fi
find ${Backup_Dir}/$IP -type f -name "*.tar.gz" -mtime +|xargs rm -f
if [ $? -eq ];then
action "rm" /bin/true
else
action "rm" /bin/false
fi
}
main(){
Create_dir
Backup_File
Push_date
}
main

七、rsync服务端编写检验脚本(backup)

#!/bin/sh
. /etc/init.d/functions
BakPath=/backup
Check_backup(){
if [ ! -d $BakPath ]
then
exit
else
find $BakPath -type f -name "zhiwen*.txt"|xargs md5sum -c >$BakPath/check_info.txt
mail -s "check_data mail" @qq.com <$BakPath/check_info.txt &>/dev/null
find $BakPath -type f -name "*.tar.gz" -mtime + ! -name "*1.tar.gz" |xargs rm -f
fi
if [ $? -eq ];then
action "check" /bin/true
else
action "check" /bin/false
fi
}
Check_backup

八、编写全网备份定时任务

1.nfs01服务器定时任务编写

#nfs01 backup data info-cron
* * * /bin/sh /server/scripts/nfs_backup.sh &>dev/null

2.web01服务器定时任务编写

#web01 backup data info-cron
* * * /bin/sh /server/scripts/web_backup.sh &>dev/null

3.backup服务器定时任务编写

# backup: backup data info cron
* * * /bin/sh /server/scripts/backup_server.sh &>/dev/null

linux运维、架构之路-全网备份项目方案的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  3. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  4. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  5. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  6. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  7. Linux运维知识之linux shell date 用当天时间做备份文件名

    本文主要向大家介绍了Linux运维知识之linux shell date 用当天时间做备份文件名,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. #!/bin/bash #dat ...

  8. linux运维工程师面试题收集

    面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...

  9. Linux运维工程师成长必经之路

    本路线图是从0基础开始,全方位由浅入深,按照多年Linux培训经验和优秀教学方法制定的学习思路和学习方法,路线图包括初级入门.中级进阶.高级提升和资深冲刺四个阶段,每阶段对应着不同优秀的课程和学习方法 ...

随机推荐

  1. yield(),sleep()以及wait()的区别

    往往混淆了这三个函数的使用. 从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务. 但是当前正在被服务的 ...

  2. ARTS-3

    ARTS的初衷 Algorithm:主要是为了编程训练和学习.每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard).进行编程训练,如果不训练你看再多的算法 ...

  3. IntelliJ IDEA调试时,格式化显示日期变量

    格式化前: 格式化后: new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this); 入门常用知识: Ct ...

  4. C++:输入n个数,通过气泡法从小到大排列顺序(掌握不熟,还请谅解)

    #include<iostream> using namespace std; int main() { int n; cin>>n; int a[n]; int i,j,t; ...

  5. 数组转字符串 java8

    public static String arrayToString(int[] arr) { // 1,2,3... StringBuffer sb = new StringBuffer(); fo ...

  6. JS案例经验二

    一 关键词:鼠标事件的触发 可以在函数中指定让鼠标事件自动触发,而不是必须要鼠标滑过才触发,例如: main.onmouseover(); // 可以把该语句看做是鼠标滑过的模拟动作 main是DOM ...

  7. Nginx工作机制

    Nginx分为单工作进程和多工作进程两种模式.通常采用1个master+多个worker进程配合异步非阻塞的工作机制.master进程主要负责管理自身和下属的worker进程,worker负责处理请求 ...

  8. 一张图说明移动前端开发与web前端开发的区别

  9. 表单提交 multipart/form-data 和 x-www-form-urlencoded的区别

    表单提交表单有两种提交方式,POST和GET.通常我们会使用POST方式,一是因为形式上的安全 :二是可以上传文件. 我之前经常忽略掉表单的编码类型,觉得它特别长比较难记,而且不设置也似乎不影响什么. ...

  10. svn版本服务器的搭建和简单使用

    ⼀ 服务器搭建篇 1 在”应⽤用程序”⽂文件夹下,找到”实⽤用⼯工具”,打开”终端”APP 2 运⾏行svnadmin create repository,运⾏行完毕之后,可以在当前⺫⽬目录下找 到⼀ ...