自动化部署框架之Fabric
系统使用[fabric]部署. 服务器统一安装RedHat 6.5或CentOS 6.5.
部署工作在一台固定服务器(gate)上进行, 源代码clone到该机器的/home/ops/data-engine目录, 部署时都在该目录下操作.
部署要求所有机器上创建ops用户, ops用户可以sudo, 在gate上可以使用公钥、私钥方式登录到所有机器,不需要输入密码。
为安全起见,gate上最好使用ssh-agent,而不要直接生成公钥,私钥对.
安装fabric
$ sudo yum install -y python-devel
$ sudo yum install -y python-pip.noarch
$ sudo pip install fabric
script-name:
fabfile.py&&fab_lib.py&&deploy.py
fabfile.py,实例如下:
#!usr/bin/python
#-*-coding:UTF-8-*-
import time
from fabric.api import env, run, sudo,roles
from fabric.context_managers import cd
from fabric.operations import put
from fabric.contrib.project import rsync_project
#运行用户
app_user = "application"
app_group = "ops"
#登录用户
env.user = "ops"
env.roledefs["web"] = ["192.168.200.184"]
env.roledefs["db"] = ["192.168.200.184"]
env.roledefs["redis"] = ["192.168.200.184"]
env.roledefs["nginx"] = ["192.168.200.184"]
env.roledefs["search"] = ["192.168.200.163","192.168.200.164","192.168.200.165","192.168.200.166"]
env.hosts = list(set(env.roledefs["web"]+env.roledefs["db"]+env.roledefs["redis"]+env.roledefs["search"]))
env.warn_only = True
def start(service):
sudo("/etc/init.d/%s start" % service)
def stop(service)
sudo("/etc/init.d/%s stop" % service)
def status(service)
sudo("/etc/init.d/%s status" % service)
def add_user(user):
sudo("useradd -m %s" % user)
def os_version():
run("uname -a")
def netstat_port(port):
sudo("netstat -anpt | grep %s" %port)
def ip_info():
sudo("ifconfig eth0 | grep 'inet addr:'|awk '{print $2}'")
def host_name():
sudo("hostname")
def upload_file(local_name, remote_path):
系统分成db, redis, search, web(java/nginx)等几个角色,每个角色安装的应用不同.
不同角色可以部署在多台机器上,机器的分配情况请修改fabfile.py指定.
除MySQL外都使用application用户运行,部署的第一步是创建application用户。
## 创建application用户
```bash
$ fab create_runner
```
运行该命令的时候可能会报错:
更改该文件:
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py
看到 56 行上的注释说明,要求 libgmp 为 v5 以上版本。而系统现有版本为 4.1.4
将56和57行注释掉即可
#if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
# _warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
如果原系统已安装jdk,需要在ops和application用户的~/.bash_profile中增加:
```
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk.x86_64
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
```
## 安装db(MySQL)
centos 6.5/redhat 6.5自带的MySQL版本(5.1)过低, 安装当前的MySQL GA版(5.6)最好.
```bash
$ fab install_mysql
```
## 安装redis
```bash
# 安装
$ fab install_redis
$ fab sync_redis_conf
# 启动
$ fab -R redis start:redis
上述启动语句可能不好用,可以使用:
fab start:redis,roles=redis
查看运行状态:
fab status:redis,roles=redis
```
## 安装search
```bash
# 安装
$ fab install_search
$ fab install_search_service
# 启动
$ fab -R search start:elasticsearch
# 重启
fab restart:elasticsearch,roles=search
上述启动语句有可能不好用,可以考虑使用:
fab start:elasticsearch,roles=search
fab stop:elasticsearch,roles=search
查看状态:
fab status:elasticsearch,roles=search
```
## 安装web
```bash
# 安装jdk 1.7
$ fab install_jdk
# 安装nginx
$ fab install_nginx
$ fab sync_nginx_conf
# 启动nginx
$ fab -R web start:nginx
注意:上述启动语句有可能不好用,可以考虑使用:
fab start:nginx,roles=web
# 查看nginx运行状态
$ fab status:nginx,roles=web
# 准备app directory
# fab setup
```
安装java app
```bash
$ ./deploy.sh
# 重启
$ fab restart
```
***注意***:运行环境的配置文件放在shared/etc/下面,第一次部署时,需要把与环境相关的配置文件拷贝到shared/etc下。
## 系统部署图
## 维护
查看状态
```bash
# 查看nginx状态
$ fab -R web status:nginx;或者使用命令:fab status:nginx,roles=web
# 查看app状态
$ fab -R web status:data-engine 或者使用命令:fab status:data-engine,roles=web
# 查看redis状态
$ fab -R redis status:redis 或者使用命令:fab status:redis,roles=redis
# 查看elasticsearch状态
$ fab -R search status:elasticsearch或者使用命令:
fab status:elasticsearch,roles=search
```
各server的cpu/memory/network状态需要监控, 可以使用nagios/zabbix/监控宝.
当cpu/memory使用过高时,需要可虑扩容.
* data-engine 添加机器,部署应用,修改nginx配置
* elasticsearch 添加机器,部署search
* data db, 数据量过大时,可将单个data db部署到独立server, 数据迁移完成后再修改meta db的data_provider相应记录
## 数据安全
对服务器的操作限定只能通过gate操作, 数据库端口不对外(包括办公室)开放.
监控gate登录情况, 有异常用户/ip登录时报警。
监控数据库机器的出口流量, 超过阈值时报警.
------------------------------------------------------------------------------------------------------------------------------
更多请关注:FlyTester,关注技术的测试者
QQ群:456850134
web站:www.flytester.org
微信扫描二维码关注: