(Ansible架構圖)
這一章節主要是完成以下工作:
- Ansible Playbook項目結構創建
- Inventory文件創建,設置我們的集羣信息
- group_vars文件創建,創建後面我們經常要用的一些變量及其值。
備註:本章及後面所有playbook文件創建等工作都在本機Mac上完成(也就是Ansible的發號指令機器,另外三臺都是接受Ansible指令機器。)
1. Ansible項目結構創建
ansible官方給出了以下推薦的文件目錄結構
production # inventory file for production servers
staging # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
library/ # if any custom modules, put them here (optional)
module_utils/ # if any custom module_utils to support modules, put them here (optional)
filter_plugins/ # if any custom filter plugins, put them here (optional)
site.yml # master playbook
webservers.yml # playbook for webserver tier
dbservers.yml # playbook for dbserver tier
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
library/ # roles can also include custom modules
module_utils/ # roles can also include custom module_utils
lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
如果不同Inventory下,group_vars/host_vars有很大不同,官方推薦另一種group_vars/host_vars移植到inventory目錄下去的另一種結構:
inventories/
production/
hosts # inventory file for production servers
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
staging/
hosts # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
stagehost1.yml # here we assign variables to particular systems
stagehost2.yml
library/
module_utils/
filter_plugins/
site.yml
webservers.yml
dbservers.yml
roles/
common/
webtier/
monitoring/
fooapp/
我們這裏由於只搭建一個環境,所以採用第一種目錄結構,創建完成之後,我們的目錄結構如下圖所示:
按照官方說明,roles目錄存放所有playbook文件(簡稱playbook,每個playbook代表一個相對完整的工作流,這個工作流包含多個運維步驟,步驟之間存在先後順序),我們爲我們要安裝的每個大數據組件都創建一個playbook,以及一個common的基礎playbook,下面分別介紹之
- common:所有playbook執行之前都依賴的playbook,目前主要作用是用戶創建,目錄創建等。
- hadoop:安裝hdfs/yarn/mapred等組件playbook
- zookeeper:安裝zookeeper的playbook
- spark:安裝spark的playbook,安裝方式是spark on yarn
- hive:安裝hive的playbook
- kafka:安裝kafka的playbook
- mysql:安裝mysql的playbook
根路徑下每個yaml文件分別指定運行某個playbook(如只需要安裝hadoop,可以使用ansible-playbook hadoop.yaml只運行hadoop 的搭建workflow),site.yaml引用所有劇本,串起所有playbook的執行工作。
site.yaml和hadoop.yaml兩個文件內容如下:
#site.yaml
---
- hosts: cluster
remote_user: hadoop
roles:
- common
- zookeeper
- hadoop
- mysql
- hive
- spark
#hadoop.yaml
---
- hosts: cluster
remote_user: hadoop
roles:
- hadoop
YAML文件中roles裏配置的順序具有依賴關係,依賴者要放到被依賴者之後,這樣才能夠實現被依賴者安裝之後再安裝依賴者的的正確安裝順序。在這裏,由於hadoop/kafka依賴zookeeper,所以zookeeper在最前面,而spark/hive又依賴hadoop,故spark/hive playbook放在hadoop之後。
2. 創建Inventory文件,設置集羣分組
在production目錄下,創建一個hosts文件,內容如下:
[cluster]
master1
master2
slave1
這裏我們只創建了一個cluster集羣,並把三臺機器都歸屬到這個集羣(具體inventory文件的語法格式參照ansible官方文檔)。
3.group_vars文件創建
在group_vars目錄下,我們創建cluster.yaml文件,在裏面用我們添加一下安裝hadoop/zookeeper/spark等都需要用到的一些變量:
base: /data/bigdata # 設置我們今後所有操作的頂級目錄,包括下載/安裝/日誌等
download_base: "{{ base }}/download" # 所有需要下載的第三方安裝包存放目錄
app_base: "{{base}}/app" # 所有應用安裝根目錄
download_server: "http://mirror.bit.edu.cn/apache" # 所有應用下載mirror地址,之後hadoop/zookeeper/spark等的安裝包都會從該mirror下載
data_base: "{{base}}/data" # 所有應用啓動後數據存放根目錄
log_base: "{{base}}/log" # 所有應用啓動後日志存放根目錄
run_user: hadoop # 所有程序運行身份
JAVA_HOME: /usr/java/jdk1.8.0_45/
總結:至此,我們以及完成了我們的ansible項目的文件結構創建工作。