自動化運維工具

自動化運維管理工具:php

puppet:
有產品線已經在用,優勢是歷史悠久,比較成熟,在可遠程可本地,功能強勁,不過這廝批量執行功能沒得,爲了批量執行個命令寫個配置文件,好像有點大刀砍蚊子腿的感受了,並且有客戶端在,和受權系統結合比較麻煩。Puppet agent來master請求同步

saltstack:
ansible都是python流的,並且就功能上來說,二者也極爲類似,不一樣之處是salt stack是有客戶端的,而且execution模塊還用0MQ實現了pub-sub,命令和執行結果所以能夠高效並行傳輸,不過成也蕭何敗也蕭何,第一個sub階段(將querystring下發到全部機器,而後收集機器響應的階段)太依賴與客戶端返回了,若是客戶端未能及時返回或未響應的話,playbook執行階段可能會直接漏掉這部分機器而沒有任何提示,這對於運維來講是不可接受的,要改造這個就得推掉saltstack的現有架構…算了吧。Master手推同步信息到agent

ansible:
與前二者比起來,在特性上彷佛並不搶眼,配置管理方面(playbook)絕對比不過老大哥puppet,批量執行方面也只是多線程,不像saltstack那麼高大上,不過ansible搜索熱度高出saltstack三倍多,顯然靠的不是吹牛,至少,ansible至少不會悄悄的丟機器,這給了咱們一個定心丸,並且僅依賴ssh,與登陸受權管理系統自然集成,簡單即有效,沒有比這更美妙的事情了。Master手推同步信息到agentpython

Puppetmysql

Ruby語言nginx

運維工具c++

OS poriovisioning(pxe,)系統自動安裝web

OS configuration(puppet,ansible,chef,saltstack)sql

Command and control任務執行(func,ansible)shell

 

Ansible能實現puppet的全部功能  puppet比ansible能管理的節點多編程

 

 

Puppet:IT基礎設施自動化管理工具(較ansible安全)api

整個生命週期:

Provisioning系統安裝

Configuration配置

Orchestration編排

Reporting報告

 

模式:

Master/agent模式

Master:puppet server

Agent(1,ansible遠程安裝puppet agent

2,把agent製做在操做系統中):要有管理功能,真正執行所謂管理操做的核心部件,週期性的去master請求與本身相關的的配置

 

工做模式:

聲明性,基於模型:

定義:使用puppet配置語言定義基礎配置信息

模擬:測試

強制(執行):比對客戶端主機與定義的目標保持一致

報告:puppet  api 返回執行結果

 

三個層次:

spacer.gif配置語言:

事務層:資源之間的前後依賴關係;配置文件改變出發重啓

資源抽象層:把主機上每一個能夠被管理對象都抽象定義爲資源

資源類型:用戶,組,文件,服務,cron任務等

屬性及狀態與其實現方式是分離的:

每個資源都應該定義其指望狀態

 

核心組件:資源

資源清單:manifests,定義了一個或多個資源(須要進行的操做)server端

資源清單及清單中的資源定義的全部依賴文件,模板等數據按特定結構組織起即爲模塊

站點清單:用來記錄一個主機包含的全部清單

模塊:清單的組合

 

 邏輯順序:spacer.gif

 

 

可在本地模式運行或者在master和agent模式運行:

1,agent向master發送與本身相關的catalog,併發送本身的主機名和facts(主機本身的屬性:IP地址,主機名,CPU等信息);

2,服務端收到請求,查找請求者的站點清單(請求者調用了的清單);

3,查詢完以後找出這個站點的全部清單;

4,將清單在master端進行編譯(catalog);

5,將編譯結果(僞代碼(catalog))發送到agent端[不可能將源代碼發送到agent端];

6,僞代碼在agent端的應用:

1,狀態查詢:已經完成的任務和須要再進行的任務。

2,執行目標狀態:執行查詢到的狀態

7,任務執行完返回報告。

 

 

經過http協議進行通信,證書認證,master自帶CA,agent自動生成帶簽署的證書發給master的CA

 

安裝:

Agent:puppet,facter

Master:puppet-server

命令用法格式:

Puppet  <subcommand> [options] <action> [options]

 

獲取所支持的全部的資源類型:

Puppetdescribe -i

Puppet 資源類型名稱(file,package等) -i  ##資源的具體使用方法

 

puppet實現lnmp架構):

nginx:

file文件夾

install-nginx.sh:##將安裝好安裝包的全部過程命令都寫到這裏

#!/bin/bash

cd /mnt

tar -zxf nginx-1.8.0.tar.gz

cd nginx-1.8.0

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module

make && make install

nginx.conf:###所安裝的nginx配置文件

nginx安裝包

 

mainfests

config.pp:

class nginx::config {

 

file {

"/usr/local/lnmp/nginx/conf/nginx.conf":

source => "puppet:///modules/nginx/nginx.conf",

require => Class["nginx::install"],

notify => Class["nginx::service"]

}

 

}

install.pp:

class nginx::install{

 

package {

["pcre-devel","gcc","openssl-devel"]:

ensure => present

}

 

file {

"/mnt/nginx-1.8.0.tar.gz":

source => "puppet:///modules/nginx/nginx-1.8.0.tar.gz";

"/mnt/install-nginx.sh":

source => "puppet:///modules/nginx/install-nginx.sh"

}

 

exec {

"install nginx":

command => "sh /mnt/install-nginx.sh",

creates => "/usr/local/lnmp/nginx",

provider => shell,

require => File["/mnt/install-nginx.sh"]

}

 

}

init.pp:

class nginx {

 

include nginx::install,nginx::config,nginx::service

 

}

service.pp:

class nginx::service {

 

exec {

"start nginx":

command => "/usr/local/lnmp/nginx/sbin/nginx",

provider => shell,

require => Class["nginx::config"]

}

 

}

MySQL:

files

install-myslq.sh:

my.cnf

安裝包

mainfests

config.pp

class mysql::config {

 

file {

"/etc/my.cnf":

source => "puppet:///modules/mysql/my.cnf",

require => Class[mysql::install],

notify => Class[mysql::service]

}

 

}

 

init.pp:

class mysql {

include mysql::install,mysql::config,mysql::service

}

 

install.pp:

class mysql::install {

 

package {

["gcc-c++","make","ncurses-devel","bison","zlib-devel","cmake"]:

ensure => present

}

 

file {

"/mnt/mysql-5.5.12.tar.gz":

source => "puppet:///modules/mysql/mysql-5.5.12.tar.gz";

"/mnt/install-mysql.sh":

source => "puppet:///modules/mysql/install-mysql.sh"

}

 

exec {

"install mysql":

command => "cd /mnt;sh install-mysql.sh",

provider => shell,

creates => "/usr/local/lnmp/mysql",

timeout => 9999,

require => File["/mnt/install-mysql.sh"],

tries => 3

}

 

}

 

service.pp:

class mysql::service {

 

exec {

"start mysql":

command => "/etc/init.d/mysqld start",

provider => shell,

require => Class["mysql::install"]

}

 

}

 

php:...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ansible:

OS Provisioning:PXE,Cobbler(repositorydistritution,profile

PXE:Dhcp(服務端udp 67  客戶端udp 68)

Tftp(udp 69)

Dnsmasq:dhcp

 

OS config:

Puppet,saltstack

 

 

運維工具分類:

Agent:puppet,saltstack

agent:ansible,依賴於每一個被管理主機運ssh服務

Aansible特色:

使用簡單,靈活

模塊可以使用任意語言

多任務批量執行-->>playbook

YAML標籤來定義文本文檔格式

 

當管理多個不一樣服務的服務器時,每一個服務器都須要安裝

NTP   時間同步

 

spacer.gif 

 

基本結構組件(5個):

Ansible core:核心組件

Host Inventory主機列表:用來定義由ansible可以管理的服務器的IP地址,掩碼,ssh用戶密碼等信息

支持分類,分組

Core核心模塊:調用管理模塊來針對某個用戶完成相對任務

大部分任務   而不是所有任務

Custom自定義模塊:能夠用各類語言來自定義模塊,完成ansible不具備的模塊

Connection 鏈接插件:用來與主機鏈接,鏈接插件paramiko

Playbook:用於將一個或多個主機須要進行的任務記錄下來用於執行,能夠屢次調用執行,yaml,jinjia2定義模板

特性:1,基於Python實現,paramiko,pyyaml,jinjia2三個關鍵模塊

2,部署簡單,無agent

3,默認使用ssh協議,1,密鑰認證;2,在inventor中指明密碼

4,主從模式:master:asible,ssh 客戶端

Slave:ssh  server

5,支持自定義模塊,支持各類編程語言

6,支持playbook

7,基於模塊完成各類任務

 

配置文件:/etc/ansible/ansible.cfg定義批量執行的個數等信息

/etc/ansible/hostsinventory記錄表

分組

[web]

Ip

[mysql]

ip

 

支持通配符[001:006]

命令:ansible-playbook

Ansble-doc -l:顯示ansible支持的模塊

Ansible-doc -s:查看模塊的具體信息

 

Ansible [主機] -m  模塊  -a  ‘參數’

 

Ansible   webserver  -m  cron  -a ‘minute=*/10 job=/bin/echo hello name=test cron job ’

 

Ping:測試指定主機可否鏈接

Service:指定運行狀態

Enable=:取值true 開機啓動,flase開機不啓動

Name=:服務名稱

State=:狀態,取值有  started,stopped,restarted

 

Shell:在遠程主機上執行命令,尤爲是管道等功能複雜的命令

Script:將本地腳本複製到遠程主機並運行,要使用相對路徑指定腳本

Yum 安裝程序包

Name:指明要安裝的程序包,能夠帶上版本號

State:present,lastest表示安裝,absent表示卸載

 

YAML 標記語言:

鍵值對加縮進

可讀性好

和腳本語言交互好

使用實現語言的數據類型

有一個一致的信息模型

易於實現

基於流來處理

表達能力強,擴展性好

 

 

語法:

YAML的語法和其餘告誡語言相似,而且能夠簡單的表達清單,散列表,標量的數據結構,其結構經過空格來展現,序列(同一類對象有多個時叫序列)裏的項用‘  -  ’ 表示,Map裏的鍵值對用‘ :’分隔

List序列/列表:

- 表示,表示同一類型的對象

Dictionary 字典:

一個鍵對應一組值,也能夠放置於{key:value}中

 

基礎元素:

變量

Inventory

條件測試

迭代

 

   Playbook的組成結構:

Inventory

Modules

Ad Hoc Commands

Playbooks

Tasks:任務,調用模塊完成的某操做

Varliables:變量

Templates:模板

Handlers:處理器,有某件事情觸發執行的操做

Roles:角色

 

基本結構:

- host: webservers

remote_user:

tasks:

- task1

 module_name:module_args

- task2

相關文章
相關標籤/搜索