阿里云vpc迁移过程整理

摘要

vpc迁移已经已经不是第一次了,这次由于是全程一个人主导与建设,因此整个过程记录的比较详细。但是部分内容涉及到敏感信息的问题,因此有些细节不会进行展示

迁移背景

云服务是目前很多创业公司以及中小公司的首选服务,它与传统idc相比有很多优势,而很多公司初期并不重视基础设施的组建以及运维的工作,通常来说在很长的一个时间里,都是由开发来建设和管理(或许中间会有一个初级运维的参与),直到业务以及技术团队达到一个规模之后,才会有有可能成熟的运维加入进来,而这个运维面对的则是一大堆烂摊子。

vpc迁移

什么是vpc迁移呢?

在描述这个问题之前首先要先要搞清楚下面这两个问题。

  • 什么是经典网络
  • 什么是vpc(专有网络)

下面是官方的解释

经典网络:IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。

专有网络:是指逻辑隔离的私有网络,您可以自定义网络拓扑和 IP 地址,支持通过专线连接。适合于熟悉网络管理的用户

看到这里可能有人还是会难以理解,那么我这里简单描述一下。

  • 经典网络一般来说默认会有一个公网ip
  • 经典网络就像是阿里云提供网络环境的一个大的私有网络
  • 专有网络是由你自己配置网络环境的私有网络

私有网络

私有网络是使用在内部网络的地址,无法存在于公网上,ABCDE 5类网中

  • A网中的私有地址范围为10.0.0.0-10.255.255.255
  • B类网的私有地址范围为127.0.0.0-127.255.255.255 172.16.0.0-172.31.255.255
  • C类的为192.168.0.0-192.168.255.255
  • D类为组播地址
  • E类为研究开发预留地址

那么什么是vpc迁移呢?vpc迁移就是把服务从经典网络迁移到专有网络

专有网络的优势

专有网络安全性高、配置灵活、支持多种连接方式。

  • 安全隔离
    • 不同用户的云服务器部署在不同的专有网络。
    • 不同专有网络之间通过隧道ID进行隔离。专有网络内部由于交换机和路由器的存在,所以可以像传统网络环境一样划分子网,每一个子网内部的不同云服务器使用同一个交换机互联,不同子网间使用路由器互联。
    • 不同专有网络之间内部网络完全隔离,只能通过对外映射的IP(弹性公网IP和NAT IP)互联。
    • 由于使用隧道封装技术对云服务器的IP报文进行封装,所以云服务器的数据链路层(二层MAC地址)信息不会进入物理网络,实现了不同云服务器间二层网络隔离,因此也实现了不同专有网络间二层网络隔离。
    • 专有网络内的ECS使用安全组防火墙进行三层网络访问控制。
  • 访问控制
    • 灵活的访问控制规则。
    • 满足政务,金融的安全隔离规范。
  • 软件定义网络
    • 按需配置网络设置,软件定义网络。
    • 管理操作实时生效。
  • 丰富的网络连接方式
    • 支持软件VPN。
    • 支持专线连接。

为什么要vpc迁移

其实会有很多人问这个问题,那么什么人会问这个问题呢?

  • 财务
  • 一些技术
  • others

在迁移过程中因为同一套业务的机器会同时存在两套一段时间,因此在迁移工程中势必会增加公司成本,而迁移完成之后,因为一些公用资源的复用,同时也会缩减一些成本。但缩减的成本可以忽略不计。

那么为什么还要迁移vpc呢?

  • 安全
  • 自行管理配置网络环境
    • IP选择
    • 安全区域
    • 路由控制

最主要的一点还是安全。

vpc由于使用的是私有网络网段,因此本身具有网络隔离属性,在这种情况下其他人是不能访问到你的网络环境的,这也就避免了一些被攻击的可能性。

而安全恰恰是很多公司最欠缺的东西,也是运维最应该重视的问题。

vpc迁移需要的一些设施

但是由于vpc需要自己配置整体的网络环境(有阿里云的后台配置实际上简单了许多),因此建设者还是需要有一些专业能力的。

以下是建设vpc过程中需要用到的一些设施

  • 一个或多个 vpc
    • 路由器
    • 路由表
    • 交换机
  • 高速通道 or vpn隧道 (多个vpc需要互联的情况下)
  • nat网关 or nat机器
    • 多个弹性ip
    • 带宽包
    • DNAT
    • SNAT
  • 安全组
  • 堡垒机
  • openvpn
  • 模板机
  • 其他运维基础设施

为什么需要这些设施

  • 多个vpc是为了划分不同业务区域
  • 多个vpc可通过高速通道进行互联
  • 通过高速通道互联的vpc可通过路由配置访问限制
  • 为什么不用vpn隧道
    • 连接两个vpc需要两个vpn节点
    • 带宽大小有限制,阿里云最大公网带宽200m
    • 公网链路差、不稳定
    • 高速通道同区域不同vpc互联免费
    • 高速通道同区域带宽2G,相当于同一个vpc内网访问
  • nat用于vpc内的机器访问公网的出口
  • nat网关也可以配置将内网的一些端口映射到公网
  • nat网关而不是nat机器
    • nat网关的可用性更高
    • nat网关的SNAT、DNAT规则可以在阿里云后台配置,维护更舒服
    • 可以让多个弹性ip共享带宽包
  • 堡垒机的好处其实不用多说
    • 当然jumpserver(虽然有很多bug)
    • 简单的资产盘点和授权
    • 审计
  • openvpn给开发用的
    • 其实可以直接和办公网隧道打通
    • 一些内网的服务的访问
    • 内部系统接别加公网解析了
  • 模板机的好处懂的自然懂
  • 其他设施部分看情况可选
    • 自动化管理工具:ansible、saltstack
    • 监控:zabbix、open-falcon
    • 内部dns
    • ldap统一认证
    • 代码库:gitlab、svn
    • 代码发布:jenkins、自行开发
    • 日志收集:elk、阿里云日志服务
    • 工单审批:钉钉
    • others

vpc迁移对运维来说的意义

谈不上有太大的意义,整个过程中用到的技术水平并不高,都是每个运维都应该会的东西,只是把一堆东西组织到一起。不过能把这一套环境搭建起来,至少也算是中级以上的水平了。

vpc本身对于运维来说最主要的意义还是安全,额 。。。编不下去了,先这样吧

在vpc使用过程中,其实还要注意一下几点

  • 禁止一切公网ecs、rds等
  • 尽量减少弹性ip的数量,用nat网关DNAT代替
  • 服务全部使用slb代理端口
  • 所有服务绑定域名,禁止绑定ip访问
  • 禁止服务器远程密码登录
  • 禁止root用户远程登录

我觉得这种行为叫做扎口子。

其实我觉得对运维来说最重要的应该是 强迫症 吧。

vpc构建过程记录

  • 创建vpc以及交换机(172.16.0.0/12)
    • BaseManager 运维基础管理环境(172.16.1.0/21)
      • manager:172.16.1.0/24:子网21位预留(华北2e区)
    • TestDev 测试开发环境(172.16.8.0/21)
      • Dev:172.16.8.0/24:子网22位预留(华北2e区)
        • test_dev:172.16.9.0/24(华北2a区)
        • test_dev:172.16.10.0/24(华北2b区)
      • Test:172.16.12.0/24:子网22位预留(华北2e区)
    • ProdGamma 线上生产环境(172.17.1.0/16)
      • Gamma:172.17.1.0/24:子网22位预留(华北2e区)
      • prod_gamma:172.17.2.0/24:子网22位预留(华北2b区)
      • prod_gamma:172.17.3.0/24:子网22位预留(华北2a区)
      • Prod:172.16.8.0/24:子网22位预留(华北2e区)
  • 创建nat网关
    • BaseManager
    • 绑定弹性ip到BaseManager
    • TestDev
    • 绑定弹性ip到TestDev
    • ProdGamma
    • 绑定弹性ip到ProdGamma
  • 创建vpc互联高速通道
    • BaseManager to TestDev
    • BaseManager to ProdGamma
  • 创建安全组
    • BaseManager
    • TestDev
    • ProdGamma
  • 创建模板机

模板机构建记录

  • 系统 Centos7.4
  • 升级kernel
  • 内核版本 3.10.0-693.21.1.el7.x86_64
  • yum update
  • 安装基本环境库(gcc cmake lib等)
  • 修改sshd默认端口9555
  • 关闭iptables
  • 修改history记录,显示时间戳
  • 开启rc.local运行
  • 默认服务安装
    • nginx 1.13.10
    • java 8u77
    • pinpoint 1.6.0
    • mongo-client
    • mysql-client
    • python 3.6.5
  • 服务部署规范
    • 重要服务全部使用源码编译安装,普通服务可以使用yum安装
    • 服务实际目录安装到/usr/local/product,带版本号
    • 服务软链到/usr/local/下,不带版本号
    • 服务日志统一到/data/logs/服务目录下
    • 自定义命令、脚本放到/usr/local/sbin下
  • 修改pinpoint部署位置,修改pinpoint日志位置
  • crontab添加 MAILTO=”” 去除默认的邮件发送
  • python pip源 默认模块
  • 安装supervisord,修改默认配置
  • 安装阿里云日志服务Logtail,未设置开机自启
  • 由于所有机器需要使用jumpserver堡垒机登录,因此无需开启rsyslog日志审计
  • 注释sudoers中tty配置
  • nginx添加80端口默认健康检查虚拟主机
  • 添加jumpserver默认用户
    • jumproot
    • jumpread,添加到services组
  • 整合 zabbix-agent
  • 安装一些常用工具 yum install -y fping nmap iperf iftop iotop ifstat iptraf
  • tuned优化profile
  • 关闭NetworkManager
  • 开启了dns缓存服务(nscd)
  • 添加清理日志脚本 clear_log
    • /data/logs//.log
    • 保留7天
    • 手动执行
  • 整合了nas盘挂载,手动执行(阿里云文件存储nas服务)
    • nas存储需要设置挂载点才能使用
    • 挂载点绑定vpc下的交换机
    • nas存储目前只支持同时创建两个挂载点
    • 默认绑定在BaseManager下172.16.1.0/24交换机上
    • 有其他区域需要可临时设置挂载点
    • ansible机器配置计划任务,每天凌晨4点umount所有机器的挂载以免造成性能损失
  • 升级openssl、openssl-devel
  • 使用trash-cli重新定义rm命令,防止误删,清理回收站等
    • rm! 系统原rm命令
    • rm | RM | r 文件移至回收站
    • rl 列出回收站文件
    • ul 恢复删除的文件,目前只能单个恢复
    • cleartrash days 清理 days 之前的回收站文件,不加时间全部清除
  • 更新系统,安装redis客户端、更新内核版本
  • 更新初始化配置不同环境pinpoint的ip配置

root密码设置

  • root用户添加ansible管理密钥
  • 禁止root远程登录

services 创建服务运行用户以及用户组

  • services添加发布管理key
1
2
root@pts/0 $id services
uid=1000(services) gid=1000(services) groups=1000(services)

devops 创建运维管理账号

  • devops用户添加key与root用户一致
1
2
3
4
5
root@pts/0 $id devops
uid=1001(devops) gid=1001(devops) groups=1001(devops),10(wheel)
root@pts/0 $grep wheel /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL

bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Moss bashrc - START
alias vi='vim'
alias grep='grep --color'
alias dstat='dstat -cdlmnpsy'
alias d='dirs -v | head -10'
alias l='ls -lah --color'
alias la='ls -lAh --color'
alias ll='ls -lh --color'
alias ls='ls --color'
alias lsa='ls -lah --color'
alias rm!='/bin/rm -vi'
alias rm=trash-put
alias RM=trash-put
alias r=trash-put
alias rl=trash-list
alias ur=trash-restore
alias cleartrash=trash-empty
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p authpriv.debug "$(who -u am i): $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$PWD][$RETRN_VAL]"'
# Moss bashrc - END

vimrc

1
2
3
4
5
6
7
8
9
10
11
12
13
" Moss vimrc - START
syntax on
set background=dark
set showcmd
set nobackup
set ts=4
set tabstop=4
set shiftwidth=4
set softtabstop=4
set paste
set laststatus=2
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l/%L,%v][%p%%]
" Moss vimrc - END

profile.d

1
2
3
4
5
# history
export HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S | '
export HISTSIZE=50000
# path
export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/local/nginx/sbin:/usr/local/python/bin"

tcp、内核参数优化

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
# Moss sysctl - START
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
net.ipv4.tcp_timestamps = 1
net.core.somaxconn = 4096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 20000
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
#net.netfilter.nf_conntrack_tcp_timeout_established = 1200
#net.netfilter.nf_conntrack_max = 1048576
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.ip_local_port_range = 1024 65535
vm.swappiness = 0
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
vm.overcommit_memory = 1
# Moss sysctl - END

修改文件句柄限制

1
2
3
4
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

修改PS1

这段暂时不要了

rc.local

1
2
3
4
/usr/lib/systemd/system/rc-local.service
/etc/rc.d/rc.local
systemctl enable rc-local
systemctl start rc-local

java

  • 版本:8u77
  • /usr/java/jdk1.8.0_77/jre/lib/security下面两个jar包替换
  • java.security中random改成urandom 待确认
1
2
3
4
export JAVA_HOME="/usr/local/jdk8"
export JRE_HOME="$JAVA_HOME/jre"
export PATH="$PATH:$JAVA_HOME/bin"
export CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/lib

重新定义rm命令

  • 使用trash-cli重新定义rm
  • 官方文档暂时不建议这么做
1
2
3
4
5
trash-put 将文件或目录移入回收站
trash-empty 清空回收站
trash-list 列出回收站中的文件
restore-trash 还原回收站中的文件
trash-rm 删除回收站中的单个文件
1
2
3
4
5
6
7
alias rm!='/bin/rm -vi'
alias rm=trash-put
alias RM=trash-put
alias r=trash-put
alias rl=trash-list
alias ur=trash-restore
alias cleartrash=trash-empty

以下废弃

  • 添加回收站
  • 防止误删
  • 清理回收站功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
TRASH="/data/.trash"
mkdir -p /data/.trash
alias rm!='/bin/rm -vi'
alias rm=trash
alias r=trash
alias RM=trash
alias rl='ls -l /data/.trash'
alias ur=undelfile
undelfile()
{
mv -i /data/.trash/$@ ./
}
trash()
{
mv $@ /data/.trash/
}
cleartrash()
{
read -p "clear sure?[n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf /data/.trash/*
}

系统初始化脚本

  • 路径
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    ### system
    * 第一次开机自动运行,初始化主机名
    * 再次开机不会重复运行
    * 可无限次手动运行,第一传参为hostname最后一段业务名
    * 阿里云自动设置主机名貌似会在rc.local之后运行,因此需要开机后手动传参运行一次
    ``` bash
    cat init_system
    #!/bin/bash
    # comment: system init scripts #
    # date: 2018-05-03
    if [ ! -z $1 ]; then
    project=".$1"
    else
    [ -f /hostname ] && exit
    fi
    exist=$(ifconfig | grep -c eth1)
    if [ $exist -eq 1 ]; then
    localip=$(ifconfig eth1 | awk '/inet/{print $2}')
    types="class"
    else
    localip=$(ifconfig eth0 | awk '/inet/{print $2}')
    env=$(echo ${localip} | awk -F'.' '{print $2}')
    subnet=$(echo ${localip} | awk -F'.' '{print $3}')
    types="vpc"
    case $env in
    "16")
    case $subnet in
    "1"|"2"|"3"|"4"|"5"|"6"|"7")
    region="manager"
    ;;
    "8"|"9"|"10"|"11")
    region="dev"
    ;;
    "12"|"13"|"14"|"15")
    region="test"
    ;;
    *)
    region="other"
    ;;
    esac
    ;;
    "17")
    case $subnet in
    "1"|"2"|"3"|"4"|"5"|"6"|"7")
    region="gamma"
    ;;
    "8"|"9"|"10"|"11"|"12"|"13"|"14"|"15")
    region="prod"
    ;;
    *)
    region="other"
    ;;
    esac
    ;;
    *)
    region="other"
    ;;
    esac
    fi
    ciHostname="ecs.ali-bj-${types}.${region}.$localip$project"
    hostname ${ciHostname}
    echo ${ciHostname} | tee /etc/hostname /hostname
    sed -i "/127.0.0.1/s/ ecs.*$//" /etc/hosts
    sed -i "/ecs.*/d" /etc/hosts
    flag=$(grep "^${localip} ${ciHostname}" /etc/hosts | wc -l)
    if [ ${flag} -eq 0 ]; then
    echo ${localip} ${ciHostname} >> /etc/hosts
    fi
    localflag=$(grep "127.0.0.1" /etc/hosts | grep ${ciHostname} | wc -l)
    if [ ${localflag} -eq 0 ]; then
    sed -i "/127.0.0.1/s/$/ ${ciHostname}/" /etc/hosts
    fi

disk db

  • 开机后需要手动执行
  • 默认初始化*db磁盘挂载到/data目录
  • 初始化/data下目录以及权限
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
cat init_disk
#!/bin/bash
# comment: *db disk init scripts #
# date: 2018-05-07
partition=$(fdisk -l |grep db | grep Disk | grep dev | tail -n 1 | awk '{print $2}' | sed -e s/://g)
echo ${partition}
if [ ! -z ${partition} ]; then
fdisk $partition <<EOF
n
p
1
w
EOF
mkfs.ext4 $partition'1'
echo "$partition""1 /data ext4 defaults 0 0" >> /etc/fstab
mount -a
df -h
else
echo "not found disk *db!"
exit
fi
mkdir -p /data/home/{install,services,shell,tmp}
mkdir -p /data/logs/{nginx,pinpoint,supervisor,zabbix}
mkdir -p /data/{web,backup}
chown services.services -R /data/home/
echo "ok" > /data/web/index.html
chown www.www -R /data/web/
chown www.www -R /data/logs/nginx

clear_log

  • 手动执行清除
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ``` bash
    #!/bin/bash
    # comment: clear log scripts #
    # date: 2018-05-14
    logDir="/data/logs"
    find ${logDir} -name "*.log" -type f -mtime +7 | xargs rm -f

logrotate

  • 新增/usr/local/logrotate/*,用于一些服务的日志切割
  • 新增计划任务,默认不启用
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
cat nginx
/data/logs/nginx/*.log {
daily
rotate 30
ifempty
#compress
dateext
dateformat -%Y%m%d
missingok
nomail
noolddir
sharedscripts
prerotate
systemctl reload nginx
endscript
postrotate
systemctl reload nginx
YESTERDAY=$(/bin/date --date '1 days ago' +'%Y%m%d')
cd /data/logs/nginx/
LOG_FILE=$(ls -1 *.log-* | grep -v .tar.gz)
for I in ${LOG_FILE};do
LOG_FILE_NAME=$(echo ${I} | awk -F '.log-' '{print $1}')
LOG_FULL_NAME=${LOG_FILE_NAME}.log-${YESTERDAY}
mv ${I} ${LOG_FULL_NAME}
/bin/tar czf ${LOG_FULL_NAME}.tar.gz ${LOG_FULL_NAME}
rm -f ${LOG_FULL_NAME}
done
/bin/find /data/logs/nginx/ -mtime +30 | xargs rm -rf
endscript
}

集成nas挂载

  • 安装依赖
    • CentOS:sudo yum install nfs-utils
    • Ubuntu 或 Debian:sudo apt-get install nfs-common
  • 挂载以及卸载脚本
    • nas
    • unas
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
cat nas
#!/bin/bash
# comment: mount nas scripts #
# date: 2018-05-14
[ ! -d "/data/nas" ] && mkdir -p /data/nas
flag=$(df -h | grep "data/nas" | wc -l)
if [ ${flag} -eq 0 ]; then
mount -t nfs -o vers=3,nolock,proto=tcp 18df2499ac-fjs14.cn-beijing.nas.aliyuncs.com:/ /data/nas/
else
echo "nas already mounted!"
fi
cat unas
#!/bin/bash
# comment: umount nas scripts #
# date: 2018-05-14
flag=$(df -h | grep "data/nas" | wc -l)
if [ ${flag} -eq 0 ]; then
echo "nas already unmounted!"
else
umount /data/nas
fi

nginx配置

1
2
3
4
5
6
7
8
server {
listen 80 default;
server_name _;
location / {
alias /data/web/;
index index.html;
}
}

模板机目前自启进程解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
systemd─┬─AliYunDun───15*[{AliYunDun}] # 阿里云服务进程
├─AliYunDunUpdate───3*[{AliYunDunUpdate}] # 阿里云服务进程
├─2*[agetty] # 终端tty
├─aliyun-service───6*[{aliyun-service}] # 阿里云服务进程
├─atd # 计划任务守护进程
├─auditd───{auditd} # linux安全审计工具
├─chronyd # centos7时间同步服务
├─crond # 计划任务
├─dbus-daemon # D-Bus的非常重要的一个服务,类似于IP网络中的路由器
├─dhclient # 自动获取ip
├─nscd───16*[{nscd}] # 缓存服务
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}] # 日志
├─sshd─┬─sshd───sshd # sshd
│ └─sshd───sshd───bash───sudo───su───bash───pstree
├─systemd-journal # systemd日志服务
├─systemd-logind # systemd 的cgroup管理对象
├─systemd-udevd # 监听内核发出的设备事件,并根据udev规则处理每个事件
├─tuned───4*[{tuned}] # profile优化
├─wrapper─┬─java───14*[{java}] # 阿里云服务进程
│ └─{wrapper}
└─zabbix_agentd───7*[zabbix_agentd] # zabbix-agent

Ansible

  • ansible
  • jumpserver
  • nginx-proxy
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
47
48
49
50
51
52
53
54
cat ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
remote_tmp = $HOME/.ansible/tmp
roles_path = /data/ansible/roles:/etc/ansible/roles
transport = smart
gathering = smart
fact_caching_timeout = 30
require_sudo = False
module_name = shell
private_key_file = /root/.ssh/id_rsa
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
#action_plugins = /data/ansible/ansible_plugins/action_plugins
#connection_plugins = /data/ansible/ansible_plugins/connection_plugins
#lookup_plugins = /data/ansible/ansible_plugins/lookup_plugins
#vars_plugins = /data/ansible/ansible_plugins/vars_plugins
#filter_plugins = /data/ansible/ansible_plugins/filter_plugins
nocolor = 0
fact_caching = memory
host_key_checking = False
timeout = 10
pattern = *
forks = 20
poll_interval = 15
remote_user = devops
remote_port = 9555
log_path = /data/logs/ansible/ansible.log
[inventory]
[privilege_escalation]
become=True
become_exe=sudo
become_method=sudo
become_user=root
become_ask_pass=False
[paramiko_connection]
record_host_keys=False
[ssh_connection]
pipelining = True
[persistent_connection]
[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
accelerate_daemon_timeout = 30
#accelerate_multi_key = yes
[selinux]
[colors]
[diff]

服务supervisor配置

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
[program:jumpcoco]
environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8"
directory = /usr/local/coco/
command = bash /usr/local/sbin/coco
user = root
autostart = true
autorestart = true
stopsignal=QUIT
stopwaitsecs=10
stopasgroup=true
killasgroup=true
stdout_logfile = /data/logs/supervisor/coco.log
stderr_logfile = /data/logs/supervisor/coco_err.log
[program:jumpserver]
environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8"
directory = /usr/local/jumpserver/
command = bash /usr/local/sbin/jumpserver
user = root
autostart = true
autorestart = true
stdout_logfile = /data/logs/supervisor/jumpserver.log
stderr_logfile = /data/logs/supervisor/jumpserver_err.log
[program:jenkins]
environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8", JENKINS_HOME="/data/jenkins/home", JAVA_HOME="/usr/local/jdk8", JRE_HOME="/usr/local/jdk8/jre", PATH='$PATH:/usr/local/maven/bin:/usr/local/jdk8/bin', CLASSPATH="./:/usr/local/jdk8/lib:/usr/local/jdk8/jre/lib"
directory = /data/jenkins/war/
command = /usr/local/jdk8/bin/java -jar jenkins.war
user = jenkins
autostart = true
autorestart = true
stdout_logfile = /data/logs/supervisor/jenkins.log
stderr_logfile = /data/logs/supervisor/jenkins_err.log

迁移进展

grafana

1
2
3
grafana-cli plugins list-remote
grafana-cli plugins install alexanderzobnin-zabbix-app
grafana-cli plugins install grafana-clock-panel

使用模板镜像开机流程

  • 模板机镜像命名规则:ks-template-%Y%m%d
    • 如: ks-template-20180515
  • 阿里云vpc开机会自动随机生成vpc交换机网段内ip
  • 如需修改到指定ip的流程
    • 在阿里云后台停止主机
    • 停止后从配置信息的更多菜单中选取修改私有ip
    • 修改到当前vpc交换机网段的其他ip后开机
  • 新开机器或修改私有ip后
    • 加到jumpserver资产中或修改原有信息
    • 通过jumpserver登录执行初始化脚本
      • 执行 init_system “主机业务分组”
      • 如是新开机器并且分配了数据盘,执行 init_disk
      • 执行重启zabbix_agent systemctl restart zabbix-agent
      • 确认自动注册到zabbix-server中