Ansible实战:部署分布式日志系统

 

本节内容:

  • 背景
  • 分布式日志系统架构图
  • 创建和使用roles
    • JDK 7 role
    • JDK 8 role
    • Zookeeper role
    • Kafka role
    • Elasticsearch role
    • MySQL role
    • Nginx role
    • Redis role
    • Hadoop role
    • Spark role

一、背景

产品组在开发一个分布式日志系统,用的组件较多,单独手工部署一各个个软件比较繁琐,花的时间比较长,于是就想到了使用ansible playbook + roles进行部署,效率大大提高。

二、分布式日志系统架构图

三、创建和使用roles

每一个软件或集群都创建一个单独的角色。

[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. 上传软件包

将jdk-7u80-linux-x64.gz上传到files目录下。

2. 编写tasks

jdk7 tasks

3. 编写vars

[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. 使用角色

在roles同级目录,创建一个jdk.yml文件,里面定义好你的playbook。

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

运行playbook安装JDK7:

[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.j2、hadoop-daemon.sh.j2、hadoop-env.sh.j2、hdfs-site.xml.j2、mapred-site.xml.j2、slaves.j2、yarn-daemon.sh.j2、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。

ansible入门七(实战)的更多相关文章

  1. .NET分布式缓存Redis从入门到实战

    一.课程介绍 今天阿笨给大家带来一堂NOSQL的课程,本期的主角是Redis.希望大家学完本次分享课程后对redis有一个基本的了解和认识,并且熟悉和掌握 Redis在.NET中的使用. 本次分享课程 ...

  2. 《Angular4从入门到实战》学习笔记

    <Angular4从入门到实战>学习笔记 腾讯课堂:米斯特吴 视频讲座 二〇一九年二月十三日星期三14时14分 What Is Angular?(简介) 前端最流行的主流JavaScrip ...

  3. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  4. Nginx入门到实战

    location 语法 location 有”定位”的意思, 根据Uri来进行不同的定位. 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上. 比如, 碰 ...

  5. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

  6. docker-9 supervisord 参考docker从入门到实战

    参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机 ...

  7. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  8. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  9. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

随机推荐

  1. Django:学习笔记(7)——模型进阶

    Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...

  2. kubernetes上安装MongoDB-3.6.5集群副本集方式

    一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...

  3. hdu6215 Brute Force Sorting

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6215 题目: Brute Force Sorting Time Limit: 1000/100 ...

  4. laravel 环境配置

    一.composer 安装 1.确定为最新版本的PHP 2.进入Composer官网下载页面,在页面最下方Manual Download区域选择需要的版本下载. 3.将下载的composer.phar ...

  5. 为Android添加开机启动脚本

    转:https://blog.csdn.net/u014316462/article/details/76438611 本文介绍了一种在Android 4.2.2源码中添加.修改文件或者代码,来达到使 ...

  6. yum安装memchache

    转载地址:http://www.cnblogs.com/jiunadianshi/articles/2001334.html 标准的CentOS5软件仓库里面是没有memcache相应的包的,所以,我 ...

  7. 如何用纯 CSS 创作一个跳动的字母 i

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pZbrpJ 可交互视频 ...

  8. spark client + yarn计算

    前提:完成hadoop + kerberos安全环境搭建. 安装配置spark client: 1. wget https://d3kbcqa49mib13.cloudfront.net/spark- ...

  9. Hive Shell常用操作

    1.Hive非交互模式常用命令: 1) hive -e:从命令行执行指定的HQL,不需要分号: % hive -e 'select * from dummy' > a.txt 2) hive – ...

  10. KALI LINUX系统初始化配置

    1.Kali Linux安装VirtualBox增强功能 VirtualBox增强功能介绍:物理机与虚拟机之间的文件共享.物理机与虚拟机之间的剪切板共享.虚拟机的direct3D支持,这样虚拟机窗口就 ...