ansible--使用ansible进行lnmp环境部署

ansible是什么

    ansible是红帽旗下,使用python语言开发,基于ssh协议工作的一款运维工具,与其相似的工具还有puppet、cfengine、chef、func、saltstack,fabric等。
    ansible融合了其他自动化运维工具的优点,实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

ansible的架构

架构图
  • Ansible:核心引擎
  • Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules);
         1. 核心模块:ansible执行的任何任务都不是有自身进行完成,而是调用各种核心模块进行完成;管理主机之前,先调用croe modules进中的模块,然后指明Host Inventory中的主机,完成指定的任务。
         2.自定义模块:ansible支持使用任务语言进行模块的开发,用于补充核心模块的功能不足。
  • Ansible:核心引擎
  • HostInventory :ansible中的主机清单
  • Playbooks :YAML格式文件,提高ansible使用的复用性
  • Plugins:完成模块功能的补充,包括连接插件、邮件插件等
  • Connection Plugins :连接管理主机的插件
    Inventory:定义 Ansible 管理主机的清单

ansible的特性

  • 高度模块化:调用特定的模块,完成特定的任务
  • 基于python语言实现
  • 部署简单:无需agent端,更轻量级 。
  • 支持playbook
  • 幂等性(多次运行结果一样)
  • 支持非root用户管理操作,支持sudo

ansible安装

环境:

操作系统

centos7.6

IP地址

  • ansible: 192.168.44.100
  • node1: 192.169.44.101

关闭ansible node1 node2 中的selinux firewalld以防后续干扰使用,如需启用,也可时候再行启动。

注:本次未使用到ansible的最新特性,仅使用yum的进行安装使用,如需要使用最新特性,请上官方网站上进行下载

安装

      yum -y install ansible   # 请提前配置好epel的yum源
      [root@ansible ~]# ansible --version  # 本次使用的ansible版本,截止到本次使用时ansible最新版本为2.8
        ansible 2.7.10
        config file = /etc/ansible/ansible.cfg  
        configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
        ansible python module location = /usr/lib/python2.7/site-packages/ansible
        executable location = /usr/bin/ansible
        python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

ansible的简单使用

使用前需要配置ansible主机可以直接免密登录被管理主机
配置主机清单
vim  /etc/ansible/hosts  # 本次使用的是yum安装,默认主机清单路径
  [node1]
  192.168.44.101
  1. 可以直接使用命令行工具 ansible
         ansible 主机地址or主机组名or all -m 模块名称-a 模块名称
     例:[root@ansible ~]#   ansible all -m ping 
             192.168.44.101 | SUCCESS => {
             "changed": false, 
             "ping": "pong"
             }
    
  2. ansible-doc
    ansible中有众多模块,可使用-l命令列出,使用-s查看模块的简要使用说明
[root@ansible ~]# ansible-doc -l 
a10_server                                           Manage A10 Networks AX/SoftAX/Th...
a10_server_axapi3                                    Manage A10 Networks AX/SoftAX/Th...
a10_service_group                                    Manage A10 Networks AX/SoftAX/Th...
a10_virtual_server                                   Manage A10 Networks AX/SoftAX/Th...
aci_aaa_user                                         Manage AAA users (aaa:User)     
aci_aaa_user_certificate                             Manage AAA user certificates (aa...
aci_access_port_to_interface_policy_leaf_profile     Manage Fabric interface policy l...
aci_aep                                              Manage attachable Access Entity ...
aci_aep_to_domain                                    Bind AEPs to Physical or Virtual...
aci_ap    
···                     
  1. ansible-playbook
    用于执行ansible的playbook的命令行工具
    playbook的核心元素
    • Hosts 用于执行的主机
    • tasks 主要任务
    • variables 将需要修改的配置抽取为变量,简化配置
    • templates 可以结合facts针对不同的应用场景进行自动修改生成所需的配置文件
    • handle 由特定条件出发的任务
    • roles 用于提高playbook的复用性

使用playbook进行lnmp的安装

v1本次使用yum进行nmp的安装,后续如果需要使用编译方式安装自行修改yaml文件即可
- hosts: node1
  remote_user: root
  tasks:
  - name: install {{ packages }}
    yum: name={{ packages }} state=installed
    vars:
      packages:
        - nginx
        - mariadb-server
        - php-fpm
  - name: create data dir
    command: mkdir -p /data/html
  - name: nginx template        
    template: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf      
  - name: php test page
    copy : src=/tmp/phptest.php dest=/data/html/    
    notify: restart nginx
  - name: start nginx,php-fpm,mariadb
    systemd: name={{ item }} state=started
    with_items:
    - nginx
    - php-fpm
    - mariadb
  handlers:
  - name: restart nginx
    systemd: name=nginx state=restarted

tmp下的两个文件

phptest.php

<?php
phpinfo();
?>

nginx.conf中的server段修改内容

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /data/html;
index index.php index.html index.htm;

    include /etc/nginx/default.d/*.conf;

    location / {
    }
location ~ .*\.*.(php|php5)$ {
   fastcgi_pass 127.0.0.1:9000; 
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
   include fastcgi_params;
}

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

报错及解决

第一次运行yaml文件时有一个警告

TASK [install {{ item }}] *********************************************************************************************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and 
specifying `name: "{{ item }}"`, please use `name: ['nginx', 'php-fpm', 'mariadb']` and remove the loop. This feature will be removed in version 2.11. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

是因为第一次使用了循环的方式进行安装,后续替换成了上面yaml中的形式后不在有警告,因为在2.7中不建议使用这种方式。

task was:

- name:  Install base packages
  apt:
    name:  "{{ item }}"
    state: present
    update_cache: yes
  with_items:
    - htop
    - zsh
    - s3cmd
Very standard.

The new style with Ansible 2.7 should look like:

- name:  Install base packages
  apt:
    name:  "{{ packages }}"
    state: present
    update_cache:  yes
  vars:
    packages:
      - htop
      - zsh
      - s3cmd

v2为提高playbook的可用性,可使用role的方式将playbook进行拆分,并在下次使用时可直接调用相关的yaml文件

Role的默认存放位置在/etc/ansible/roles

可通过修改配置文件修改role的存放位置
以特定的角色名命名目录,子目录命名规则

  • files 存放由copy或者script模块等调用的文件
  • templates template模块查找所需模板文件目录
  • tasks 至少应该包含一个名为main.yaml文件;其他文件需要在此文件中通过include 进行包含
  • handles 至少应该包含一个名为main.yaml文件,其他文件需要通过include进行包含
  • vars 至少应该包含一个名为main.yaml文件,其他文件需要通过include进行包含,格式 name:value
  • meta 至少应该应该包含一个名为main.yaml文件,其他文件通过include进行包含,定义当前角色的特殊设定及其依赖关系
  • default 设定默认变量时使用此目录中的main.yaml文件

子目录不一定需要都存在,需要哪一个创建哪一个

使用时写一个playbook将角色应用到主机上

- hosts: HOSTNAME
  remote_user: REMOTE_USER
  roles:
  - ROLER1
  - ROLER2
  ···

playbook

- hosts: node1
  remote_user: root
  roles:
  - install_lnmp

rolers

[root@ansible roles]# tree
.
└── install_lnmp
    ├── files
    │   └── phptest.php
    ├── handlers
    │   └── main.yaml
    ├── tasks
    │   └── main.yaml
    ├── templates
    │   └── nginx.conf
    └── vars
        └── main.yaml

[root@ansible install_lnmp]# cat handlers/main.yaml 
- name: restart nginx
  systemd: name=nginx state=restarted
[root@ansible install_lnmp]# cat tasks/main.yaml 
- name: install {{ packages }}
  yum: name={{ packages }} state=installed
- name: nginx template
  template: src=nginx.conf dest=/etc/nginx.conf
  notify: restart nginx
- name: create data dir
  shell: mkdir -p /data/html
- name: php_test page
  copy: src=phptest.php dest=/data/html
- name: start service
  systemd: name={{ item }} state=started
  with_items:
  - nginx
  - mariadb
  - php-fpm
[root@ansible install_lnmp]# cat vars/main.yaml 
packages:
- nginx
- php-fpm
- mariadb-server

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

推荐阅读更多精彩内容