一:系统上线基本流程

ansible实战应用之——自动化系统上线_ansible


二:操作环境

ansible主机一台:

    软件需求:haproxy、ansible

    实现功能:haproxy健康监测,ansible自动化运维

tomcat主机两台:

    tomcatA:172.17.214.74

    tomcatB:172.17.214.75

    软件需求:tomcat、nginx

    实现功能:tomcat实现war包上线,nginx负责健康监测页面


三:操作目的

通过ansible,实现war包上线的自动化操作 


四:操作步骤

1、配置阶段

※操作环境:ansible主机

1、配置haproxy

①开启后端服务器状态监测页面
②开启基于页面内容的健康监测
③指明后端主机

编辑haproxy主配置文件,写入如下内容:
frontend  main
    mode http #基于http协议
    bind 0.0.0.0:1080 #监听1080端口
    stats enable #开启服务统计报告
    stats hide-version  #隐藏统计报告版本信息
    stats uri   /haproxyadmin?stats  #统计访问报告url
    stats auth  admin:admin       #登陆认证
    stats admin if TRUE         #验证模式
    default_backend  servers          #默认后端服务器组
backend servers
    balance     roundrobin
    option      httpchk GET /index.html      #开启基于页面内容的健康监测
    http-check expect string up  #定义健康内容为"up"
    server      server1 172.17.214.74:80 check
    server      server2 172.17.214.75:80 check

2、修改ansible配置文件,定义主机组web
[root@server ~]# vim /etc/ansible/hosts
    [web]
    172.17.214.74
    172.17.214.75

3、创建test.sh脚本文件,用来在playbook中对部署后的新war包进行最后一步的健康检测
        #!/bin/bash
        host_ip=`ifconfig | grep "\<inet\>" | grep -v 127.0.0.1 | head -1 | awk '{print $2}'` #截取tomcat主机ip
        curl http://$host_ip/web/ -D curl.txt &> /dev/null    #访问tomcat网站,并将头部信息存放在指定文件中
        num=`head -1 curl.txt| cut -d' ' -f2`    #截取网站响应码
        if [[ "$num" =~ "^[2|3].*" ]];then      #判断响应码是否正常
                exit 0               #正常返回0
        else
                exit 1              #不正常返回1
        fi
        unset num host_ip

4、创建mark.yml文件,定义playbook
    
    - hosts: web
    remote_user: root
    serial: 1   ##按主机顺序执行操作,主机A上线操作全部完成后再进行B的操作
    vars:
        - new: solo-2.2.0.war    #新建new变量,用以存放新上线war包名称
    tasks:
        - name: mark down
          shell: echo "down">/data/webapps/index.html    #mark down,系统下线
        - name: stop tomcat
          service: name=tomcat state=stopped         #关闭tomcat服务
        - name: sleep 5s                   #等待5秒,给予服务关闭充分的时间
          shell: sleep 5
        - name: create new soft link            #新建软链接,源文件替换为新上线war包
          file: src=/data/{{ new }} dest=/var/lib/tomcat/webapps/web.war state=link force=yes
        - name: start tomcat                 #启动tomcat服务
          service: name=tomcat state=started
        - name: sleep 5s                   #等待5秒,给予服务启动充分的时间
          shell: sleep 5
        - name: test the new website
          shell: ./test.sh                  #判断脚本是否执行正常,不正常则中止上线
        - name: mark up                    #mark up,系统上线
          shell: echo "up">/data/webapps/index.html

注意事项:

①playbook语法格式

②serial 1 :即一次执行一台主机,tomcatA成功上线后再轮到tomcatB

③系统上线前,务必要检测新部署网站是否可以正常访问。


※操作环境:tomcat主机 

1、配置tomcat,显示管理页面,用以管理war包的部署
2、配置nginx配置文件,确保后端tomcat主机root相同,并在root下创建index.html文件,写入up/down
3、开启nginx服务
4、将/data目录设为默认新war包存放目录
5、创建 /var/lib/tomcat/webapps/web.war 文件,用以创建软链接

2、测试阶段

①试运行playbook,查看语法错误
[root@server ~]# ansible-playbook mark.yml -C -vv

②语法无误,运行文件
[root@server ~]# ansible-playbook mark.yml

③查看tomcat管理页面,查看是否部署

④再次部署新的.war文件,查看剧本可用性

3、实验效果如下

查看tomcat管理员页面,课件web.war已经自动部署上,点击/web字样即可进入网站

ansible实战应用之——自动化系统上线_ansible_02


注:ansible有关playbook语法使用方法见个人博客 http://blog.51cto.com/13172823/2049192