(二)使用Ansible搭建分佈式大數據基礎環境-Ansible項目創建

å¾çæè¿°

(Ansible架構圖)

這一章節主要是完成以下工作:

  1. Ansible Playbook項目結構創建
  2. Inventory文件創建,設置我們的集羣信息
  3. 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,下面分別介紹之

  1. common:所有playbook執行之前都依賴的playbook,目前主要作用是用戶創建,目錄創建等。
  2. hadoop:安裝hdfs/yarn/mapred等組件playbook
  3. zookeeper:安裝zookeeper的playbook
  4. spark:安裝spark的playbook,安裝方式是spark on yarn
  5. hive:安裝hive的playbook
  6. kafka:安裝kafka的playbook
  7. 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項目的文件結構創建工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章