ansible综合架构实战

Ansible Playbook概述

playbook是由一个或多个模块组组成,使用多个不同的模块完成一件事情。

playbook通过yaml语法识别描述的状态文件。扩展名为yaml

1、YAML三板斧

缩进

YAML使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成,不饿能使用tab(默认一个tab=4个空格)

解决方法:

[root@m01 ~]# vim .vimrc

set tabstop=2

冒号

以冒号结尾的除外,其他所有冒号后面必须由空格。

短横线

表示列表项,使用一个短横杠加一个空格。

多个项使用同样的缩进级别作为同一列表。

2、ansible-Playbook命令的常用选项

-C, --check          模拟运算

--list-host 列出剧本主机清单

--list-tags 列出剧本标记

--list-tasks        列出剧本任务

--syntax-check 检测语法

ansible综合架构项目实战

Ansible Playbook架构环境配置

角色              IP                    部署软件

m01          192.168.1.170       ansible

backup     192.168.1.171       rsync

nfs            192.168.1.172       nfs,sersync

web01      192.168.1.173       httpd

web02      192.168.1.174       httpd

1、实施步骤

1)配置ssh密钥认证生效

[root@m01 ~]# ssh-keygen -t rsa

[root@m01 ~]# ssh-copy-id 192.168.1.171

[root@m01 ~]# ssh-copy-id 192.168.1.172

[root@m01 ~]# ssh-copy-id 192.168.1.173

[root@m01 ~]# ssh-copy-id 192.168.1.174

#验证各节点互信

[root@m01 ~]# ssh 192.168.1.171 date && ssh 192.168.1.172 date && ssh 192.168.1.173 date && ssh 192.168.1.174 date

2)安装ansible

[root@m01 ~]# yum install -y ansible

[root@m01 ~]# ansible --version  #查看版本

ansible 2.9.23

3)配置ansible主机清单

[root@m01 ~]# vim /etc/ansible/hosts          #编辑,在最后添加一行

[backup]

192.168.1.171

[nfs]

192.168.1.172

[web]

192.168.1.173

192.168.1.174

[nfzl:children]

backup

nfs

web

#测试主机清单

[root@m01 ~]# ansible nfzl -m ping   

4)基础环境部署

[root@m01 ~]# mkdir -p /etc/ansible/ansible_playbook/{conf,file,scripts,toots}

[root@m01 ansible_playbook]# tree /etc/ansible/ansible_playbook/

/etc/ansible/ansible_playbook/

├── apache.yaml

├── base.yaml

├── conf

│   ├── exports

│   ├── hosts

│   ├── httpd.conf

│   ├── mail.rc

│   ├── rsyncd.conf

│   └── selinux.config

├── file

├── nfs.yaml

├── rsync.yaml

├── scripts

│   ├── rsync_backup.sh

│   └── rsync_check.sh

├── sersync.yaml

├── tools

│   └── sersync

│      ├── confxml.xml

│      └── sersync2

└── toots

5) 准备所有的配置文件

selinux

hosts

httpd.conf

exports

mail.rc

rsync.conf

rsync_backup.sh # 备份脚本

rsync_check.sh  # 检测脚本

sercync # 安装包及配置文件


6)配置playbook

①base playbook

[root@m01 ansible_playbook]# cat base.yaml

- hosts: all

  tasks:

    - name: Disable Selinux

      copy: src=./conf/selinux.config dest=/etc/selinux/config

    - name: Push Hosts File

      copy: src=./conf/hosts dest=/etc/hosts

    - name: Stop Selinux

      shell: setenforce=0

    - name: DisableFirewalld

      service: name=firewalld state=stopped enabled=no

    - name: Create Epel Repo

      get_url: url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo

    - name: Install Rsync Nfs

      yum: name=rsync,nfs-utils state=installed

    - name: Create Group

      group: name=www gid=666

    - name: Create User

      user: name=www uid=666 group=666 create_home=no shell=/sbin/nologin

    - name: Create Directory /Data

      file: path=/data owner=www group=666 recurse=yes state=directory

    - name: Create Directory /Backup

      file: path=/backup owner=666 group=666 recurse=yes state=directory

    - name: Create Scripts Directory

      file: path=/server/scripts state=directory

    - name: Push Rsync Bcakup Scripts

      copy: src=./scripts/rsync_backup.sh dest=/server/scripts/rsync_backup.sh

    - name: Create Rsync Client Passwd File

      copy: content='talent' dest=/etc/rsync.passwd mode=600

    - name: Create Rsync Client Backup Crontab

      cron: name='rsync backup' hour=1 minute=0 job='/bin/sh /server/scripts/rsync_backup.sh &> /dev/null'


②nfs playbook

[root@m01 ansible_playbook]# cat nfs.yaml

- hosts: nfs

  tasks:

    - name: Install Nfs

      yum: name=nfs-utils state=started

    - name: Push NFS Config File

      copy: src=./conf/exports dest=/etc/exports

      notify: Restart NFS

    - name: Start Rpcbind Service

      service: name=rpcbind state=started

    - name: Start NFS service

      service: name=nfs state=started enable=yes

  handlers:

    - name: Restart NFS

      service: name=nfs state=restarted


③rsync playbook

[root@m01 ansible_playbook]# cat rsync.yaml

- hosts: backup

  tasks:

    - name: Install Rsync Mailx

      yum: name=rsync,mailx state=installed

    - name: Push Rsync Config File

      copy: src=./conf/rsyncd.conf dest=/etc/rsyncd.conf

      notify: Restart Rsyncd

    - name: Create Rsync Auth File

      copy: content=rsync_backup:talent dest=/etc/rsync.password mode=600

    - name: Start Rsync Service

      service: name=rsyncd state=started enabled=yes

    - name: Push Mailx Config File

      copy: src=./conf/mail.rc dest=/etc/mail.rc

    - name: Push Rsync Check Scripts

      copy: src=./scripts/rsync_check.sh dest=/server/scripts/rsync_check.sh

    - name: Create Rsync Check Crontab

      cron: name='Rsync Check' hour=5 minute=0 job='/bin/sh /server/scripts/rsync_check.sh &>/dev/null'

  handlers:

    - name: Restart Rsyncd

      service: name=rsyncd state=restarted


④ sersync playbook

[root@m01 ansible_playbook]# cat sersync.yaml

- hosts: nfs

  tasks:

    - name: Install inotify-tools

      yum: name=inotify-tools state=installed

    - name: Push sersync

      copy: src=./tools/sersync dest=/usr/local/ mode=755

    - name: Start Sersync

      shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml


⑤ apache playbook

[root@m01 ansible_playbook]# cat apache.yaml

- hosts: web

  tasks:

    - name: Install Httpd

      yum: name=httpd state=installed

    - name: Config Httpd

      copy: src=./conf/httpd.conf dest=/etc/httpd/conf/httpd.conf

      notify: Restart Httpd Service

    - name: Start Http Service

      service: name=httpd state=started enabled=yes

    - name: Mount NFS Storage

      mount: src=nfs:/data path=/var/www/html fstype=nfs state=mounted

  handlers:

    - name: Restart Httpd Service

      service: name=httpd state=restarted


6) 检测playbook  

#语法加成

[root@m01 ansible_playbook]# ansible-playbook --syntax-check apache.yaml

#模拟运算

[root@m01 ansible_playbook]# ansible-playbook -C apache.yam

#列出剧本主机清

[root@m01 ansible_playbook]# ansible-playbook --list-hosts apache.yaml

#列出剧本任务

[root@m01 ansible_playbook]# ansible-playbook --list-tasks apache.yaml

7)将所有编写好的yaml引入至一个文件中,这样便于一次执行

[root@m01 ansible_playbook]#vim main.yaml

- import_playbook: base.yaml

- import_playbook: rsync.yaml

- import_playbook: nfs.yaml

- import_playbook: sersync.yaml

- import_playbook: apache.yaml

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,548评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,069评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,985评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,305评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,324评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,030评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,639评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,552评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,081评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,194评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,327评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,004评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,688评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,188评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,307评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,667评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,337评论 2 358

推荐阅读更多精彩内容