基础设施增强与备份策略
在基础设施管理中,充分利用各类工具和技术可以提高系统的可靠性、可维护性和可测试性。本文将详细介绍如何利用
cfengine
进行系统测试、备份以及相关的配置管理。
测试主机的指定
为了充分利用
@AR
树,需要为
LNK@
树中使用的所有生产角色指定一个测试主机。以下是一些生产角色的示例:
- Debian Subversion、Magios 和 Anglia Web 主机
- Solaris NFS 主目录服务器
- Red Hat 公共 Web 服务器
- Debian DNS 服务器
- Debian 邮件中继
由于在
cfengine
任务中从不指定主机名,因此只需在
@AR+^n]j_dao+-+ejlqpo+_h]ooao+_b*i]ej[_h]ooao
文件中重新定义一些组 membership 即可用于测试。将主机名与角色名分离有助于在开发环境中测试全新的 DNS 机制或进行其他更改,而不会影响生产环境。此外,在 VMware 等系统下设置虚拟主机可以确保测试不需要大量额外的硬件。
目前尚未涉及
OP=CA
目录树的使用,因为网络规模仍然较小。当网络足够大时,在初始开发阶段结束后,可以使用单独的主机进行配置测试。某些更改可能需要数天或数周才能获得批准并推广到主生产分支。也可以像使用
@AR
树一样使用
OP=CA
树,但如果打算将其用作长期测试平台,最好给它一个描述性的名称。
OP=CA
树的使用在技术上与
@AR
树相同,但使用策略会有所不同,需要根据每个站点的情况进行定义。
备份策略
目前已经在
cfengine
主服务器和三个成像系统上投入了大量工作。由于在使用
cfengine
管理系统之前设置了 Kickstart、Jumpstart 和 FAI,因此这些系统没有备份。此外,还需要备份
cfengine
的 Subversion 存储库。如果使用
cfengine
自动化三个成像系统主机的配置设置,那么只需要备份 Subversion 存储库。
理想情况下,只备份 Subversion 存储库,这意味着站点的所有配置都通过
cfengine
执行。为了实现这一点,应该尽可能自动化成像系统的设置,然后只备份 Subversion。成像系统的自动化不包括 Kickstart 和 Jumpstart 将安装映像复制到磁盘的过程,以及这些系统的安装客户端设置,主要是自动化手动创建或编辑的文件的同步。
仅备份 Subversion 存储库显然不适用于应用程序数据备份,但目前没有需要关注的应用程序数据。当需要考虑应用程序日志或其他可变数据时,可以研究 Amanda 等开源备份解决方案或 Veritas NetBackup 等商业备份产品。
Jumpstart 备份
Jumpstart 的设置完全通过安装介质上的脚本完成,因此不需要备份
+fqilop]np
目录树中的大多数文件,只需要使用
cfengine
复制
+fqilop]np+lnkbehao+
目录。重新创建一个功能齐全的 Jumpstart 服务器所需的其他步骤在相关文档中有详细说明,但这些步骤不太适合自动化,因为它们依赖于某种形式的安装介质。
具体操作步骤如下:
1. 将
+fqilop]np+lnkbehao
目录从 Jumpstart 服务器
hemingway
复制到工作副本:
_` z+i]opanbehao+LNK@+nalh+nkkp+
ig`en fqilop]np
o_l )n nkkp<daiejcs]u6+fqilop]np+lnkbehao fqilop]np+
-
将
fqilop]np目录添加到cfengine的 Subversion 存储库:
orj ]`` fqilop]np+
-
创建一个
cfengine类fqilop]np[oanran,并将hemingway添加到该类。在LNK@+ejlqpo+p]ogo+]ll+fqilop]np+_b*_klu[fqil[lnkbehao中创建一个任务,内容如下:
_klu6
fqilop]np[oanran66
$i]opan%+nalh+nkkp+fqilop]np+lnkbehao
`aop9+fqilop]np+lnkbehao
ik`a9311
n9ejb
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
`ena_pkneao6
fqilop]np[oanran66
+fqilop]np+lnkbehao ik`a9311 ksjan9nkkp cnkql9nkkp ejbkni9b]hoa
-
将
LNK@+ejlqpo+p]ogo+]ll+fqilop]np目录添加到 Subversion 存储库:
ls`
+dkia+j]pa+i]opanbehao+LNK@+ejlqpo+p]ogo+]ll
orj ]`` fqilop]np+
-
在
LNK@+ejlqpo+_h]ooao+_b*i]ej[_h]ooao中添加以下行以创建新类:
fqilop]np[oanran 9 $daiejcs]u%
-
创建一个
dkopcnkql文件LNK@+ejlqpo+dkopcnkqlo+_b*fqilop]np[oanran,内容如下:
eilknp6
]ju66
p]ogo+]ll+fqilop]np+_b*_klu[fqil[lnkbehao
-
将
_b*fqilop]np[oanran文件添加到存储库。 -
在
LNK@+ejlqpo+dkopcnkqlo+_b*dkopcnkql[i]llejco中设置该dkopcnkql文件的cfengineeilknp:
fqilop]np[oanran66 dkopcnkqlo+_b*fqilop]np[oanran
-
提交所有更改并在
cfengine主服务器上更新工作副本。
Kickstart 备份
为了在 Kickstart 主机重建时恢复重要文件,首先将这些文件复制到
cfengine
存储库的工作副本:
_` z+i]opanbehao+LNK@+nalh+nkkp+
ig`en )l ge_gop]np+ndah1[.
o_l )n nkkp<ndi]opan6+ge_gop]np+_bajceja).*.*3 ge_gop]np+
o_l )n nkkp<ndi]opan6+ge_gop]np+o_nelpo ge_gop]np+
o_l nkkp<ndi]opan6+ge_gop]np+ndah1[.+go*_bc ge_gop]np+ndah1[.+
orj ]`` ge_gop]np
然后,使用
cfengine
将这些文件复制到
rhmaster
主机的
+ge_gop]np
目录。具体步骤如下:
1. 在工作副本中创建
LNK@+ejlqpo+p]ogo+]ll+ge_gop]np
目录,并在该目录中创建一个任务
_b*_klu[ge_gop]np[
en`,内容如下:
_klu6
ge_gop]np[oanran66
$i]opan%+nalh+nkkp+ge_gop]np
`aop9+ge_gop]np
ik`a9311
n9ejb
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
`ena_pkneao6
ge_gop]np[oanran66
+ge_gop]np ik`a9311 ksjan9nkkp cnkql9nkkp ejbkni9b]hoa
-
将
LNK@+ejlqpo+p]ogo+]ll+ge_gop]np目录添加到 Subversion。 -
执行以下步骤使该任务被 Kickstart 服务器使用:
-
在
LNK@+ejlqpo+_h]ooao+_b*i]ej[_h]ooao中创建ge_gop]np[oanran类。 -
在
LNK@+ejlqpo+dkopcnkqlo+_b*ge_gop]np[oanran中创建主机组文件,导入_b*_klu[ge_gop]np[en` 任务,并将该文件添加到 Subversion 存储库。 -
在
LNK@+ejlqpo+dkopcnkqlo+_b*dkopcnkql[i]llejco中设置主机组导入。 -
提交更改并更新
cfengine主服务器上的生产工作副本。
-
在
FAI 备份
在设置 FAI 时,尽量少修改默认的 FAI 配置文件,以便能够尽可能多地推送新文件,并使用
cfengine
进行分发。
首先,收集
+onr+b]e+_kjbec
目录下所有修改或添加的文件:
ls`
+dkia+j]pa+i]opanbehao+LNK@+nalh+nkkp+onr+b]e+_kjbec
ho )N
*6
*+ **+ _h]oo+ `eog[_kjbec+ behao+ dkkgo+ l]_g]ca[_kjbec+ o_nelpo+
*+_h]oo6
*+ **+ 2,)ikna)dkop)_h]ooao& B=E>=OA*r]n
*+`eog[_kjbec6
*+ **+ HKCDKOP SA>
*+behao6
*+ **+ ap_+
*+behao+ap_6
*+ **+ _bajceja+
*+behao+ap_+_bajceja6
*+ **+ _b]cajp*_kjb+ ql`]pa*_kjb+
*+behao+ap_+_bajceja+_b]cajp*_kjb6
*+ **+ B=E>=OA&
*+behao+ap_+_bajceja+ql`]pa*_kjb6
*+ **+ B=E>=OA&
*+dkkgo6
*+ **+ o]rahkc*H=OP*okqn_a&
*+l]_g]ca[_kjbec6
*+ **+ B=E>=OA HKCDKOP SA>
*+o_nelpo6
*+ **+ B=E>=OA+
*+o_nelpo+B=E>=OA6
*+ **+ 1,)_bajceja& 2,)_na]pa)_b)_kjbec&
然后,将这些文件递归复制到 FAI 服务器(
goldmaster
)的
+onr+b]e+_kjbec
目录。在设置 FAI 服务器时,还修改了一些其他文件,如
+ap_+b]e+i]ga)b]e)jbonkkp*_kjb
、
+ap_+
d_l/+
d_l
kjb
和
+ap
+ejap
*_kjb
。其中,
+ap_+ejap
kjb
存在一个问题,在任务
LNK@+ejlqpo+p]ogo+]ll+nouj
+
b*aj]^ha[nouj
[
]aikj
中使用
a
epbehao` 操作向该文件添加一行,这会导致冲突,因此需要更改或删除该操作。
具体操作步骤如下:
1. 编辑
LNK@+ejlqpo+p]ogo+]ll+nouj_+_b*aj]^ha[nouj_[
]aikj
任务,注释掉
a
epbehao
部分并添加新注释。
2. 将修改后的文件复制到
cfengine
树的工作副本:
ls`
+dkia+j]pa+i]opanbehao+LNK@+nalh
_l +ap_+ejap`*_kjb nkkp+ap_+
orj ]`` nkkp+ap_+ejap`*_kjb
_l +ap_+b]e+i]ga)b]e)jbonkkp*_kjb nkkp+ap_+b]e+
orj ]`` nkkp+ap_+b]e+i]ga)b]e)jbonkkp*_kjb
ig`en nkkp+ap_+`d_l/
_l +ap_+`d_l/+`d_l`*_kjb nkkp+ap_+`d_l/+
orj ]`` nkkp+ap_+`d_l/
-
在
LNK@+ejlqpo+p]ogo+]ll+b]e+_b*_klu[b]e[behao中创建一个任务,内容如下:
_kjpnkh6
b]e[oanran66
=``Ejop]hh]^ha = $ naop]np[ejap` naop]np[`d_l` %
_klu6
b]e[oanran66
$i]opan%+nalh+nkkp+onr
`aop9+onr
ik`a9311
n9ejb
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
$i]opan[ap_%+ejap`*_kjb
`aop9+ap_+ejap`*_kjb
ik`a9311
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
`abeja9naop]np[ejap`
$i]opan[ap_%+b]e+i]ga)b]e)jbonkkp*_kjb
`aop9+ap_+b]e+i]ga)b]e)jbonkkp*_kjb
ik`a9311
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
$i]opan[ap_%+`d_l/+`d_l`*_kjb
`aop9+ap_+`d_l/+`d_l`*_kjb
ik`a9311
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $behaoanran%
aj_nulp9pnqa
`abeja9naop]np[`d_l`
`ena_pkneao6
b]e[oanran66
+onr ik`a9311 ksjan9nkkp cnkql9nkkp ejbkni9b]hoa
odahh_kii]j`o6
`a^e]j*naop]np[ejap`66
+ap_+ejep*`+klaj^o`)ejap` naop]np peiakqp9/, ejbkni9pnqa
`a^e]j*naop]np[`d_l`66
+ap_+ejep*`+`d_l/)oanran naop]np peiakqp9/, ejbkni9pnqa
-
将新的
p]ogo+]ll+b]e目录添加到存储库。 -
执行以下步骤使该任务被 FAI 服务器使用:
-
在
LNK@+ejlqpo+_h]ooao+_b*i]ej[_h]ooao中创建b]e[oanran类。 -
在
LNK@+ejlqpo+dkopcnkqlo+_b*b]e[oanran中创建主机组文件,导入_b*_klu[b]e[behao任务,并将该文件添加到 Subversion 存储库。 -
在
LNK@+ejlqpo+dkopcnkqlo+_b*dkopcnkql[i]llejco中设置主机组导入。 -
提交更改并更新
cfengine主服务器上的生产工作副本。
-
在
Subversion 备份
备份 Subversion 存储库的过程相对简单,可以使用
orj]
iej
命令和
dkp_klu` 参数来正确锁定存储库并进行基于文件的备份。这种备份方式比直接复制存储库文件更好,因为直接复制可能会导致备份损坏。
使用以下命令进行备份:
orj]`iej dkp_klu +l]pd+pk+nalkoepknu +l]pd+pk+^]_gql)nalkoepknu
orj]
iej dkp_klu` 创建的存储库是完全可用的,如果出现问题,可以直接替换当前的存储库。可以定期创建存储库备份,并将备份复制到网络中的另一台主机或外部站点。
需要注意的是,每次进行热备份时,都会占用与原始存储库相同的磁盘空间。使用
orj]
iej dkp_klu` 进行多次备份的脚本需要注意不要让备份填满本地磁盘。
创建一个脚本
LNK@+nalh+]
iej)o_nelpo+orj)^]_gql`,内容如下:
+^ej+od
Pdeo o_nelp eo paopa` kj @a^e]j Hejqt kjhu*
L=PD9+o^ej6+qon+o^ej6+^ej6+qon+^ej6+klp+]`iej)o_nelpo
ORJ[NALKO9 +r]n+orj+nalkoepknu+^ej]nu)oanran +r]n+orj+nalkoepknu+_bajceja
_]oa \dkopj]ia\ ej
ap_dh]il&%
a_dk Pdeo eo pda dkop kj sde_d pk ^]_gql pda Oq^ranoekj nalk( _kjpejqejc*
77
&%
a_dk Pdeo eo JKP pda dkop kj sde_d pk ^]_gql pda ORJ nalk( atepejc***
atep -
77
ao]_
为了确保脚本只在正确的主机上运行,使用文件锁定来防止脚本的两次调用同时运行。
创建一个任务来每天运行备份脚本,在
LNK@+ejlqpo+p]ogo+]ll+orj+_b*orj[^]_gqlo
文件中添加以下内容:
odahh_kii]j`o6
orj[oanran*`a^e]j*Dn,,*Iej,,[,166
+klp+]`iej)o_nelpo+orj)^]_gql
peiakqp92,,
使用
cfengine
每天在午夜到午夜后五分钟之间运行备份。需要指定时间范围,以确保
odahh_kii]j
o` 操作能够运行。
最后,将以下行添加到
LNK@+ejlqpo+dkopcnkqlo+_b*orj[oanran
:
p]ogo+]ll+orj+_b*orj[^]_gqlo
提交更改并更新生产工作副本,这样每天午夜都会创建一个新的备份,并且始终保留七天的备份。
复制 Subversion 备份到另一台主机
使用
cfengine
将 Subversion 备份目录复制到本地网络中的另一台主机,以便在 Subversion 服务器出现故障时能够快速恢复两个 Subversion 存储库。
具体操作步骤如下:
1. 修改站点的共享
_boanr
*_kjb
配置文件,授予指定备份主机访问
etchlamp
上备份目录的权限。使用
cfengine
主服务器作为备份主机,并始终保留这些目录的完整备份。在
LNK@+ejlqpo+_boanr
*_kjb
的
]
iep6` 部分添加以下行:
ap_dh]il66
Cn]jp ]__aoo pk pda Oq^ranoekj ^]_gqlo pk pda ckh`i]opan dkop
+r]n+^]_gqlo+^ej]nu)oanran -5.*-24*-*.05
+r]n+^]_gqlo+_bajceja -5.*-24*-*.05
-
创建一个任务来复制目录,在
LNK@+ejlqpo+p]ogo+]ll+orj+_b*_klu[orj[^]_gqlo文件中添加以下内容:
_klu6
behaoanran*Dn,,*Iej.,[.166
+r]n+^]_gqlo+_bajceja
`aop9+r]n+^]_gqlo+orj^]_gqlo+_bajceja
ik`a9111
n9ejb
lqnca9b]hoa
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $orj[oanran%
aj_nulp9pnqa
pnqopgau9pnqa
+r]n+^]_gqlo+^ej]nu)oanran
`aop9+r]n+^]_gqlo+orj^]_gqlo+^ej]nu)oanran
ik`a9111
n9ejb
lqnca9b]hoa
ksjan9nkkp
cnkql9nkkp
pula9_da_goqi
oanran9 $orj[oanran%
aj_nulp9pnqa
pnqopgau9pnqa
`ena_pkneao6
lkhe_udkop66
+r]n+^]_gqlo+orj^]_gqlo+_bajceja ik`a931,
ksjan9`]aikj cnkql9nkkp ejbkni9b]hoa
+r]n+^]_gqlo+orj^]_gqlo+^ej]nu)oanran ik`a931,
ksjan9`]aikj cnkql9nkkp ejbkni9b]hoa
-
在
LNK@+ejlqpo+_kjpnkh+_b*_kjpnkh[_b]cajp[_kjb中添加以下行,以便使用变量抽象 Subversion 服务器的主机名:
orj[oanran 9 $ap_dh]il*_]ilej*jap %
-
在
LNK@+ejlqpo+_h]ooao+_b*i]ej[_h]ooao中添加注释:
# sa ]hok `abeja orj[oanran ]o ] r]ne]^ha ej pda beha
# ejlqpo+_kjpnkh+_b*_kjpnkh[_b]cajp[_kjb ) ql`]pa pd]p beha
# ]o sahh eb ukq _d]jca pda orj[oanran _h]oo ^ahks*
orj[oanran 9 $ap_dh]il %
-
创建一个主机组文件
LNK@+ejlqpo+dkopcnkqlo+_b*lkhe_udkop,内容如下:
eilknp6
]ju66
p]ogo+]ll+orj+_b*_klu[orj[^]_gqlo
通过以上步骤,可以实现对系统的全面备份和管理,提高系统的可靠性和可恢复性。
基础设施增强与备份策略
备份流程总结与优化建议
为了更清晰地理解整个备份流程,下面通过表格和流程图进行总结,并给出一些优化建议。
备份流程表格总结
| 备份对象 | 操作步骤 | 关键命令 |
|---|---|---|
| Jumpstart |
1. 复制
+fqilop]np+lnkbehao
目录到工作副本
2. 添加目录到 Subversion 存储库 3. 创建
cfengine
类并添加主机
4. 创建任务并配置参数 5. 添加目录到 Subversion 存储库 6. 创建新类 7. 创建
dkopcnkql
文件并添加到存储库
8. 设置
cfengine
eilknp
9. 提交更改并更新工作副本 |
o_l
、
orj ]``
、
_klu
、
orj ]``
、
eilknp
|
| Kickstart |
1. 复制重要文件到工作副本
2. 创建目录和任务 3. 添加目录到 Subversion 4. 创建类、主机组文件并设置导入 5. 提交更改并更新工作副本 |
o_l
、
orj ]``
、
_klu
、
orj ]``
、
eilknp
|
| FAI |
1. 收集修改或添加的文件
2. 处理冲突文件 3. 复制文件到工作副本 4. 创建任务并配置参数 5. 添加目录到存储库 6. 创建类、主机组文件并设置导入 7. 提交更改并更新工作副本 |
ho
、
o_l
、
orj ]``
、
_klu
、
orj ]``
、
eilknp
|
| Subversion |
1. 使用
orj]
iej dkp_klu
备份存储库<br>2. 创建备份脚本<br>3. 创建任务每天运行脚本<br>4. 添加任务到主机组文件<br>5. 提交更改并更新工作副本 |
orj]
iej dkp_klu
、
+^ej+od
、
odahh_kii]j
o
、
p]ogo+]ll+orj+_b*orj[^]_gqlo`
| |
| Subversion 备份复制 |
1. 修改配置文件授予访问权限
2. 创建任务复制目录 3. 抽象主机名 4. 添加注释 5. 创建主机组文件 |
_boanr
*_kjb
、
_klu
、
orj[oanran
、
eilknp`
|
备份流程 mermaid 流程图
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B{选择备份对象}:::decision
B -->|Jumpstart| C(复制目录到工作副本):::process
C --> D(添加到 Subversion 存储库):::process
D --> E(创建类和任务):::process
E --> F(提交更改并更新):::process
B -->|Kickstart| G(复制重要文件到工作副本):::process
G --> H(创建目录和任务):::process
H --> I(添加到 Subversion):::process
I --> J(设置类和导入):::process
J --> F
B -->|FAI| K(收集修改文件):::process
K --> L(处理冲突文件):::process
L --> M(复制文件到工作副本):::process
M --> N(创建任务):::process
N --> O(添加目录到存储库):::process
O --> P(设置类和导入):::process
P --> F
B -->|Subversion| Q(使用命令备份存储库):::process
Q --> R(创建备份脚本):::process
R --> S(创建任务每天运行):::process
S --> T(添加任务到主机组文件):::process
T --> F
B -->|Subversion 备份复制| U(修改配置文件):::process
U --> V(创建任务复制目录):::process
V --> W(抽象主机名):::process
W --> X(添加注释):::process
X --> Y(创建主机组文件):::process
Y --> F
F --> Z([结束]):::startend
优化建议
- 自动化脚本 :可以将多个备份步骤整合到一个自动化脚本中,减少手动操作,提高备份效率。例如,编写一个脚本自动完成 Jumpstart、Kickstart 等备份的所有步骤。
- 监控与报警 :设置监控机制,监控备份任务的执行情况。当备份失败或出现异常时,及时发送报警信息,以便管理员及时处理。
- 定期验证备份 :定期验证备份的可用性,确保在需要恢复时能够正常使用。可以编写脚本模拟恢复过程,检查备份文件的完整性。
常见问题及解决方案
在进行备份和恢复操作过程中,可能会遇到一些常见问题,以下是一些问题及对应的解决方案。
备份文件损坏
-
问题描述
:使用
orj]iej dkp_klu` 备份的 Subversion 存储库文件损坏,无法正常恢复。 - 解决方案 :首先,检查备份时的日志文件,查看是否有错误信息。如果是磁盘问题导致的损坏,可以尝试更换磁盘并重新进行备份。另外,定期验证备份文件的完整性,发现问题及时重新备份。
任务执行失败
-
问题描述
:
cfengine任务执行失败,无法完成文件复制或备份操作。 -
解决方案
:检查任务配置文件中的参数是否正确,例如文件路径、权限等。查看
cfengine的日志文件,找出具体的错误原因。如果是权限问题,调整文件或目录的权限;如果是网络问题,检查网络连接是否正常。
脚本冲突
-
问题描述
:在 FAI 备份中,
+ap_+ejap*_kjb文件的aepbehao操作与cfengine的复制操作冲突。 -
解决方案
:如前文所述,修改任务文件,注释掉
aepbehao` 部分,并在文件中添加所需的条目。同时,在任务中添加注释说明处理方式,避免后续出现混淆。
总结
通过对 Jumpstart、Kickstart、FAI 和 Subversion 等系统和存储库的备份操作,以及将 Subversion 备份复制到另一台主机的操作,可以有效提高系统的可靠性和可恢复性。在实际操作过程中,要严格按照步骤进行,注意备份文件的完整性和可用性。同时,根据实际情况进行优化和调整,如自动化脚本、监控报警等,以提高备份效率和管理水平。
此外,随着系统的不断发展和变化,备份策略也需要不断更新和完善。定期评估备份方案,确保其能够满足系统的需求,为系统的稳定运行提供有力保障。
希望以上内容对大家在基础设施备份和管理方面有所帮助,大家可以根据实际情况进行实践和探索,不断优化自己的备份策略。
超级会员免费看
17万+

被折叠的 条评论
为什么被折叠?



