运维之配置变更

Detail Matter, 虽然简单,但却重要!

议题: 如何备份配置文件

  • 在配置中心盛行的情况下,配置每次修改,都会有历史记录(比如etcd/consul等等)。这种系统维护起来当然是非常轻便了。

  • 大量的系统采用本地的配置文件。如何最记录每次的变更呢?

    最简单有效的方式,就是文件名绝对路径+日期,备份到特定的磁盘。

    可以参照: 备份命令脚本,Pros: 逻辑绝对的简单清晰,Cons:服务器放上这个脚本,洁癖症有点难受。

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
#!/bin/bash -e
mybackup() {
src_file=${1?"What files to backup"}

# get default value from environment variable
if [ -n "$BAK_ROOT_DIR" ]; then
bak_root_dir="$BAK_ROOT_DIR"
else
bak_root_dir="/data/backup"
fi

parent_dir=$(dirname "$src_file")
short_fname=$(basename "$src_file")
date="$(date +'%Y%m%d.%H%M%S')"
bak_dir="${bak_root_dir}$parent_dir"
if [ -f "$src_file" ]; then
mkdir -p "$bak_dir"
echo "cp $src_file ${bak_dir}/${short_fname}-${date}"
cp "$src_file" "${bak_dir}/${short_fname}-${date}"
elif [ -d "$src_file" ]; then
mkdir -p "$bak_dir-${short_fname}-${date}"
echo "cp -r $src_file $bak_dir-${short_fname}-${date}"
cp -r "$src_file" "$bak_dir-${short_fname}-${date}"
else
echo "Error: $src_file doesn't exist"
exit 1
fi
}

更特殊的场景

Q:n台nginx,作为负载节点,使用相同的配置文件。如何做到有效的更改,且保证完全的一致呢?

A: 杜绝手工修改产生差异行等情况。通过ansible playbook,统一修改。或修改一处,推送到所有节点,再reload nginx。

Q: 配置文件之备份

A: 首先先思考,这个问题是不是驳论🤔。针对存在文件上的配置文件,如果生产服务器,本来存储都是高可用,那么剩下的最大的风险就是人为失误。于是基于墨菲定律,磁盘定时快照是必不可少的咯。

2021年1月17日 上午10:26:14 补充,在分布式以及容器化的各种场景下,配置文件的维护,更多应该统一从运维平台进行,统一的修改。毕竟运维,不就是可控以及管理嘛。

Author: Chandler Kwok
Link: http://yoursite.com/2020/03/25/%E8%BF%90%E7%BB%B4%E4%B9%8B%E9%85%8D%E7%BD%AE%E5%8F%98%E6%9B%B4/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.