ansible入門七(實戰)

Ansible實戰:部署分佈式日誌系統

 

本節內容:html

  • 背景
  • 分佈式日誌系統架構圖
  • 建立和使用roles
    • JDK 7 role
    • JDK 8 role
    • Zookeeper role
    • Kafka role
    • Elasticsearch role
    • MySQL role
    • Nginx role
    • Redis role
    • Hadoop role
    • Spark role

 

1、背景

產品組在開發一個分佈式日誌系統,用的組件較多,單獨手工部署一各個個軟件比較繁瑣,花的時間比較長,因而就想到了使用ansible playbook + roles進行部署,效率大大提升。java

 

2、分佈式日誌系統架構圖

 

3、建立和使用roles

每個軟件或集羣都建立一個單獨的角色。node

[root@node1 ~]# mkdir -pv ansible_playbooks/roles/{db_server,web_server,redis_server,zk_server,kafka_server,es_server,tomcat_server,flume_agent,hadoop,spark,hbase,hive,jdk7,jdk8}/{tasks,files,templates,meta,handlers,vars}

 

3.1. JDK7 role

[root@node1 jdk7]# pwd
/root/ansible_playbooks/roles/jdk7
[root@node1 jdk7]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳軟件包mysql

將jdk-7u80-linux-x64.gz上傳到files目錄下。linux

 

2. 編寫tasksnginx

jdk7 tasks

 

3. 編寫varsgit

[root@node1 jdk7]# vim vars/main.yml 
jdk_package_name: jdk-7u80-linux-x64.gz                                                                                                       
env_file: /etc/profile
jdk_version: jdk1.7.0_80

 

4. 使用角色 github

在roles同級目錄,建立一個jdk.yml文件,裏面定義好你的playbook。web

[root@node1 ansible_playbooks]# vim jdk.yml 
- hosts: jdk
  remote_user: root
  roles:
  - jdk7

運行playbook安裝JDK7:redis

[root@node1 ansible_playbooks]# ansible-playbook jdk.yml 

使用jdk7 role能夠須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.2 JDK8 role

[root@node1 jdk8]# pwd
/root/ansible_playbooks/roles/jdk8
[root@node1 jdk8]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將jdk-8u73-linux-x64.gz上傳到files目錄下。 

 

2. 編寫tasks

jdk8 tasks

 

3. 編寫vars

[root@node1 jdk8]# vim vars/main.yml 
jdk_package_name: jdk-8u73-linux-x64.gz                                                                                                       
env_file: /etc/profile
jdk_version: jdk1.8.0_73

 

4. 使用角色

在roles同級目錄,建立一個jdk.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim jdk.yml 
- hosts: jdk
  remote_user: root
  roles:
  - jdk8

運行playbook安裝JDK8:

[root@node1 ansible_playbooks]# ansible-playbook jdk.yml 

使用jdk8 role能夠須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.3 Zookeeper role

Zookeeper集羣節點配置好/etc/hosts文件,配置集羣各節點主機名和ip地址的對應關係。

[root@node1 zk_server]# pwd
/root/ansible_playbooks/roles/zk_server
[root@node1 zk_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將zookeeper-3.4.6.tar.gz和clean_zklog.sh上傳到files目錄。clean_zklog.sh是清理Zookeeper日誌的腳本。

 

2. 編寫tasks

zookeeper tasks

 

3. 編寫templates

將zookeeper-3.4.6.tar.gz包中的默認配置文件上傳到../roles/zk_server/templates/目錄下,重命名爲zoo.cfg.j2,並修改其中的內容。

[root@node1 ansible_playbooks]# vim roles/zk_server/templates/zoo.cfg.j2

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也不在解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

[root@node1 zk_server]# vim vars/main.yml 
server1_hostname: hadoop27                                                                                                                    
server2_hostname: hadoop28
server3_hostname: hadoop29

另外在tasks中還使用了個變量{{myid}},該變量每臺主機的值是不同的,因此定義在了/etc/ansible/hosts文件中:

[zk_servers]
172.16.206.27 myid=1
172.16.206.28 myid=2
172.16.206.29 myid=3

 

5. 設置主機組

/etc/ansible/hosts文件:

[zk_servers]
172.16.206.27 myid=1
172.16.206.28 myid=2
172.16.206.29 myid=3

 

6. 使用角色

在roles同級目錄,建立一個zk.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim zk.yml 
- hosts: zk_servers
  remote_user: root
  roles:
  - zk_server

運行playbook安裝Zookeeper集羣:

[root@node1 ansible_playbooks]# ansible-playbook zk.yml 

使用zk_server role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.4 Kafka role

[root@node1 kafka_server]# pwd
/root/ansible_playbooks/roles/kafka_server
[root@node1 kafka_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將kafka_2.11-0.9.0.1.tar.gz、kafka-manager-1.3.0.6.zip和clean_kafkalog.sh上傳到files目錄。clean_kafkalog.sh是清理kafka日誌的腳本。

 

2. 編寫tasks

kafka tasks

 

3. 編寫templates

[root@node1 kafka_server]# vim templates/server.properties.j2 

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也再也不解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

[root@node1 kafka_server]# vim vars/main.yml
zk_cluster: 172.16.7.151:2181,172.16.7.152:2181,172.16.7.153:2181
kafka_manager_ip: 172.16.7.151 

另外在template的文件中還使用了個變量{{broker_id}},該變量每臺主機的值是不同的,因此定義在了/etc/ansible/hosts文件中:

[kafka_servers]
172.16.206.17 broker_id=0
172.16.206.31 broker_id=1
172.16.206.32 broker_id=2

 

5. 設置主機組

/etc/ansible/hosts文件:

[kafka_servers]
172.16.206.17 broker_id=0
172.16.206.31 broker_id=1
172.16.206.32 broker_id=2

 

6. 使用角色

在roles同級目錄,建立一個kafka.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim kafka.yml 
- hosts: kafka_servers
  remote_user: root
  roles:
  - kafka_server

運行playbook安裝kafka集羣:

[root@node1 ansible_playbooks]# ansible-playbook kafka.yml 

使用kafka_server role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.5 Elasticsearch role

[root@node1 es_server]# pwd
/root/ansible_playbooks/roles/es_server
[root@node1 es_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將elasticsearch-2.3.3.tar.gz  elasticsearch-analysis-ik-1.9.3.zip上傳到files目錄。

 

2. 編寫tasks

Elasticsearch tasks

 

3. 編寫templates

將模板elasticsearch.in.sh.j2和elasticsearch.yml.j2放入templates目錄下

注意模板裏的變量名中間不能用.。好比:{{node.name}}這樣的變量名是不合法的。

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也再也不解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

[root@node1 es_server]# vim vars/main.yml
ES_MEM: 2g
cluster_name: wisedu
master_ip: 172.16.7.151 

另外在template的文件中還使用了個變量{{node_master}},該變量每臺主機的值是不同的,因此定義在了/etc/ansible/hosts文件中:

[es_servers]
172.16.7.151 node_master=true
172.16.7.152 node_master=false
172.16.7.153 node_master=false 

 

5. 設置主機組

/etc/ansible/hosts文件:

[es_servers]
172.16.7.151 node_master=true
172.16.7.152 node_master=false
172.16.7.153 node_master=false 

 

6. 使用角色

在roles同級目錄,建立一個es.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim es.yml 
- hosts: es_servers
  remote_user: root
  roles:
  - es_server

運行playbook安裝Elasticsearch集羣:

[root@node1 ansible_playbooks]# ansible-playbook es.yml

使用es_server role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.6 MySQL role

[root@node1 db_server]# pwd
/root/ansible_playbooks/roles/db_server
[root@node1 db_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將製做好的rpm包mysql-5.6.27-1.x86_64.rpm放到/root/ansible_playbooks/roles/db_server/files/目錄下。
【注意】:這個rpm包是本身打包製做的,打包成rpm會使得部署的效率提升。關於如何打包成rpm見以前的博客《速成RPM包製做》。

 

2. 編寫tasks

mysql tasks

 

3. 設置主機組

# vim /etc/ansible/hosts 
[db_servers]
172.16.7.152 

 

4. 使用角色

在roles同級目錄,建立一個db.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim db.yml 
- hosts: mysql_server
  remote_user: root
  roles:
  - db_server

運行playbook安裝MySQL:

[root@node1 ansible_playbooks]# ansible-playbook db.yml 

使用db_server role須要根據實際環境修改/etc/ansible/hosts文件裏定義的主機。

 

3.7 Nginx role

[root@node1 web_server]# pwd
/root/ansible_playbooks/roles/web_server
[root@node1 web_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將製做好的rpm包openresty-for-godseye-1.9.7.3-1.x86_64.rpm放到/root/ansible_playbooks/roles/web_server/files/目錄下。
【注意】:作成rpm包,在安裝時省去了編譯nginx的過程,提高了部署效率。這個包裏面打包了不少與咱們系統相關的文件。

 

2. 編寫tasks

Nginx tasks

 

3. 編寫templates

將模板nginx.conf.j2放入templates目錄下.

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也再也不解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

[root@node1 web_server]# vim vars/main.yml 
elasticsearch_cluster: server 172.16.7.151:9200;server 172.16.7.152:9200;server 172.16.7.153:9200;
kafka_server1: 172.16.7.151
kafka_server2: 172.16.7.152
kafka_server3: 172.16.7.153 

通過測試,變量裏面不能有逗號。

 

5. 設置主機組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[nginx_servers]
172.16.7.153

 

6. 使用角色

在roles同級目錄,建立一個nginx.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim nginx.yml 
- hosts: nginx_servers
  remote_user: root
  roles:
  - web_server

運行playbook安裝Nginx:

[root@node1 ansible_playbooks]# ansible-playbook nginx.yml

使用web_server role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.8 Redis role

[root@node1 redis_server]# pwd
/root/ansible_playbooks/roles/redis_server
[root@node1 redis_server]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將製做好的rpm包redis-3.2.2-1.x86_64.rpm放到/root/ansible_playbooks/roles/redis_server/files/目錄下。

 

2. 編寫tasks

Redis tasks

 

3. 設置主機組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[redis_servers]
172.16.7.152

 

4. 使用角色

在roles同級目錄,建立一個redis.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim redis.yml 
- hosts: redis_servers
  remote_user: root
  roles:
  - redis_server 

運行playbook安裝redis:

[root@node1 ansible_playbooks]# ansible-playbook redis.yml 

使用redis_server role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.9 Hadoop role

徹底分佈式集羣部署,NameNode和ResourceManager高可用。
提早配置集羣節點的/etc/hosts文件、節點時間同步、某些集羣主節點登陸其餘節點不須要輸入密碼。

[root@node1 hadoop]# pwd
/root/ansible_playbooks/roles/hadoop
[root@node1 hadoop]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將hadoop-2.7.2.tar.gz放到/root/ansible_playbooks/roles/hadoop/files/目錄下。

 

2. 編寫tasks

Hadoop tasks

 

3. 編寫templates

將模板core-site.xml.j二、hadoop-daemon.sh.j二、hadoop-env.sh.j二、hdfs-site.xml.j二、mapred-site.xml.j二、slaves.j二、yarn-daemon.sh.j二、yarn-site.xml.j2放入templates目錄下。

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也再也不解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

複製代碼
[root@node1 hadoop]# vim vars/main.yml 
env_file: /etc/profile
# hadoop-env.sh.j2 file variables.
JAVA_HOME: /usr/java/jdk1.8.0_73
# core-site.xml.j2 file variables.
ZK_NODE1: node1:2181
ZK_NODE2: node2:2181
ZK_NODE3: node3:2181
# hdfs-site.xml.j2 file variables.
NAMENODE1_HOSTNAME: node1
NAMENODE2_HOSTNAME: node2
DATANODE1_HOSTNAME: node3
DATANODE2_HOSTNAME: node4
DATANODE3_HOSTNAME: node5
# mapred-site.xml.j2 file variables.
MR_MODE: yarn
# yarn-site.xml.j2 file variables.
RM1_HOSTNAME: node1
RM2_HOSTNAME: node2
複製代碼

 

5. 設置主機組

/etc/ansible/hosts文件:

複製代碼
# vim /etc/ansible/hosts 
[hadoop]
172.16.7.151 namenode_active=true namenode_standby=false datanode=false
172.16.7.152 namenode_active=false namenode_standby=true datanode=false
172.16.7.153 namenode_active=false namenode_standby=false datanode=true
172.16.7.154 namenode_active=false namenode_standby=false datanode=true
172.16.7.155 namenode_active=false namenode_standby=false datanode=true
複製代碼

 

6. 使用角色

在roles同級目錄,建立一個hadoop.yml文件,裏面定義好你的playbook。

複製代碼
[root@node1 ansible_playbooks]# vim hadoop.yml 
- hosts: hadoop
  remote_user: root
  roles:
  - jdk8
  - hadoop
複製代碼

運行playbook安裝hadoop集羣:

[root@node1 ansible_playbooks]# ansible-playbook hadoop.yml 

使用hadoop role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

 

3.10 Spark role

Standalone模式部署spark (無HA)

[root@node1 spark]# pwd
/root/ansible_playbooks/roles/spark
[root@node1 spark]# ls
files  handlers  meta  tasks  templates  vars

 

1. 上傳安裝包

將scala-2.10.6.tgz和spark-1.6.1-bin-hadoop2.6.tgz放到/root/ansible_playbooks/roles/hadoop/files/目錄下。

 

2. 編寫tasks

Spark tasks

 

3. 編寫templates

將模板slaves.j2和spark-env.sh.j2放到/root/ansible_playbooks/roles/spark/templates/目錄下。

配置文件內容過多,具體見github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內容也再也不解釋,在前面博客中的文章中都已寫明。

 

4. 編寫vars

複製代碼
[root@node1 spark]# vim vars/main.yml 
env_file: /etc/profile
# spark-env.sh.j2 file variables
JAVA_HOME: /usr/java/jdk1.8.0_73
SCALA_HOME: /usr/local/scala-2.10.6
SPARK_MASTER_HOSTNAME: node1
SPARK_HOME: /usr/local/spark-1.6.1
SPARK_WORKER_MEMORY: 256M
HIVE_HOME: /usr/local/apache-hive-2.1.0-bin
HADOOP_CONF_DIR: /usr/local/hadoop/etc/hadoop/
# slave.j2 file variables
SLAVE1_HOSTNAME: node2
SLAVE2_HOSTNAME: node3
複製代碼

 

5. 設置主機組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[spark]
172.16.7.151
172.16.7.152
172.16.7.153

 

6. 使用角色

在roles同級目錄,建立一個spark.yml文件,裏面定義好你的playbook。

[root@node1 ansible_playbooks]# vim spark.yml 
- hosts: spark
  remote_user: root
  roles:
  - spark 

運行playbook安裝spark集羣:

[root@node1 ansible_playbooks]# ansible-playbook spark.yml 

使用spark role須要根據實際環境修改vars/main.yml裏的變量以及/etc/ansible/hosts文件裏定義的主機。

【注】:全部的文件都在github上,https://github.com/jkzhao/ansible-godseye。

相關文章
相關標籤/搜索