Linux集群全网服务器数据备份解决方案实战视频操作记录

老男孩视频是2015年3月14号,4个视频全部看完了,和作业有点出路,但是大部分涉及了

https://edu.51cto.com/course/3497.html

主要是邮件发送的操作不一样,流程不难的

参考文档:第8关50-100台规模集群全网数据备份解决方

完整路径:E:\老男孩Linux运维课程视频\feiq\Recv Files\69预习视频\老男孩教育脱产63期-day35-综合架构实时同步\章节资料汇总\复习资料

文本文件:老男孩教育63期脱产班-day34-综合架构全网备份篇


规划:
1、第一个里程碑,数据同步服务器rsync服务


backup server上部署rsync,并且在Web服务器可以推送成功


2、第二个里程碑本地打包脚本实现


webserver

3、第三个里程碑配置定时任务

02-第一个里程碑数据备份rsync实践

配置rsync备份服务的服务端

0100正式进行操作

在备份服务器backup上配置备份服务rsync

[root@backup ~]# ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:f8:ce brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.41/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::8c8d:c31b:a121:ca62/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::d2e4:6879:ac85:c625/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:f8:d8 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.41/16 brd 172.16.255.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::e654:55e2:8c88:ecfb/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::5e65:529b:4fae:7fc3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@backup ~]# hostname
backup

对配置文件进行备份

[root@backup ~]# ls  /etc/rsyncd.conf*
/etc/rsyncd.conf  /etc/rsyncd.conf.bak01
[root@backup ~]# cp  /etc/rsyncd.conf{,.bak}
[root@backup ~]# ls  /etc/rsyncd.conf{,.bak}
/etc/rsyncd.conf  /etc/rsyncd.conf.bak
[root@backup ~]# ls  /etc/rsyncd.conf*
/etc/rsyncd.conf  /etc/rsyncd.conf.bak  /etc/rsyncd.conf.bak01
[root@backup ~]# ll  /etc/rsyncd.conf*
-rw-r--r-- 1 root root 469 Jan 11 14:59 /etc/rsyncd.conf
-rw-r--r-- 1 root root 592 Jan 11 14:58 /etc/rsyncd.conf.bak
-rw-r--r-- 1 root root 458 Jan  8 10:21 /etc/rsyncd.conf.bak01
[root@backup ~]# cat  /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##

uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
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/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment="backup dir by oldboy"
path=/backup

修改后的情况

创建虚拟用户认证登录的文件

要根据配置文件定义

auth users=rsync_backup

secrets file=/etc/rsync.password

注意此文件是来源于配置文件的,最好不要手敲,很可能会出错

[root@backup ~]# cat  /etc/rsync.password 
rsync_backup:oldboy123

修改文件权限

使用tab补齐文件名称

文件权限为600

[root@backup ~]# ll  /etc/rsync.password
-rw------- 1 root root 24 Jan  8 10:34 /etc/rsync.password

创建目录

不管有没有都加上-p

[root@backup ~]# ls /backup/
[root@backup ~]# tree  /backup/
/backup/

0 directories, 0 files
[root@backup ~]# mkdir  -p  /backup/
[root@backup ~]# ls /backup/

创建用户

注意看看配置文件的配置进行操作会更好

[root@backup ~]# id  rsync
uid=2002(rsync) gid=2003(rsync) groups=2003(rsync)
[root@backup ~]# tail  -1  /etc/passwd
rsync:x:2002:2003::/home/rsync:/sbin/nologin
[root@backup ~]# 

修改目录的属主和属组

如果不修改就无法往目录里面写东西,默认是可以读的

[root@backup ~]# chown  -R   rsync.rsync   /backup/
[root@backup ~]# ll -d  /backup/
drwxr-xr-x. 2 rsync rsync 6 Jan 11 15:17 /backup/
[root@backup ~]# ls  /backup/

 0520

配置rsync备份服务的客户端

选择web服务器

[root@web02 ~]# ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5c:92:36 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d2e4:6879:ac85:c625/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::8c8d:c31b:a121:ca62/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::9d5f:63cb:4c46:8ce7/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5c:92:40 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.8/16 brd 172.16.255.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::e654:55e2:8c88:ecfb/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::5e65:529b:4fae:7fc3/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::787b:a3a1:ead:b12e/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
[root@web02 ~]# hostname
web02
[root@web02 ~]# rpm  -qa  rsync
rsync-3.1.2-6.el7_6.1.x86_64
[root@web02 ~]# ls   /etc/rsyncd.password
ls: cannot access /etc/rsyncd.password: No such file or directory

密码认证文件里面添加密码即可

要和服务端文件内容一样

[root@web02 ~]# echo   "oldboy123"   >>  /etc/rsync.password
[root@web02 ~]# /etc/rsync.password
-bash: /etc/rsync.password: Permission denied
[root@web02 ~]# ll  /etc/rsync.password
-rw-r--r-- 1 root root 10 Jan 11 15:28 /etc/rsync.password
[root@web02 ~]# chmod   600  /etc/rsync.password
[root@web02 ~]# ll  /etc/rsync.password
-rw------- 1 root root 10 Jan 11 15:28 /etc/rsync.password

创建客户端的备份目录

注意如果不加p就会显示目录存在

重新创建目录不会把目录里面的文件删除

[root@web02 ~]# ls  /backup/
rc.local
[root@web02 ~]# mkdir  /backup/
mkdir: cannot create directory ‘/backup/’: File exists
[root@web02 ~]# ls  /backup/
rc.local
[root@web02 ~]# mkdir  /backup/  -p
[root@web02 ~]# ls  /backup/  
rc.local
[root@web02 ~]# ls  /backup/  
rc.local
[root@web02 ~]# rm  -f  /backup/*
[root@web02 ~]# ls  /backup/  
[root@web02 ~]# ll  -d  /backup/
drwxr-xr-x. 2 root root 6 Jan 11 15:35 /backup/

创建一个测试文件

[root@web02 ~]# touch   /backup/test.txt
[root@web02 ~]# ll  /backup/test.txt
-rw-r--r-- 1 root root 0 Jan 11 15:42 /backup/test.txt
[root@web02 ~]#  rsync   -avz     /backup/    rsync_backup@10.0.0.41::backup    --password-file=/etc/rsync.password
sending incremental file list
./
test.txt

sent 110 bytes  received 46 bytes  104.00 bytes/sec
total size is 0  speedup is 0.00

推送到备份服务端成功

完成第1个里程碑

[root@backup ~]# ls  /backup/
test.txt
[root@backup ~]# ls  /backup/  -l
total 0
-rw-r--r-- 1 rsync rsync 0 Jan 11 15:42 test.txt

03-编写数据备份与检查脚本

第2个里程碑

0140

创建脚本对应目录

[root@web02 ~]# mkdir  /server/scripts  -p
[root@web02 ~]# ll   -d  /server/scripts/
drwxr-xr-x 2 root root 6 Jan 11 15:56 /server/scripts/
[root@web02 ~]# 

拷贝一些文件到脚本目录里面

[root@web02 ~]# cp  /shell_scripts/*  /server/scripts/
[root@web02 ~]# ls  /server/scripts/
back.sh        cut_log.sh    ping.sh          test.sh      usr_ram_crt.sh   usr.sh
backup.sh      echo_path.sh  set-ip.sh        usr_del.sh   usr_ram_crt.txt
bck.sh         hacker.sh     shengdangshu.sh  usrname.txt  usr_ramdel.sh
create_usr.sh  init.sh       test1.sh         usr_pswd.sh  usr_rampswd.sh

对文件进行打包

问题:进入到/下打包压缩的好处??

[root@web02 ~]#  cd  /   &&   tar    zcvf    var/spool/cron/root    etc/rc.local   etc/sysconfig/iptables    server/scripts
etc/rc.local
etc/sysconfig/iptables
server/scripts/
server/scripts/back.sh
server/scripts/backup.sh
server/scripts/bck.sh
server/scripts/create_usr.sh
server/scripts/cut_log.sh
server/scripts/echo_path.sh
server/scripts/hacker.sh
server/scripts/init.sh
server/scripts/ping.sh
server/scripts/set-ip.sh
server/scripts/shengdangshu.sh
server/scripts/test1.sh
server/scripts/test.sh
server/scripts/usr_del.sh
server/scripts/usrname.txt
server/scripts/usr_pswd.sh
server/scripts/usr_ram_crt.sh
server/scripts/usr_ram_crt.txt
server/scripts/usr_ramdel.sh
server/scripts/usr_rampswd.sh
server/scripts/usr.sh
[root@web02 /]# pwd
/

0230

注意打包时程序文件尽量不要和配置文件放在同一个目录里面

配置文件,程序,日志分开打包。但是太分散了也不好

创建目录Web 服务器站点目录/var/html/www和Web 服务器A 访问日志路径/app/logs

[root@web02 ~]# mkdir  -p  /var/html/www
[root@web02 ~]# ls /var/html/www
[root@web02 ~]# mkdir  -p   /app/logs
[root@web02 ~]# ls  /app/
logs

 和上面一样对目录进行打包

 并且要指定日期

[root@web02 ~]# cd  /  &&   tar  zcvf    www_$(date +%F).tar.gz    var/html/www
var/html/www/
[root@web02 /]# ls   www_2020-01-11.tar.gz   -l
-rw-r--r-- 1 root root 117 Jan 11 16:23 www_2020-01-11.tar.gz
[root@web02 /]# file    www_2020-01-11.tar.gz
www_2020-01-11.tar.gz: gzip compressed data, from Unix, last modified: Sat Jan 11 16:23:38 2020
[root@backup ~]# echo  $(date  +%F)
2020-01-11
[root@web02 /]# cd  /  &&  tar  -zcvf   conf_$(date +%F).tar.gz   var/spool/cron/root  /etc/rc.local   etc/sysconfig/iptables   server/scripts/
var/spool/cron/root
tar: Removing leading `/' from member names
/etc/rc.local
etc/sysconfig/iptables
server/scripts/
server/scripts/back.sh
server/scripts/backup.sh
server/scripts/bck.sh
server/scripts/create_usr.sh
server/scripts/cut_log.sh
server/scripts/echo_path.sh
server/scripts/hacker.sh
server/scripts/init.sh
server/scripts/ping.sh
server/scripts/set-ip.sh
server/scripts/shengdangshu.sh
server/scripts/test1.sh
server/scripts/test.sh
server/scripts/usr_del.sh
server/scripts/usrname.txt
server/scripts/usr_pswd.sh
server/scripts/usr_ram_crt.sh
server/scripts/usr_ram_crt.txt
server/scripts/usr_ramdel.sh
server/scripts/usr_rampswd.sh
server/scripts/usr.sh
[root@web02 /]# cd  /  &&  tar  -zcvf   logs_$(date +%F).tar.gz   app/logs/
app/logs/
[root@web02 /]# find /  -name  "*.tar.gz"  -type  f
/root/app/cmatrix-1.2a.tar.gz
/root/haofile.tar.gz
/usr/share/doc/automake-1.13.4/amhello-1.0.tar.gz
/home/wang/app.tar.gz
/test/m.tar.gz
/test/m.conf.tar.gz
/www_2020-01-11.tar.gz
/conf_2020-01-11.tar.gz
/logs_2020-01-11.tar.gz

 0530

 2)如果在某用户的crontab文件中有以下记录,该行中的命令多久执行一次(RHCE考试题)?()
*/5****mycmd

A每5分钟一次。
B每小时过5分钟。
C不会运行,格式无效。


简答:
1.每隔1分钟,打印一个+号到oldboy.log,请给出crontab完整命令


2.每隔2个小时将/etc/services文件打包备份到/tump下(最好每次备份成不同的备份包)


3.每天晚上12点,打包站点目录/arwww/html备份到/data目录下(最好每次备份按时间生成不同的备份包)


4.每周六、日上午9:00和下午14:00来老男孩这里学习(执行程序/server/script/oldboy.sh代替学习)

5.请描述下列路径的内容是做什么的?
/etc/sysctl.conf
/etc/rc.local
/etc/hosts/etc/fstab
/rar/log/secure

 

注意要养成良好的习惯,先在命令行执行

注意在定时任务计划里面不要显示压缩过程,取消选项v

xargs后面的rm只加f即可,不要加选项r

备份的文件按照时间名字

[root@web02 scripts]# cat  backup.sh
#!/bin/sh 
#backup  data  of  web_server
cd  /  && \
tar zcf  /backup/www_$(date +%F).tar.gz   var/html/www/
tar zcf  /backup/conf_$(date +%F).tar.gz  var/spool/cron/root  etc/rc.local  etc/sysconfig/iptables  server/scripts 
tar zcf  /backup/logs_$(date +%F).tar.gz  app/logs/

#transfer  to  backup_server
rsync  -avz  /backup/  rsync_backup@172.16.1.41::backup   --password-file=/etc/rsync.password
#note:after  directoty  backup  must  add  /

#delete  backup  file  before  7  days
find  /backup   -type  f  -name   "*.tar.gz"    -mtime  +7  | xargs  rm  -f  

0930

进行推送,是在删除压缩文件之前

[root@web02 scripts]# bash  backup.sh
sending incremental file list
./
conf_2020-01-11.tar.gz
logs_2020-01-11.tar.gz
www_2020-01-11.tar.gz

sent 7,527 bytes  received 84 bytes  724.86 bytes/sec
total size is 7,204  speedup is 0.95

已经推送到了服务端

[root@backup backup]# ls
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz  test.txt  www_2020-01-11.tar.gz
[root@backup backup]# ls  -lt
total 16
-rw-r--r-- 1 rsync rsync  113 Jan 11 17:01 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync 6974 Jan 11 17:01 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 17:01 www_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync    0 Jan 11 15:42 test.txt

备份服务器上要按照备份数据服务器的内网 IP 为目录保存备份

涉及到获取IP地址的问题

工作中越简单越好

[root@web02 scripts]# grep   ADDR   /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=172.16.1.8
IPV6_ADDR_GEN_MODE=stable-privacy
[root@web02 scripts]# grep   IPADDR   /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=172.16.1.8
[root@web02 scripts]# grep   IPADDR   /etc/sysconfig/network-scripts/ifcfg-eth1 | cut -d=  -f2
172.16.1.8

问题:为什么是$3

这样取容易出错

[root@web02 scripts]#  ifconfig  eth1 
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.8  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::787b:a3a1:ead:b12e  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::5e65:529b:4fae:7fc3  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::e654:55e2:8c88:ecfb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5c:92:40  txqueuelen 1000  (Ethernet)
        RX packets 245  bytes 16023 (15.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 113  bytes 20611 (20.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@web02 scripts]# ifconfig  eth1  |  awk   -F  "[ :]+"   'NR==2 {print $3}'
172.16.1.8

 1330

在定时任务脚本里面定义变量ip和path

简化书写过程

1740

注意加不加/都可以,只要不加P

cd / && \

我是进入到/,后面的文件和目录没有加/

[root@web02 scripts]# cat      backup.sh 
#!/bin/sh 

ip=$(grep   IPADDR   /etc/sysconfig/network-scripts/ifcfg-eth1 | cut -d=  -f2)
path="/backup/$ip"
[ ! -d  $path ]  &&  mkdir  $path  -p  


#backup  data  of  web_server
cd  /  && \
tar zcf  $path/www_$(date +%F).tar.gz   var/html/www/
tar zcf  $path/conf_$(date +%F).tar.gz  var/spool/cron/root  etc/rc.local  etc/sysconfig/iptables  server/scripts 
tar zcf    $path/logs_$(date +%F).tar.gz  app/logs/
 

#transfer  to  backup_server
rsync  -avz  /backup/  rsync_backup@172.16.1.41::backup   --password-file=/etc/rsync.password
#note:after  directoty  backup  must  add  /

#delete  backup  file  before  7  days
find  /backup   -type  f  -name   "*.tar.gz"    -mtime  +7  | xargs  rm  -f  

执行脚本之前把备份目录里面的内容清空

[root@web02 scripts]# ls  /backup/
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz  www_2020-01-11.tar.gz
hahah                   test.txt
[root@web02 scripts]# rm  -rf  /backup/*
[root@web02 scripts]# ls  /backup/
[root@web02 scripts]# bash    backup.sh 
sending incremental file list
./
172.16.1.8/
172.16.1.8/conf_2020-01-11.tar.gz
172.16.1.8/logs_2020-01-11.tar.gz
172.16.1.8/www_2020-01-11.tar.gz

sent 7,590 bytes  received 92 bytes  731.62 bytes/sec
total size is 7,274  speedup is 0.95
[root@web02 scripts]# ls  /backup/
172.16.1.8
[root@web02 scripts]# ls  /backup/172.16.1.8/
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz  www_2020-01-11.tar.gz
[root@web02 scripts]# tree  /backup/
/backup/
└── 172.16.1.8
    ├── conf_2020-01-11.tar.gz
    ├── logs_2020-01-11.tar.gz
    └── www_2020-01-11.tar.gz

1 directory, 3 files
[root@backup backup]# rm  -rf  *
[root@backup backup]# ls
[root@backup backup]# ls
172.16.1.8
[root@backup backup]# tree  .
.
└── 172.16.1.8
    ├── conf_2020-01-11.tar.gz
    ├── logs_2020-01-11.tar.gz
    └── www_2020-01-11.tar.gz

1 directory, 3 files

第3个里程碑创建定时任务

定时任务脚本已经创建好了

[root@web02 scripts]# pwd
/server/scripts
[root@web02 scripts]# ls  /server/scripts/backup.sh 
/server/scripts/backup.sh
[root@web02 scripts]# ls  /server/scripts/backup.sh  -l
-rw-r--r-- 1 root root 704 Jan 11 17:26 /server/scripts/backup.sh
[root@web02 scripts]# 
[root@web02 scripts]# cat  /var/spool/cron/root 
0   0    *   *   *  /server/scripts/backup.sh     &>/dev/null
[root@web02 scripts]# crontab  -l
0   0    *   *   *  /server/scripts/backup.sh     &>/dev/null

 2230

在备份服务器上创建删除脚本

 难点:备份服务器上保留每周一的所有数据副本,其它要保留 6 个月的数据副本

0000***/bin/sh/server/scripts/del.sh 〉/dev/null 2〉&1

问题二、如果有100台服务器需要备份数据,该如何制定备份方案及具体实施?

问题三、如何在备份数据后,把备份的成功及失败结果信息发给系统管理员邮箱中


解答:很多同学说在web客户端备份完毕发邮件给管理员,有100台客户端,老大疯了。早晨开邮箱100封垃圾邮件。这个思路不对。

正确思路:服务器端检查结果:
1)du-sh/backup/*>/tmp/bak.log或者对比大小,对比修改时间给出成功失败的结果。
2)打包,推送,在推送一个flag(ip+时间的文件名),本地清理7天前的。
3)手工或定时的解包,模拟数据恢复来确认数据备份的完整性。
教训:你以为备份了,实际更没备份,你又没检查,这个时候出问题了,你在重视,但是为时已晚。
4)flag+数据包md5sum指纹。

 老男孩老师写的脚本

[ root@ web scripts]# cat backup. sh
#!/bin/sh IP=S(ifconfig ethllawk-F[]+'"NR==2{ print $4))
Path="/backup/SIP"
[!-d $Path]&& mkdir $Path-p
# backup tar zcf $Path/www_S(date+%F). tar. gz/var/html/www/
tar zcf $Path/conf_$(date +%F). tar. gz /var/spool/cron/root
/etc/rc. local/etc/sysconfig/iptables/server/scripts tar zcf SPath/logs_S(date+%F). tar. gz/app/logs/
# to bak server rsync-avz/backup/rsync_backup@10.0.0.8: backup --password-
file=/etc/rsync. password
# del find /backup-type f-name"*. tar. gz"-mtime +7kargs rm-f

小插曲——学员就业情况

老男孩老师您好:
我是网络班的学生:梁恩宇!首先非常感谢您,因为我今天终于得到了新工作的offer了。我是去年11月位,开始报读的网络培训班。

在此之前我的工作是广州一家网络公司做网络管理员,薪资是4K。

我学习linux,起初也是多亏了我的部门经理的指点,说真的我非常感谢他!

因为是他为我指明了前进的道路。

报读了培训班后,我每天晚上下班回来第一件事就是看视频,不断的学习。

有时候甚至学到一两点钟,可能是我读的专业比较接近吧,有些基础,所以上手也比较快!

自昨天开始,我总共面试了3家公司,包括今天早上的这家。终于我被录取了!

首先面试开始,我先自我介绍,然后直接跟他谈我之前做过的架构,我讲的是第5套架构。

架构图我事先在笔记本上画好了的,面试的时候直接拿出来讲解给他听!

等我讲完之后,他问到了我主要负责哪些模块的工作!

我说我一个人不可能完成整个架构,我只负责web服务,nagios监控,mysql数据库主从同步,读写分离。

还有lvs+keepalived负载均衡方面的技术。

然后他又问到:mysql数据库有没有遇到什么样的瓶颈?

我说:当然遇到过。在初期的时候,整个架构都很正常。

但是随着我们的业务逐步扩大,就出现了以上问题。

我是用memcache缓存解决的,然后对mysql做了慢查询,和对索引进行优化。

当然我们有自己的DBA,他主要负责这方面的工作!

他又问:nagios监控,主要监控哪些服务呢?怎么知道数据库出现问题?

我说:主要监控mysql的两个线程。分部是:I0和SQL两个线程。

如果这两个线程的状态为NO的话,就说明出现问题了。

这样我在nagios里面就可以看到状态了。

监控主从同步,我们可以用nagios自带的check_mysql插件来完成,还可以自定义插件来完成(用shell脚本编写)。

最后他问:那你们公司整个业务上线的流程是怎么样的呢?

这个点让我有些迷糊。因为我不太清楚从开发到运维整个流程。

所以我说这些工作是我经理负责的,我不太清楚。最后就没问什么了!

然后就是人事跟我谈薪资待遇方面的问题了!

待遇是:试用期8K转正是:10k工作:包三餐,然后每个月有补助等相关的福利。
最后,还是非常感谢老男孩老师,跟我的经理!

也跟同学们说下,其实linux不难,贵在坚持!而我就是这么坚持过来的!


8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结
果信息发给系统管理员邮箱中(发邮件技巧见 VIP 群资料)

问题:税+保险+公积金???

[root@backup ~]# date  --help  |  grep  %A
  %A   locale's full weekday name (e.g., Sunday)
[root@backup ~]# date  +%A
Saturday
[root@backup ~]# date  
Sat Jan 11 19:55:38 CST 2020

 0330

在web服务器上对脚本进行修改

#backup  data  of  web_server
cd  /  && \
tar zcf  $path/www_$(date +%F).tar.gz   var/html/www/  && \
tar zcf  $path/conf_$(date +%F).tar.gz  var/spool/cron/root  etc/rc.local  etc/syscon
fig/iptables  server/scripts   &&  \
tar zcf    $path/logs_$(date +%F).tar.gz  app/logs/   &&  \
touch  $path/flag_$(date +%F)

 0510

为每个文件建立md5值

文件不变那么md5值就不会变化

[root@web02 ~]# find   /backup/   -type  f   -name  "*$(date +%F).tar.gz" |  xargs  md5sum
e0530f1ab512d7e59ed3b3f851629794  /backup/172.16.1.8/www_2020-01-11.tar.gz
f9d2bdd60650cd1eec8f0c7becb5eb42  /backup/172.16.1.8/conf_2020-01-11.tar.gz
4e46172b6136413278c4a4d119e2269b  /backup/172.16.1.8/logs_2020-01-11.tar.gz

并且重定向到文件里面

[root@web02 ~]# cat   /backup/flag_$(date +%F)
e0530f1ab512d7e59ed3b3f851629794  /backup/172.16.1.8/www_2020-01-11.tar.gz
f9d2bdd60650cd1eec8f0c7becb5eb42  /backup/172.16.1.8/conf_2020-01-11.tar.gz
4e46172b6136413278c4a4d119e2269b  /backup/172.16.1.8/logs_2020-01-11.tar.gz
[root@web02 ~]# ll    /backup/flag_$(date +%F)
-rw-r--r-- 1 root root 227 Jan 11 20:27 /backup/flag_2020-01-11

注意不需要创建flag文件

[root@web02 ~]# cat  /server/scripts/backup.sh
#!/bin/sh 

ip=$(grep   IPADDR   /etc/sysconfig/network-scripts/ifcfg-eth1 | cut -d=  -f2)
path="/backup/$ip"
[ ! -d  $path ]  &&  mkdir  $path  -p  


#backup  data  of  web_server
cd  /  && \
tar zcf  $path/www_$(date +%F).tar.gz   var/html/www/  && \
tar zcf  $path/conf_$(date +%F).tar.gz  var/spool/cron/root  etc/rc.local  etc/sysconfig/iptables  server/scripts   &&  \
tar zcf    $path/logs_$(date +%F).tar.gz  app/logs/   &&  \
touch  $path/flag_$(date +%F)
find   /backup/   -type  f   -name  "*$(date +%F).tar.gz" |  xargs  md5sum  >>   $path/flag_$(date +%F)
 

#transfer  to  backup_server
rsync  -avz  /backup/  rsync_backup@172.16.1.41::backup   --password-file=/etc/rsync.password
#note:after  directoty  backup  must  add  /

#delete  backup  file  before  7  days
find  /backup   -type  f  -name   "*.tar.gz"    -mtime  +7  | xargs  rm  -f  

删除服务端和客户端备份目录下的文件

[root@web02 ~]# rm  -rf  /backup/*
[root@web02 ~]# ls  /backup/
[root@backup ~]# ls /backup/
172.16.1.8
[root@backup ~]# rm  -rf  /backup/*
[root@backup ~]# ls /backup/

在客户端执行脚本文件

[root@web02 ~]# bash  /server/scripts/backup.sh 
sending incremental file list
./
172.16.1.8/
172.16.1.8/conf_2020-01-11.tar.gz
172.16.1.8/flag_2020-01-11
172.16.1.8/logs_2020-01-11.tar.gz
172.16.1.8/www_2020-01-11.tar.gz

sent 4,382 bytes  received 111 bytes  427.90 bytes/sec
total size is 4,100  speedup is 0.91
[root@web02 ~]# ls  /backup/
172.16.1.8
[root@web02 ~]# tree  /backup/
/backup/
└── 172.16.1.8
    ├── conf_2020-01-11.tar.gz
    ├── flag_2020-01-11
    ├── logs_2020-01-11.tar.gz
    └── www_2020-01-11.tar.gz

1 directory, 4 files
[root@backup ~]# ls /backup/
172.16.1.8
[root@backup ~]# tree  /backup/
/backup/
└── 172.16.1.8
    ├── conf_2020-01-11.tar.gz
    ├── flag_2020-01-11
    ├── logs_2020-01-11.tar.gz
    └── www_2020-01-11.tar.gz

1 directory, 4 files
[root@backup ~]# ll  /backup/
total 0
drwxr-xr-x 2 rsync rsync 118 Jan 11 20:41 172.16.1.8
[root@backup ~]# cd  /backup/
[root@backup backup]# ls
172.16.1.8
[root@backup backup]# cd  172.16.1.8/
[root@backup 172.16.1.8]# ls
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz
flag_2020-01-11         www_2020-01-11.tar.gz
[root@backup 172.16.1.8]# ll
total 16
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup 172.16.1.8]# cat  flag_2020-01-11 
85a36164dd529200249670bc03aebd01  /backup/172.16.1.8/www_2020-01-11.tar.gz
82527ade328ff785a92361b730169e8d  /backup/172.16.1.8/conf_2020-01-11.tar.gz
6498826dc15f26afd2835f39b25ae8aa  /backup/172.16.1.8/logs_2020-01-11.tar.gz

总结思路:

打包文件和目录都成功了,那么就会创建md5值,并且重定向到文件里面

并且把md5值的文件和打包文件都推送到服务端

然后将存放md5值的文件和打包文件的md5值进行比较,如果没有变化,那么说明文件没有损坏

直接使用md5命令检查文件是否毁坏,这样更方便

[root@backup ~]# ls  /backup/172.16.1.8/
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz
flag_2020-01-11         www_2020-01-11.tar.gz
[root@backup ~]# ls  /backup/172.16.1.8/  -l
total 16
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup ~]# ls  /backup/172.16.1.8/  -lt
total 16
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup ~]# md5sum  -c    /backup/172.16.1.8/flag_2020-01-11 
/backup/172.16.1.8/www_2020-01-11.tar.gz: OK
/backup/172.16.1.8/conf_2020-01-11.tar.gz: OK
/backup/172.16.1.8/logs_2020-01-11.tar.gz: OK

注意md5值和文件大小无关

[root@backup ~]# find  /  -type   f  -size  +100M  
/proc/kcore
find: ‘/proc/7888/task/7888/fdinfo/5’: No such file or directory
find: ‘/proc/7888/fdinfo/6’: No such file or directory
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/root/app/03.txt
/root/proc/kcore
/usr/lib/locale/locale-archive
/opt/1G
[root@backup ~]# ll  -dh  /root/proc/kcore
-r--------. 1 root root 214M Dec 13 21:07 /root/proc/kcore
[root@backup ~]# md5sum  /root/proc/kcore
9d6d96e670ea573201dd55ca7a8dfae8  /root/proc/kcore
[root@backup ~]# du  -sh  /root/proc/kcore
214M    /root/proc/kcore

对文件进行毁坏,会显示failed

[root@backup ~]# ls  /backup/172.16.1.8/
conf_2020-01-11.tar.gz  logs_2020-01-11.tar.gz
flag_2020-01-11         www_2020-01-11.tar.gz
[root@backup ~]# ls  /backup/172.16.1.8/  -l
total 16
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup ~]# ls  /backup/172.16.1.8/  -lt
total 16
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup ~]# cp  /backup/172.16.1.8/www_2020-01-11.tar.gz{,.bak}
[root@backup ~]# ls  /backup/172.16.1.8/  -lt
total 20
-rw-r--r-- 1 root  root   117 Jan 11 20:59 www_2020-01-11.tar.gz.bak
-rw-r--r-- 1 rsync rsync  227 Jan 11 20:41 flag_2020-01-11
-rw-r--r-- 1 rsync rsync  113 Jan 11 20:41 logs_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync 3643 Jan 11 20:41 conf_2020-01-11.tar.gz
-rw-r--r-- 1 rsync rsync  117 Jan 11 20:41 www_2020-01-11.tar.gz
[root@backup ~]# md5sum  -c   /backup/172.16.1.8/flag_2020-01-11 
/backup/172.16.1.8/www_2020-01-11.tar.gz: OK
/backup/172.16.1.8/conf_2020-01-11.tar.gz: OK
/backup/172.16.1.8/logs_2020-01-11.tar.gz: OK
[root@backup ~]# echo   hahaha  >>  /backup/172.16.1.8/www_2020-01-11.tar.gz
[root@backup ~]# md5sum  -c   /backup/172.16.1.8/flag_2020-01-11 
/backup/172.16.1.8/www_2020-01-11.tar.gz: FAILED
/backup/172.16.1.8/conf_2020-01-11.tar.gz: OK
/backup/172.16.1.8/logs_2020-01-11.tar.gz: OK
md5sum: WARNING: 1 computed checksum did NOT match
[root@backup ~]# md5sum  -c   /backup/172.16.1.8/flag_2020-01-11 | grep  FAILED
md5sum: WARNING: 1 computed checksum did NOT match
/backup/172.16.1.8/www_2020-01-11.tar.gz: FAILED

1700

创建发送邮件的文件

[root@backup ~]# cat     /server-scripts/chk_bak.sh
#/bin/bash

find  /backup  -type   f  -name   "flag_$(date +%F)"   | xargs  md5sum  -c | grep  FAILED >/opt/md5.result_$(date +%F)txt
mail  -s    "$(date  +%F_%T) backup_result.message"   13203286779@163.com  < /opt/md5.result_$(date +%F)txt

注意时间的格式问题

[root@backup ~]# date  +%U%T
0121:15:03
[root@backup ~]# date  +%F%T
2020-01-1121:15:09
[root@backup ~]# date  +%F %T
date: extra operand ‘%T’
Try 'date --help' for more information.
[root@backup ~]# date  +%F_%T
2020-01-11_21:15:17

开启邮件服务

执行脚本

邮件收到的结果

[root@backup ~]# cat  /opt/md5.result_2020-01-11txt 
/backup/172.16.1.8/www_2020-01-11.tar.gz: FAILED
[root@backup ~]# 

2100

如果没有flag,那么打包会出问题,可以试试

那么/opt/md5.result_2020-01-11txt  不会有内容

find /backup -type f -name "flag_$(date +%F)"xargs md5sum -cgrep FAILED >/opt/mai
|1_body_$(date +%F). txt

if [!-f /opt/mail_body_$(date +%F). txt ll-s /opt/mail_body_$(date +%F). txt]
then echo "backup is error, pls view back server">>/opt/mail_body_$(date +%F). txt mail-s "$(date +%U%T) back"49000448@ qq. com〈/opt/mail_body_$(date +%F). txt

如果是没有flag文件,那么就添加判断语句,改进脚本

这种情况没有写出来

 3100

拷贝脚本

思想:

检查最后一台服务器的情况就可以了

如果最后一台服务器没有问题,那么前面的程序都没问题的

问题:备份服务器上, 保留每周一的所有数据副本,其它要保留 6个月的数据副本

这句话的意思是保留6个月以内的所有数据,同时保留6个月以前每周一的数据

备份服务器上保留的是从web服务器推送的打包文件
打包文件名称或者会修改吗?
如果没有修改那么这种方法就可以了
[root@backup ~]# touch    aa.$(date  +%F_%A).tar.gz
[root@backup ~]# ll  aa.2020-01-11_Saturday.tar.gz 
-rw-r--r-- 1 root root 0 Jan 11 22:18 aa.2020-01-11_Saturday.tar.gz
[root@backup ~]# find  /root   -type  f  -name  "*Saturday*"
/root/aa.2020-01-11_Saturday.tar.gz

注意要先使用手机发送短信

并且点击我已发送

在设置客户端授权码

我设置为oldboy123

E:\老男孩Linux运维课程视频\feiq\Recv Files\69预习视频\老男孩教育脱产63期-day34-综合架构全网备份项目\对于全网备份的暂时性完美脚本编写

下面是上机测验需要的脚本

[root@backup shell_scripts]# rz -E
rz waiting to receive.
[root@backup shell_scripts]# ls  mail.rc 
mail.rc
[root@backup shell_scripts]# ls  mail.rc   -l
-rw-r--r-- 1 root root 2118 Aug 18 14:25 mail.rc
[root@backup shell_scripts]# ll  web.sh 
-rw-r--r-- 1 root root 2042 Aug 18 17:28 web.sh
[root@backup shell_scripts]# ll  rsync端.sh 
-rw-r--r-- 1 root root 772 Aug 18 17:36 rsync端.sh
[root@backup shell_scripts]# ll  nfs.sh 
-rw-r--r-- 1 root root 2034 Aug 18 17:25 nfs.sh

猜你喜欢

转载自www.cnblogs.com/wang618/p/12179908.html
今日推荐