自动化部署工具Fabric

自动化部署框架之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

微信扫描二维码关注:

自动化部署工具Fabric_第1张图片

你可能感兴趣的:(自动化部署)