基于ansible-playbook编写的消息推送系统自动化部署

基于ansible-playbook 编写的消息推送系统自动化部署。

目录结构

├── ansible.cfg
├── getui_hosts
├── roles
│ ├── init_role
│ │ ├── files
│ │ │ ├── init.bank
│ │ │ └── init.sh
│ │ └── tasks
│ │ └── init.yml
│ ├── middle_role
│ │ ├── flume
│ │ │ └── 1.0.16
│ │ │ ├── rp.properties
│ │ │ └── run.sh
│ │ ├── kafka
│ │ │ └── 2.11-1.0.1
│ │ │ └── topic.j2
│ │ ├── redis
│ │ │ └── 2.8.20
│ │ ├── tasks
│ │ │ ├── create_topic.yml
│ │ │ ├── flume.yml
│ │ │ ├── kafka.yml
│ │ │ ├── redis.yml
│ │ │ └── zookeeper.yml
│ │ └── zookeeper
│ │ └── 3.5.8
│ ├── module_role
│ │ ├── iop
│ │ │ ├── applink
│ │ │ │ └── 1.0.3.0
│ │ ├── mc
│ │ │ │ ├── application.properties
│ │ │ │ ├── application-static.properties
│ │ │ │ └── run.sh
│ │ │ ├── fe
│ │ │ │ ├── 2.0.4
│ │ │ │ └── 2.0.8
│ │ │ ├── ms
│ │ │ │ ├── 2.0.7.0
│ │ │ │ │ ├── application.properties
│ │ │ │ │ └── run.sh
│ │ │ │ └── 2.0.8.0
│ │ ├── push
│ │ │ ├── cm
│ │ │ │ └── 5.1.1.0
│ │ │ │ ├── rp.properties
│ │ │ │ └── run.sh
│ │ │ ├── cm-1
│ │ │ │ └── 5.1.1.0
│ │ │ │ ├── rp.properties
│ │ │ │ └── run.sh
│ │ │ ├── dos
│ │ │ │ ├── 4.0.3.0
│ │ │ │ │ ├── config.properties
│ │ └── tasks
│ │ ├── iop-yml
│ │ │ ├── iop-applink.yml
│ │ ├── mc-yml
│ │ │ ├── mc-appAda.yml
│ │ │ ├── mc-bd.yml
│ │ └── push-yml
│ │ ├── push-amp.yml
│ │ ├── push-apnproxy.yml
│ └── vars
│ ├── init_vars.yml
│ ├── iop_ap.yml
│ ├── iop_run.yml
│ ├── mc_ap.yml
├── script
│ ├── deployFile
│ ├── deploy-init.py
说明:中间省略了大量重复性的模块

模块使用

  1. file、unarchive、shell、register、template、command、debug、when。

主要变量文件

变量文件:init_vars.yml iop_ap.yml iop_run.yml mc_ap.yml mc_run.yml push_rp.yml push_run.yml pv_vars.yml
说明:定义了不同模块间的所有可变量、以及安装路径调用中间件的地址等

模块的yml文件

---
- hosts: xx
  remote_user: xx
  vars_files:
    - /etc/ansible/roles/vars/push_run.yml
    - /etc/ansible/roles/vars/push_rp.yml
    - /etc/ansible/roles/vars/pv_vars.yml
  tasks:
    - name: 创建文件安装文件夹
      file: path={{push_route}}cm state=directory owner=getui group=getui
    - name: 解压cm安装包
      unarchive: src={{pk_push_route}}{{cm_PN}}.tar.gz dest={{push_route}}cm/ mode=0755 copy=yes
    - name: 创建软连接
      file: src={{push_route}}cm/{{cm_PN}} dest={{push_route}}cm/current state=link
    - name: 获取本机ip地址变量
      shell: echo {{ansible_ssh_host}} | awk -F '.' '{print $3"-"$4}'
      register: ip_name
    - name: 替换run文件
      template: src=/etc/ansible/roles/module_role/push/cm/{{cm_VN}}/run.sh dest={{push_route}}cm/current/
    - name: 替换rp文件
      template: src=/etc/ansible/roles/module_role/push/cm/{{cm_VN}}/rp.properties dest={{push_route}}cm/current/config/  
    - name: 执行安装run.sh脚本
      command: chdir={{push_route}}cm/current/ sh run.sh
    #  wait_for: sleep 2
    - name: 检查
      shell: ps -ef | grep {{cm_PN}}
      register: process
    - name: 检查进程是否存在若不存在 输出为-1
      debug: var=process.stdout.find('cm.Main')

说明:不同模块之间可能有少差异,大同的实现是这样的。

中间件的yml文件

kafka

---
- hosts: kafka
  remote_user: getui
  vars_files:
    - /etc/ansible/roles/vars/middle_vars.yml
    - /etc/ansible/roles/vars/pv_vars.yml
  tasks:
    - name: 创建文件安装文件夹
      file: path={{middle_route}}kafka state=directory owner=getui group=getui
    - name: 解压kafka安装包
      unarchive: src={{pk_middle_route}}{{kafka_PN}}.tar.gz dest={{middle_route}}kafka/ mode=0755 copy=yes
    - name: 替换server.properties文件
      template: src=/etc/ansible/roles/middle_role/kafka/2.11-1.0.1/server.properties dest={{middle_route}}kafka/kafka_2.11-1.0.1/config/
    - name: 替换kafka-server-start.sh文件      
      template: src=/etc/ansible/roles/middle_role/kafka/2.11-1.0.1/kafka-server-start.sh dest={{middle_route}}/kafka/kafka_2.11-1.0.1/bin/
    - name: 执行安装启动kafka脚本
      command: chdir={{middle_route}}/kafka/kafka_2.11-1.0.1 ./bin/kafka-server-start.sh -daemon config/server.properties

zookeeper

---
- hosts: ZK
  remote_user: getui
  vars_files:
    - /etc/ansible/roles/vars/middle_vars.yml
    - /etc/ansible/roles/vars/pv_vars.yml
  tasks:
    - name: 创建文件安装文件夹
      file: path={{middle_route}}zookeeper state=directory owner=getui group=getui
    - name: 解压redis安装包
      unarchive: src={{pk_middle_route}}{{zookeeper_PN}}.tar.gz dest={{middle_route}}zookeeper/ mode=0755 copy=yes
    - name: 创建data\dataLog
      file: path={{middle_route}}zookeeper/data state=directory owner=getui group=getui
      file: path={{middle_route}}zookeeper/dataLog state=directory owner=getui group=getui
    - name: 生成server_id在hosts zk 分组指定server_id
      command: echo {{server_id}} > {{middle_route}}zookeeper/data/myid 
    - name: 替换zoo.cfg文件
      template: src=/etc/ansible/roles/middle_role/zookeeper/3.5.8/zoo.cfg dest={{middle_route}}zookeeper/zookeeper-3.5.8/conf/
    - name: 执行安装启动zk脚本
      command: chdir={{middle_route}}zookeeper/zookeeper-3.5.8 ./bin/zkServer.sh start
    - name: 检查
      command: chdir={{middle_route}}zookeeper/zookeeper-3.5.8 ./bin/zkServer.sh status

create_topic.yml

---
- hosts: kafka
  remote_user: getui
  vars_files:
    - /etc/ansible/roles/vars/middle_vars.yml
    - /etc/ansible/roles/vars/pv_vars.yml
  tasks:
    - name: 判断kafka进程是否存活
      shell: jps | grep kafka |wc -l
      register: process
    - debug: var=process.stdout
    - name: 替换topic.j2文件
      template: src=/etc/ansible/roles/middle_role/kafka/2.11-1.0.1/topic.j2 dest=/tmp/topic.sh
    - name: 执行安装启动topic.sh脚本
      shell: sh /tmp/topic.sh
      when: 
        - {{process.stdout}} != "0"
        - {{broker_id}} == "1"

需要注意的地方

在这里插入图片描述创建topic的时候循环读hosts列表,凡是在hosts列表存在的ip地址都可以直接运用变量。
在这里插入图片描述
template:所以变量的替换都用他

这三个用法懂了。就可以看懂这篇文章了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值