ansible应用之安装elk框架( 二 )


5,关于role的介绍roles: <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/rolesproject:<---具体的角色项目名称,比如nginx、tomcat、phpfiles:<--用来存放由copy模块或script模块调用的文件 。templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件 。tasks:<--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件 。main.ymlhandlers:<--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 。main.ymlvars:<--此目录应当包含一个main.yml文件,用于定义此角色用到的变量 。main.ymldefaults:<--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 。main.ymlmeta:<--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系 。main.yml
6,手动添加防火墙规则【ansible应用之安装elk框架】偷懒没写到ansible中,分别在每台机器手动添加了,实际应用中,全是内网的话,机器初始化时,防火墙可能是关闭的,如果开启的话,可以用以下命令添加一个网段的所有端口访问 。如果想按照需要添加端口,可网上搜索教程 。firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept"
7,执行ansible-playbook任务yml文件在roles目录下,定义了执行的主机,和用户,分别是以下几个,和role目录对应,install-openjdk-epel-npm-unzip-nodejs-bzip2.ymlinstall-es.ymlinstall-kibana.ymlinstall-logstash.ymluninstall-elk.yml
8,执行说明上面提过,首次安装需要来回切换用户,这个是针对es的安装,kibana和logstash安装普通用户就可以,只要远程主机安装了tar命令解压文件 。还有对变量可能要做修改,我在各个role的vars目录的main.yml定义了变量,可以进行修改 。另外es的节点名称变量定义在了hosts文件中,jinjia2模板就根据ip读取到了,以后可能有更加明细的方式,比如用when做判断 。还有几个软件的本机ip,用到的是setup模块能够查询到的,如ansible_all_ipv4_addresses  #ipv4地址,在j2文件中就是{{ ansible_all_ipv4_addresses|to_json }},加上“|to_json”是为了将unicode转化成对象,就知道要这样用,为了解决copy到远程主机上前面加个u标记,不加“|to_json”是如[u"192.168.229.130"]这样的,启动也会报错 。
9,需要优化的地方没有加开机自启动配置的步骤,没有将handlers 和notity结合使用,这两个的作用是由特定条件触发的操作,满足条件方才执行,否则不执行,比如模板配置文件的copy,我是以加tags的方式,执行时要加-t参数 。而handlers 和notity能自动判断文件变化,当notity变化,就执行handlers 的步骤,这以后再优化了 。还有就是我的卸载的role,把三个都放一起了,每次执行要修改yml文件的hosts,还要用-t关联tags 。实际操作很可能一不小心,忘记加-t参数了,就所有软件都卸载了,有点小坑,需要继续用ansible的一些知识优化
10,源码及安装包分享我耍个聪明,把es的ik插件与es主要文件合并一起,重新打了一个tar.gz包,省去了一些步骤,所以用我分享的版本就很方便部署es并安装上ik分词插件 。源码地址在码云上:https://gitee.com/gaowenai/ansible-elk 。由于码云上上的文件大小不能超过100M,安装包无法上传,安装包从官网下载 。git上的role中没有包含files,调试的时候要创建files目录,把对应的安装包放上去 。

经验总结扩展阅读