天天看點

大資料運維環境下ansible-playbook應用案例文章内容不夠清晰,還有視訊輔助學習哦,通路:

在大資料運維環境下,對主機名要求比較嚴格,是以對大資料節點的主機名要進行統一規劃,然後集中設定,如果本地沒有建立DNS解析伺服器,還需要對每個節點添加本地解析,也就是将每個節點的ip和主機名的對應關系添加到/etc/hosts檔案中。要解決這兩個問題,隻需要兩個playbook腳本即可自動完成。

要批量更改每個節點的主機名,首先需要修改ansible中/etc/ansible/hosts檔案内容,添加如下配置:

這裡定義了一個名為hostall的主機組,組中有三台主機,每個主機IP後面跟了一個hostname變量,變量後面就是定義好的主機名,而這個變量可以在playbook腳本中直接引用。

接下來就可以編寫playbook腳本了,内容如下:

這個腳本中,變量{{hostname}}以及值就是在/etc/ansible/hosts檔案中定義的“hostname=namenodemaster”這部分内容。通過使用shell子產品,實作将定義好的主機名添加到每個遠端主機的/etc/hostname檔案中(限于RHEL/Centos7/8系統),然後執行hostname指令使其生效。

每個主機名修改完畢後,還需要建構一個本地解析檔案(IP和主機名對應的檔案),然後傳到每個遠端主機上,要實作這個功能,可以編寫如下playbook腳本,内容如下:

這個playbook中,使用了角色中的變量,是以要了解下我們這個ansible的預設目錄結構,如下圖所示:

大資料運維環境下ansible-playbook應用案例文章内容不夠清晰,還有視訊輔助學習哦,通路:

我們的程式安裝在/etc/ansible指令下,在這個目錄中有三個子目錄,分别是files 、templates 和roles,files目錄主要是存放一些要拷貝的遠端主機的程式檔案,templates 目錄下存放的是一些配置好的模闆檔案,這些模闆檔案會統一拷貝到遠端主機中,最後,還有一個roles目錄,此目錄下我們建立了一個main.yml檔案,用來定義角色變量,main.yml中變量定義方式如下:

其中,每行内容中冒号前面的就是變量名,後面的内容是變量的值,定義變量後,就可以在playbook中進行引用了。

最後,再回到上面這個playbook檔案中,由于要使用角色變量,是以引入了roles關鍵字,接下來,在tasks任務中,首先使用了local_action子產品,在管理機上生成了一個模闆檔案hosts.j2,注意這裡面的變量{{AnsibleDir}}就是在main.yml中定義好的,run_once表示這個本地shell僅僅執行一次,接着通過set_fact定義了兩個變量ipaddress和hostname,這兩個變量都從ansible内置變量中擷取具體的值,然後将擷取到的ipaddress和hostname值寫入管理機上的hosts.j2檔案中,最後一個操作步驟是通過template子產品,将hosts.j2模闆檔案拷貝到遠端主機的/etc/目錄下并重命名為hosts檔案。

将此腳本放到/etc/ansible目錄下,并命名為hosts.yml,然後執行如下指令:

如果執行成功,會有綠色、淺黃色輸出提示,如果執行失敗,可以看紅色輸出内容,判斷檢查問題。

大資料環境下,為了安裝、配置和維護的友善,一般會設定管理機(安裝ansible的機器)和每個叢集節點之間的無密碼登入(單向信任),而無密碼登入最簡單的方式是通過設定ssh公私鑰認證機制,下面playbook腳本可以完成管理機到遠端主機組hostall的無密碼登入,腳本内容如下:

這個playbook稍微複雜一些,它仍然用到了角色變量,是以此腳本要放在/etc/ansible目錄下,腳本一開始通過lineinfile子產品對遠端主機上的sshd配置檔案ssh_config進行檔案内容替換,這個替換是關閉ssh第一次登陸時給出的“yes/no”提示,接着在遠端主機上删除/root/.ssh目錄,并重新建立此目錄,這個操作的目的是確定遠端主機/root/.ssh目錄是幹淨的、權限正确的。然後通過local_action子產品在管理機上生成一對公私鑰,同時将生成的公鑰檔案内容作為變量sshinfo的值,并通過set_fact子產品重新定義一個變量sshpub,此變量引用sshinfo變量的stdout輸出,也就是最終的公鑰值,緊接着,将變量sshpub的内容寫入管理機authorized_keys.j2模闆檔案中,最後,使用template子產品将authorized_keys.j2模闆檔案拷貝到每個遠端主機的/root/.ssh目錄下,并重命名為authorized_keys,同時給檔案授于屬主讀、寫權限。

将此腳本放到/etc/ansible目錄下,并命名為ssh.yml,然後執行如下指令:

自動化安裝JDK是大資料運維中最常見的一個場景,JDK一般我們下載下傳二進制版本解壓即可使用,是以安裝JDK的過程就是把下載下傳好的JDK程式拷貝到遠端主機的過程,JDK安裝完成後,還要添加JAVA_HOME到系統環境變量中,以讓系統識别安裝的JDK,下面的這個playbook檔案就是自動化安裝JDK的整個過程,内容如下:

此腳本中的BigdataDir、AnsibleDir都是角色變量,前面已經定義過具體的路徑了,其中,jdk.tar.gz位于管理機上,腳本最後通過item.value這個變量将JDK環境變量寫入到了/etc/profile檔案的最後,這個變量的定義和引用方式需要引起大家注意。

将此腳本放到/etc/ansible目錄下,并命名為jdk.yml,然後執行如下指令:

腳本執行成功的話,那麼jdk和環境變量就都配置好了。

https://edu.51cto.com/course/23377.html ,Ansible與Ansible-playbook應用實戰視訊課程,幫助一次性掌握Ansible自動化運維工具的使用。

繼續閱讀