基于ansible role實現LAMP平臺批量部署

前言

作為運維人員,當面對幾十臺或上百臺服務器需要修改某個參數或部署某個平臺,你將從何入手呢?ansible的出現很好的解決了這一困擾,ansible基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。本文帶來的是基于Ansible Role實現LAMP平臺批量部署。

ansible簡介

特性

  • No agents:不需要在被管控主機上安裝任意客戶端

  • No server:無服務器端,使用時直接運行命令即可

  • Modules in any languages:基于模塊工作,可使用任意語言開發模塊

  • YAML,not code:使用yaml語言定制劇本playbook

  • SSH by default:基于SSH工作

  • Strong multi-tier solution:可實現多級指揮

基本架構

ansible基本架構.jpg

命令格式

#常用格式
ansible <host-pattern> [-f forks] [-m module] [-a args]
host-pattern # 可以是all,或者配置文件中的主機組名
-f forks # 指定并行處理的進程數
-m module # 指定使用的模塊,默認模塊為command
-a args # 指定模塊的參數
#查看各模塊
ansible-doc [options] [modules]
# 主要選項有:
-l或--list # 列出可用的模塊
-s或--snippet #顯示指定模塊的簡略使用方法

其他知識點介紹詳見官方文檔,我們直接進入正題

ansible role實現LAMP平臺批量部署

ansible role

ansilbe自1.2版本引入的新特性,用于層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模塊及處理器放置于單獨的目錄中,并可以便捷地include它們的一種機制。角色一般用于基于主機構建服務的場景中,但也可以是用于構建守護進程等場景中。

#創建role的步驟
(1) 創建以roles命名的目錄;
(2) 在roles目錄中分別創建以各角色名稱命名的目錄,如webservers等;
(3) 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、templates和vars目錄;用不
到的目錄可以創建為空目錄,也可以不創建;
(4) 在playbook文件中,調用各角色;
#role內各目錄中可用的文件
tasks目錄:至少應該包含一個名為main.yml的文件,其定義了此角色的任務列表;此文件可以使用in
clude包含其它的位于此目錄中的task文件;
files目錄:存放由copy或script等模塊調用的文件;
templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件;
handlers目錄:此目錄中應當包含一個main.yml文件,用于定義此角色用到的各handler;在handler
中使用include包含的其它的handler文件也應該位于此目錄中;
vars目錄:應當包含一個main.yml文件,用于定義此角色用到的變量;
meta目錄:應當包含一個main.yml文件,用于定義此角色的特殊設定及其依賴關系;
default目錄:為當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件;

實驗拓撲

基于ansible role實現LAMP平臺批量部署.jpg

配置過程

安裝ansible

[root@scholar ~]# yum install ansible -y        #需epel源

配置inventory文件

[root@scholar ~]# vim /etc/ansible/hosts 
#定義被控主機
[webservers]
172.16.10.123 ansible_ssh_user=root ansible_ssh_pass=centos
172.16.10.124 ansible_ssh_user=root ansible_ssh_pass=centos
[dbservers]
172.16.10.125 ansible_ssh_user=root ansible_ssh_pass=centos

實現基于ssh密鑰通信

[root@scholar ~]# ssh-keygen -t rsa -P ''
[root@scholar ~]# yum install sshpass -y  #請確保安裝sshpass,不然無法通信

1.jpg

2.jpg

#另外一組也執行以上操作

#此時可以將/etc/ansible/hosts改為
[webservers]
172.16.10.123 
172.16.10.124 
[dbservers]
172.16.10.125

創建各目錄

[root@scholar ~]# mkdir lamp/role -pv
[root@scholar role]# mkdir web/{files,handlers,meta,tasks,templates,vars,default} db/{fil
es,handlers,meta,tasks,templates,vars,default} php/{files,handlers,meta,tasks,templates,v
ars,default} -p

準備各服務配置文件

[root@scholar role]# cp /etc/httpd/conf/httpd.conf web/files/
[root@scholar role]# cp /etc/php.ini php/files/
[root@scholar role]# cp /etc/my.cnf db/files/

創建各劇本

[root@scholar role]# touch web.yml php.yml db.yml site.yml
[root@scholar role]# touch web/{handlers,tasks}/main.yml db/{handlers,tasks}/main.yml php
/tasks/main.yml
[root@scholar role]# vim web.yml

- name: web service
  remote_user: root
  hosts: webservers
  roles:
    - web

[root@scholar role]# vim php.yml    

- name: php service
  remote_user: root
  hosts: webservers
  roles:
    - php
    
[root@scholar role]# vim db.yml 

- name: mysql service
  remote_user: root
  hosts: dbservers
  roles:
    - db

[root@scholar role]# vim web/tasks/main.yml     

- name: install httpd
  yum: name=httpd state=present
- name: configuration httpd
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:
    - restart httpd
- name: service httpd start
  service: name=httpd enabled=no state=started
  
[root@scholar role]# vim web/handlers/main.yml 

- name: restart httpd
  service: name=httpd state=restarted
  
[root@scholar role]# vim php/tasks/main.yml 

- name: install php
  yum: name=php state=present
- name: configuration php
  copy: src=php.ini dest=/etc/php.ini
  
[root@scholar role]# vim db/tasks/main.yml 

- name: install mysql
  yum: name=mysql state=present
- name: install mysql-server
  yum: name=mysql-server state=present
- name: configuration mysqld
  copy: src=my.cnf dest=/etc/my.cnf
  notify:
    - restart mysqld
- name: service mysqld start
  service: name=mysqld enabled=no state=started
  
[root@scholar role]# vim db/handlers/main.yml 

- name: restart mysqld
  service: name=mysqld state=restarted

批量部署

部署httpd

3.jpg

部署php

4.jpg

部署mysql

5.jpg

查看各節點服務端口是否被監聽

6.jpg

The end

基于ansible role實現LAMP平臺批量部署就簡單說到這里了,以上僅是牛刀小試,其他高難度部署還有待探究,實驗過程中坑也不少,具體遇到問題可留言交流。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5206

(0)
書生書生
上一篇 2015-06-10 15:07
下一篇 2015-06-11 13:18

相關推薦

  • 第二章 操作系統發展史

    Linux主流版本:   Debian(英語發音:/?d?bi?n/)是由GPL和其他自由軟件許可協議授權的自由軟件組成的操作系統,由Debian項目(Debian Project)組織維護。   歷史: Debian于1993年8月16日由一名美國普渡大學學生伊恩·默多克(Ian Murdock)首次發表。伊恩·默多克最初把他的系統稱為…

    Linux干貨 2016-06-03
  • Bind編譯安裝詳解

    Bind編譯安裝詳解 Bind是一款開放源碼的DNS服務器軟件,由美國加州大學Berkeley分校開發和維護的,全名為Berkeley Internet Name Domain它是目前世界上使用最為廣泛的DNS服務器軟件,支持各種unix平臺和windows平臺?,F今互聯網上最常使用的DNS服務器軟件,使用BIND作為服務器軟件的DNS服務器約占所有DNS服…

    Linux干貨 2016-07-22
  • 利用keepalived實現主/從和主/主模式的高性能負載均衡集群

    要求: 1、使用nginx的反向代理功能實現負載均衡 2、keepalived實現高可用 ???????第一組的虛擬地址為172.16.1.100 ????????????D設備的優先級高 ???????第二組的虛擬地址為172.16.1.110 ????????????E設備的優先級高 3、分別實現主/從和主/主兩種配置 集群拓撲: ? ? ? 第一種:主…

    2017-06-25
  • varnish4 基礎實戰

    實驗環境 node1 192.168.0.8 varnish服務器 node2 192.168.0.3 動態web node3 192.168.0.7 靜態web node1安裝varnish ##安裝varnish yum源  # wget http://repo.varnish-cache.org/redhat/v…

    Linux干貨 2016-11-15
  • 文本處理grep

    grep:文本過濾(模式:pattern)工具grep, egrep, fgrep【適合處理比較大的文本】(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 grep(Global search 全局搜索 Regular expression 正則表達式 and Print out …

    Linux干貨 2017-05-09
  • linux分區管理工具—fdisk

    一、關于為什么要分區       (1)為了數據的安全:當文件系統只有一個分區時,如果遇到分區需要格式化的情況,則硬盤里的數據無法保留,而如果提前對硬盤做了分區那么就可以很好地額解決這個問題;       (2)為了提升效率:硬盤(這里單指機械硬盤)分為外圈和…

    Linux干貨 2016-03-12

評論列表(1條)

  • 貓魚
    貓魚 2015-08-26 16:27

    既然是部署LAMP,http的配置文件從哪里來的?

欧美性久久久久