1. 程式人生 > >java分散式系統部署學習(二)ansible構架

java分散式系統部署學習(二)ansible構架

一、Ansible基本架構

ansible是一個模型驅動的配置管理器,支援多節點發布、遠端任務執行。預設使用 SSH 進行遠端連線。無需在被管理節點上安裝附加軟體,可使用各種程式語言進行擴充套件。
這裡寫圖片描述
上圖為ansible的基本架構,從上圖可以瞭解到其由以下部分組成:

  • 核心:ansible
  • 核心模組(Core Modules):這些都是ansible自帶的模組
  • 擴充套件模組(Custom Modules):如果核心模組不足以完成某種功能,可以新增擴充套件模組
  • 外掛(Plugins):完成模組功能的補充
  • 劇本(Playbooks):ansible的任務配置檔案,將多個任務定義在劇本中,由ansible自動執行
  • 連線外掛(Connectior Plugins):ansible基於連線外掛連線到各個主機上,雖然ansible是使用ssh連線到各個主機的,但是它還支援其他的連線方法,所以需要有連線外掛
  • 主機群(Host Inventory):定義ansible管理的主機

二、ansible工作原理

這裡寫圖片描述
這裡寫圖片描述
以上是從網上找到的兩張ansible工作原理圖,兩張圖基本都是在架構圖的基本上進行的拓展。從上面的圖上可以瞭解到:

1、管理端支援local 、ssh、zeromq 三種方式連線被管理端,預設使用基於ssh的連線---這部分對應基本架構圖中的連線模組;

2、可以按應用型別等方式進行Host Inventory(主機群)分類,管理節點通過各類模組實現相應的操作---單個模組,單條命令的批量執行,我們可以稱之為ad-hoc;

3、管理節點可以通過playbooks 實現多個task的集合實現一類功能,如web服務的安裝部署、資料庫伺服器的批量備份等。playbooks我們可以簡單的理解為,系統通過組合多條ad-hoc操作的配置檔案 。

三、ansible的十個命令

安裝完ansible後,發現ansible一共為我們提供了七個指令:ansible、ansible-doc、ansible-pull、ansible-config、ansible-galaxy、ansible-vault、ansible-connection、ansible-inventory、ansible-console、ansible-playbook 。這裡我們只檢視usage部分,詳細部分可以通過 “指令 -h” 的方式獲取。

1、ansible

[root@localhost ~]# ansible -h
Usage: ansible <host-pattern> [options]

ansible是指令核心部分,其主要用於執行ad-hoc命令,即單條命令。預設後面需要跟主機和選項部分,預設不指定模組時,使用的是command模組。如:

deMacBook-Pro:~ fuxinpeng$ ansible localhost -a 'date'
localhost | SUCCESS | rc=0 >>
2017121日 星期五 160121CST

不過預設使用的模組是可以在ansible.cfg 中進行修改的。ansible命令下的引數部分解釋如下:

引數:
  -a 'Arguments', --args='Arguments' 命令列引數
  -m NAME, --module-name=NAME 執行模組的名字,預設使用 command 模組,所以如果是隻執行單一命令可以不用 -m引數
  -i PATH, --inventory=PATH 指定庫存主機檔案的路徑,預設為/etc/ansible/hosts.
  -u Username, --user=Username 執行使用者,使用這個遠端使用者名稱而不是當前使用者
  -U --sud-user=SUDO_User  sudo到哪個使用者,預設為 root
  -k --ask-pass  登入密碼,提示輸入SSH密碼而不是假設基於金鑰的驗證
  -K --ask-sudo-pass 提示密碼使用sudo
  -s --sudo sudo執行
  -S --su 用 su 命令
  -l  --list 顯示所支援的所有模組
  -s --snippet 指定模組顯示劇本片段
  -f  --forks=NUM 並行任務數。NUM被指定為一個整數,預設是5#ansible testhosts -a "/sbin/reboot" -f 10 重啟testhosts組的所有機器,每次重啟10臺
  --private-key=PRIVATE_KEY_FILE 私鑰路徑,使用這個檔案來驗證連線
  -v --verbose 詳細資訊
  all  針對hosts 定義的所有主機執行
  -M MODULE_PATH, --module-path=MODULE_PATH 要執行的模組的路徑,預設為/usr/share/ansible/
  --list-hosts 只打印有哪些主機會執行這個 playbook 檔案,不是實際執行該 playbook 檔案
  -o --one-line 壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。
  -t Directory, --tree=Directory 將內容儲存在該輸出目錄,結果儲存在一個檔案中在每臺主機上。
  -B 後臺執行超時時間
  -P 調查後臺程式時間
  -T Seconds, --timeout=Seconds 時間,單位秒s
  -P NUM, --poll=NUM 調查背景工作每隔數秒。需要- b
  -c Connection, --connection=Connection  連線型別使用。可能的選項是paramiko(SSH),SSH和地方。當地主要是用於crontab或啟動。
  --tags=TAGS 只執行指定標籤的任務    例子:ansible-playbook test.yml --tags=copy  只執行標籤為copy的那個任務
  --list-hosts 只打印有哪些主機會執行這個 playbook 檔案,不是實際執行該 playbook 檔案
  --list-tasks 列出所有將被執行的任務
  -C, --check 只是測試一下會改變什麼內容,不會真正去執行;相反,試圖預測一些可能發生的變化
  --syntax-check 執行語法檢查的劇本,但不執行它
  -l SUBSET, --limit=SUBSET 進一步限制所選主機/組模式  --limit=192.168.0.15 只對這個ip執行
  --skip-tags=SKIP_TAGS 只執行戲劇和任務不匹配這些值的標籤  --skip-tags=copy_start
  -e EXTRA_VARS, --extra-vars=EXTRA_VARS  額外的變數設定為鍵=值或YAML / JSON
        #cat update.yml
        ---
        - hosts: {{ hosts }}
          remote_user: {{ user }}
        ..............
        #ansible-playbook update.yml --extra-vars "hosts=vipers user=admin"   傳遞{{hosts}}、{{user}}變數,hosts可以是 ip或組名
  -l,--limit 對指定的 主機/組 執行任務  --limit=192.168.0.10192.168.0.11 或 -l 192.168.0.10192.168.0.11 只對這個2個ip執行任務

2、ansible-doc

# ansible-doc -h
Usage: ansible-doc [options] [module...]

該指令用於檢視模組資訊,常用引數有兩個-l 和 -s ,具體如下:

//列出所有已安裝的模組
# ansible-doc  -l
//檢視具體某模組的用法,這裡如檢視command模組
# ansible-doc  -s command

3、ansible-galaxy

# ansible-galaxy -h
Usage: ansible-galaxy [init|info|install|list|remove] [--help] [options] ...

ansible-galaxy 指令用於方便的從https://galaxy.ansible.com/ 站點下載第三方擴充套件模組,我們可以形象的理解其類似於centos下的yum、python下的pip或easy_install 。如下示例:

[[email protected] ~]# ansible-galaxy install aeriscloud.docker
- downloading role 'docker', owned by aeriscloud
- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.0.0.tar.gz
- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker
- aeriscloud.docker was installed successfully

這個安裝了一個aeriscloud.docker元件,前面aeriscloud是galaxy上建立該模組的使用者名稱,後面對應的是其模組。在實際應用中也可以指定txt或yml 檔案進行多個元件的下載安裝。這部分可以參看官方文件

4、ansible-lint

ansible-lint是對playbook的語法進行檢查的一個工具。用法是ansible-lint playbook.yml 。

5、ansible-playbook

該指令是使用最多的指令,其通過讀取playbook 檔案後,執行相應的動作,這個後面會做為一個重點來講。

6、ansible-pull

該指令使用需要談到ansible的另一種模式---pull 模式,這和我們平常經常用的push模式剛好相反,其適用於以下場景:你有數量巨大的機器需要配置,即使使用非常高的執行緒還是要花費很多時間;你要在一個沒有網路連線的機器上執行Anisble,比如在啟動之後安裝。這部分也會單獨做一節來講。

7、ansible-vault

ansible-vault主要應用於配置檔案中含有敏感資訊,又不希望他能被人看到,vault可以幫你加密/解密這個配置檔案,屬高階用法。主要對於playbooks裡比如涉及到配置密碼或其他變數時,可以通過該指令加密,這樣我們通過cat看到的會是一個密碼串類的檔案,編輯的時候需要輸入事先設定的密碼才能開啟。這種playbook檔案在執行時,需要加上 –ask-vault-pass引數,同樣需要輸入密碼後才能正常執行。具體該部分可以參查官方部落格

8、ansible-connection

9、ansible-inventory

10、ansible-console

注:上面的指令,用的最多的只有兩個ansible 和ansible-playbook ,這兩個一定要掌握,其他五個屬於拓展或高階部分。

相關推薦

java分散式系統部署學習()ansible構架

一、Ansible基本架構 ansible是一個模型驅動的配置管理器,支援多節點發布、遠端任務執行。預設使用 SSH 進行遠端連線。無需在被管理節點上安裝附加軟體,可使用各種程式語言進行擴充套件。 上圖為ansible的基本架構,從上圖可以瞭解到其由以下

java分散式系統部署學習(九)ansible-playbook進階

一、併發執行 ansible預設只會建立5個程序,所以一次任務只能同時控制5臺機器執行.那如果你有大量的機器需要控制,或者你希望減少程序數,那你可以採取非同步執行.ansible的模組可以把task放進後臺,然後輪詢它.這使得在一定程序數下能讓大量需要的機器同時運作起來. 使用asy

java分散式系統部署學習(六)ansible Ad-hoc與commands模組

Ad-Hoc 是指ansible下臨時執行的一條命令,並且不需要儲存的命令,對於複雜的命令後面會說playbook。講到Ad-hoc 就要提到模組,所有的命令執行都要依賴於事先寫好的模組,預設安裝好的ansible 裡面已經自帶了很多模組,如:command、r

java分散式系統部署學習(五)ansible Dynamic Inventory

Ansible Inventory實際上是包含靜態Inventory和動態Inventory兩部分,靜態Inventory指的是在檔案/etc/ansible/hosts中指定的主機和組,Dynamic Inventory指通過外部指令碼獲取主機列表,並按照an

java分散式系統部署學習(四)ansible配置ansible.cfg

Ansible預設安裝好後有一個配置檔案/etc/ansible/ansible.cfg,該配置檔案中定義了ansible的主機的預設配置部分,如預設是否需要輸入密碼、是否開啟sudo認證、action_plugins外掛的位置、hosts主機組的位置、是否開啟

java分散式系統部署學習(三)ansible的Inventory與Patterns

Ansible的Inventory檔案,可以理解為saltstack中的salt-key中的所有minion的列表以及使用者自定義的nodegroup的概念,預設情況下這個檔案是/etc/ansible/hosts ,後面還會講到Dynamic Inventor

java多線程學習

ati rri code pub ner read 線程學習 參數傳遞 void //1,定義一個類實現Runnable //2,重寫run方法 //3,將要執行的代碼寫在run方法中 //4,創建Runnable的子類對象 //5,將其當作參數傳遞給Thread的構造函數

ELK 實現 Java 分散式系統日誌分析架構

ELK 實現 Java 分散式系統日誌分析架構 日誌是分析線上問題的重要手段,通常我們會把日誌輸出到控制檯或者本地檔案中,排查問題時通過根據關鍵字搜尋本地日誌,但越來越多的公司,專案開發中採用分散式的架構,日誌會記錄到多個伺服器或者檔案中,分析問題時可能需要檢視多個日誌檔案才能定位問題,如果相關

Java分散式系統搭建--入門1

1 分散式 1.1 什麼是分散式 分散式系統一定是由多個節點組成的系統。其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。 這些連通的節點上部署了我們的節點,並且相互的操作會有協同。分散式系統對於使用者而言,他們面對的就是一個伺服器,提供使用者需要的

ELK(elasticsearch+logstash+kibana)實現Java分散式系統日誌分析架構

日誌是分析線上問題的重要手段,通常我們會把日誌輸出到控制檯或者本地檔案中,排查問題時通過根據關鍵字搜尋本地日誌,但越來越多的公司,專案開發中採用分散式的架構,日誌會記錄到多個伺服器或者檔案中,分析問題時可能需要檢視多個日誌檔案才能定位問題,如果相關專案不是一個團隊維護

Java分散式系統高併發解決方案

對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。 為了更好的理解併發和同步,我們需要先明白兩個重要的概念:同步和非同步    1

基於Dubbo的分散式系統架構()-訊息中介軟體在分散式系統中的作用及介紹

一、訊息中介軟體的定義        Message-orientedmiddleware (MOM) is software infrastructure focused on sending a

java分散式系統通訊框架

1.Jboss Netty專案-優秀的NIO框架下載[url]http://www.jboss.org/netty/downloads.html[/url]簡介[url]http://www.jboss.org/netty[/url]Jboss的Netty專案旨在提供非同步驅

基於Kubernetes的機器學習微服務系統設計系列——()架構與部署

 內容提要 1 系統介紹 1.1 核心功能 2 系統架構 2.1 雲化架構圖 2.2 架構說明 3 雲化部署 3.1 部署圖 3.2 部署說明 3.3 部署例項

[分散式系統學習]閱讀筆記 Distributed systems for fun and profit 抽象 之

本文是閱讀 http://book.mixu.net/distsys/abstractions.html 的筆記。 第二章的題目是"Up and down the level of abstraction"。這一章裡面,作者主要介紹了分散式系統裡面的一個重要概念:CAP理論。 什麼是CAP理論呢?就是說在

CentOS6u8 java和tomcat多版本模板的ansible批量部署實現()

部署多版本java環境: 192.168.77.100操作: su - deploy mkdir -pv muti_java_env/{inventory,roles} # 配置被操控的主機資訊 cat >muti_java_env/inventory/

Java分散式跟蹤系統Zipkin():Brave原始碼分析-Tracer和Span

Brave是Java版的Zipkin客戶端,它將收集的跟蹤資訊,以Span的形式上報給Zipkin系統。 (Zipkin是基於Google的一篇論文,名為Dapper,Dapper在荷蘭語裡是“勇敢的”的意思,這也是Brave的命名的原因) 我們一般

基於Kubernetes、Docker的機器學習微服務系統設計系列——()架構與部署

  本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用的架構與部署。 1 系統介紹 1.1 核心功能   主要完成功能: 支援Docker映象化釋出,支援Kuberneetes雲化部署; 微服務化設計支援服務自治

linux系統部署Java程序獲取ip時報Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

xxx ice 問題 clas java 獲取ip 獲取 code 系統部署 問題一: Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

java核心學習(十一) 多線程---創建啟動線程的三種方式

使用 trace 啟動 操作系統 java多線程 start name image 獲取    本節開始java多線程編程的學習,對於操作系統、進程、線程的基本概念不再贅述,只是了解java對於多線程編程的支持有哪些。 一、繼承Thread類來創建線程    java語言中