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

一:系统上线基本流程
html

image.png


二:操做环境
nginx

ansible主机一台:web

    软件需求:haproxy、ansibleshell

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

tomcat主机两台:后端

    tomcatA:172.17.214.74tomcat

    tomcatB:172.17.214.75
bash

    软件需求:tomcat、nginx服务器

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


三:操做目的

经过ansible,实现war包上线的自动化操做 


四:操做步骤

一、配置阶段

※操做环境:ansible主机

一、配置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

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

三、建立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

四、建立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主机 

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

二、测试阶段

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

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

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

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

三、实验效果以下

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

image.png


注:ansible有关playbook语法使用方法见我的博客 http://www.javashuo.com/article/p-eodvoqgz-cy.html

相关文章
相关标签/搜索