首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Unix/Linux 系统自动化管理 数据备份与同步篇(3)

Unix/Linux 系统自动化管理 数据备份与同步篇(3)

数据备份与同步的自动化实现系统管理员必须执行的数据备份与同步任务大多牵涉到某种形式的系统配置,当管辖的任务比较庞大,数据量较多,但操作一样且有固定周期时,采用自动化脚本就成为必然。尤其是为多个操作系统提供支持时。
要实现自动化操作,脚本编制是必须掌握的基本技能。一个脚本由一系列命令构成,这些命令负责执行各种各样的任务。系统管理员在重复执行了几遍类似的命令后,通常就能准确地掌握要点,并希望利用脚本,将重复性的工作交给计算机去做。常用的脚本语言有 Shell,Perl,Tcl/Expect 等。
实用命令的自动化实现
本文的示例主要是通过 Shell 来实现的。Shell 是一种“解释性”语言,列出了管理员通过键盘敲入的相同命令, 并且每次执行一次这样的命令。
例如执行一条简单的 tar 命令,可以使用下面的一个简单的脚本。
清单 2. tar 自动化示例脚本
1
2
#!/bin/sh
tar -czvf backup.tar.gz /CriticalData/




如果我们想用其它的命令来实现数据备份,可以将以上的示例脚本中的命令部分替换掉,例如执行一条简单的 cpio 命令,可替换为下面一个简单的脚本。
清单 3. mksysb 自动化示例脚本
1
2
#!/bin/sh
find /CriticalData/ -depth | cpio -ov > backup.cpio




事实上我们可以通过 shell 中一些变量设置,条件测试以及流程控制语句来实现不同的需求。例如,管理员希望能够在周一到周日,通过 backup 命令做多级备份。
我们可以设置 Level 变量,当变量满足不同条件时,就可以实现多级备份。
清单 4. backup 自动化示例脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

// 判读当前系统的日期是星期几
DATE=`date | awk '{ printf $1 }'`
case $DATE in
Mon) LEVEL=1;;
Tue) LEVEL=2;;
Wed) LEVEL=3;;
Thu) LEVEL=4;;
Fri) LEVEL=5;;
Sat) LEVEL=6;;
Sun) LEVEL=7;;
esac

// 备份命令
backup -$LEVEL -uf /dev/rmt0 /home




虽然各种实用程序和命令以及参数各不相同,但 shell 自动化脚本的基本思路是类似的。如果系统管理员需要连续地定期地执行脚本,可以借助 Unix/Linux 系统的 crontab 功能。
rsync 的自动化实现
由于 rsync 在数据备份与同步上的优秀表现,本文将主要介绍用 rsync 来实现数据的备份与同步。
要使用 rsync,只需要将主服务器安装并配置成为 rsync 服务器,将另外一台装有 rsync 的机器作为备份客户端。在对 rsync 服务器配置结束以后,就可以在客户端发出 rsync 命令来实现将服务器端的文件备份到客户端来。在客户端创建自动化脚本,并启用 cron 服务,就可以定期对主服务器的数据进行自动备份与同步。
  • 在服务器端手动创建 rsync 配置文件创建 rsync.conf 作为服务器配置文件
    假设我们在服务器端,设置需要备份的目录 /CriticalData, 但不需要备份 /CriticalData 目录下的 Common 目录。
    先创建一个目录,用于存放 rsync 相关配置文件
    1
    # mkdir /etc/rsyncd




    创建 rsync.conf
    1
    #touch /etc/rsyncd/rsyncd.conf




    编辑 rsyncd.conf
    清单 5.rsyncd.conf 配置文件
    清单 5.rsyncd.conf 配置文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    gid = users                     
    read only = true
    use chroot = true
    transfer logging = true
    log format = %h %o %f %l %b
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.0.0/255.255.255.0
    max connections = 5
    timeout = 300
    motd file = /etc/rsyncd/rsyncd.motd

    [CriticalData]
    path = /CriticalData         
    list = true
    ignore errors      
    comment =This is Critical Data
    auth users = rsync   
    secrets file = /etc/rsyncd/rsyncd.secrets
    exclude = Common/




    rsync.conf 中主要分为全局变量和模块两部分。模块用 [ ] 表示,模块之前的为全局变量。
    重要参数说明:
    path
      指定该模块所定义的备份目录的路径,该参数是必须指定的。
    exclude
    用来指定多个由空格隔开的多个文件或目录 ( 相对路径 ),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 --exclude 参数。一个模块只能指定一个 exclude 选项。但是需要注意的一点是该选项有一定的安全性问题,客户端很有可能绕过 exclude 列表,如果希望确保特定的文件不能被访问,那就最好结合 uid/gid 选项一起使用。
    auth users
    该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户不一定是客户端存在的用户。如果"auth users"被设置,那么客户端发出对该模块的连接请求时,需要对用户身份进行验证。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块 ( 也就是匿名方式 )。
    创建 rsync.secrets 作为用户密码文件
    1
    2
    #touch /etc/rsyncd/rsyncd.secrets
    #chmod 600 /etc/rsyncd/rsyncd.secrets




    编辑 rsyncd.secrets, 格式为“用户 : 密码”
    1
    rsync:passwd




    注意:rsync是服务器上存在的用户同时将/CriticalData的使用者改为rsync
    1
    #chown -R rsync /CriticalData/




    创建 rsync.motd 作为登录消息文件
    此文件是选择性配置文件,也可以不创建。
    1
    #touch /etc/rsyncd/rsyncd.motd




    编辑 rsyncd.conf
    1
    2
    3
    ============================
    This is Critical Data Server
    =============================




  • 启动 rsync将 rsync 启动
    1
    #/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf




    可以将这个命令写入 /etc/rc.d/rc.local 中,当系统启动时,自动运行 rsync。
  • 创建脚本在客户端创建一个 /root/rsync/ 目录用来存放自动化脚本和其它文件。
    创建 /root/rsync/rsync.sh 自动化脚本,保证权限为 755。
    清单 6. rsync 自动化示例脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/bin/sh

    export RSYNC_PASSWORD=passwd
    export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

    // 设置远程服务器与需要备份的目录
    SERVER=rsync@Server
    DIR=CriticalData

    // 设置客户端上的用于备份的目录
    BDIR=/Backup
    BASE=Current
    INCREMENTDIR=`date +%Y-%m-%d`

    // 在客户端灵活使用 exclude 功能;设置日志
    EXCLUDES=/root/rsync/excludes
    LOG=/tmp/rsync.log

    // 参数设置,调用 backup-dir 将服务器端的增量文件存储到 INCREMENTDIR 目录下
    OPTS="-avz--force --delete --delete-excluded  --exclude-from=$EXCLUDES -b
    --backup-dir=$BDIR/$INCREMENTDIR --ignore-errors"

    // 确保客户端上的用于备份的目录存在
    install -d $BDIR/$BASE

    // 实现数据备份与同步,将日志邮寄给 root 用户
    run_rsync()
    {
    echo "==========Begin rsync: `date`===========" >>$LOG 2>&1
    du -s $BDIR/* >>$LOG 2>&1
    rsync $OPTS $SERVER:DIR $BDIR/$BASE  >>$LOG 2>&1
    echo "==========End rsync: `date`===========" >>$LOG 2>&1
    mail root -s "Backup Report" < $LOG
    rm $LOG
    }

    // 条件测试,运行程序
    if [ -f $EXCLUDES ]; then
           if [ -d $BDIR ]; then
                   run_rsync
           else
                   echo "cant find $BDIR"; exit
           fi
           else
                   echo "cant find $EXCLUDES"; exit
    fi




    执行完 rsync.sh 后,可以查看 /Backup 目录来检查数据的正确性。将有两种目录,一个是 Current 目录,用于存放当前服务器端备份和同步后的数据。在脚本运行过程中,进行增量传输。另外还有一个类似于 2009-06-16 的目录,用于存放已在服务器端删除的增量数据。目录的名称将根据脚本执行的日期定义。
    1
    2
    3
    4
    # pwd
    /Backup
    # ls
    2009-06-16  Current




  • 启用 cron 服务,实现定期自动备份如果系统管理员需要连续地定期地执行脚本,那么就需要借助 Unix/Linux 系统的 crontab 功能,使系统可以定期地调用 rsync.sh 脚本。
    使用命令“crontab -e”编辑 crontab,添加一条类似于以下的项:
    1
    0 0 * * * /root/rsync/rsync.sh 2>&1>>/root/rsync/rsync_cron.log




    重新启动 cron 服务,并用“crontab – l” 查看任务是否添加成功。也可以定期查看 /root/rsync/rsync_cron.log 来监控 cron 服务的运行情况。
  • 监控脚本的执行过程如果配置正确 , rysnc.sh 的执行过程将会邮寄给 root 用户,通过 mail 命令可读取这些邮件。
    清单 7. 使用 mail 命令读取监控输出
    1
    2
    3
    4
    5
    # mail
    Mail version 8.1 6/6/93.  Type ? for help.
    "/var/spool/mail/root": 1 message 1 new
    >N  1 root@cdlf2ler02.clus  Tue Jun 16 16:53  32/1050  "Backup Report"
    &




    敲入回车,可显示具体的邮件内容。类似于:
    清单 8. 邮件内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Message 1:
    From root@cdlf2ler02.clusters.com  Tue Jun 16 16:53:35 2009
    Date: Tue, 16 Jun 2009 16:52:14 -0400
    From: root <root@cdlf2ler02.clusters.com>
    To: root@cdlf2ler02.clusters.com
    Subject: Backup Report

    ==========Begin rsync: Tue Jun 16 16:52:14 EDT 2009===========
    16      /Backup/Current
    ===========================
    This is Critical Data Server
    ===========================


    receiving file list ... done
    deleting b/
    ./
    Location/
    Name/
    Name/Namelist1

    sent 214 bytes  received 317 bytes  1062.00 bytes/sec
    total size is 3  speedup is 0.01
    ==========End rsync: Tue Jun 16 16:52:14 EDT 2009===========




返回列表