基于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
下一篇 2015-06-11

相關推薦

  • Linux中文件管理類命令初探

    Linux中文件管理類命令初探 文件管理通常指的是對文件或者目錄進行的類似復制、移動、刪除操作。 1. 文件的復制 cp 在Linux中使用cp指令完成文件復制工作,即copy之意。實際操作中又可以分為以下兩種情況: 單源復制 單源復制即復制的源只有一個,這個源可以為文件或者目錄。命令語法:cp [OPTION]… [-T] SOURCE DEST在實際…

    Linux干貨 2016-11-06
  • 聯通電信雙鏈路內網VRRP+BFD&&PPTP+MYSQL+FreeRadius實現IDC堡壘機連接IDC機房

    一、具體需求與實現 1、多wan:兩條寬帶接入鏈路,使用VRRP+BFD技術,實現鏈路冗余; 2、IDC機房遠程管理和登錄限制:使用PPTP+freeRadius+mysql實現VPN,限制指定網段或IP進行撥號認證登錄IDC機房,并編寫腳本檢查非法用戶登錄IDC機房服務器情況; 3、內網VLAN劃分:利于安全管理、IP分流和帶寬限制; 4、內網監控:使用N…

    Linux干貨 2016-08-22
  • 第四周作業

    1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 [root@localhost ~]# chmod -R g=,o=  /home/tuser1 [root@localhost home]# ll drwx——  3 root&…

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

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

    2017-06-25
  • linux第五周小結

    不知不覺已經第五周了,好快?。∵@周我們主要講了讀命令,查找命令,壓縮,解壓縮,安裝等命令,今天我總結一下查找命令 查找命令主要有:locate和find命令,但我們經常用到的也最實用的當屬find,下面我重點總結一下find命令 有時可能需要在系統中查找具有某一特征的文件(例如文件權限、文件屬主、文件長度、文件類型等等)。這樣做可能有很多原因。可能出于安全性…

    2017-08-13
  • 文本處理學習小結

    抽取文本的工具 文件內容:less和cat 文件截?。篽ead和tail 按列抽取:cut 按關鍵字抽?。篻rep 文件查看 復制標準輸入到標準輸出 文件查看命令:cat, tac,rev cat命令: cat [OPTION]… [FILE]… -E: 顯示行結束符$ -n: 對顯示出的每一行進行編號 -A:顯示所有控制符 -b:非…

    Linux干貨 2016-08-07

評論列表(1條)

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

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

欧美性久久久久