ansible应用之安装elk框架
最近在学习ansible,先大致看了下视频,现在需要练习使用了。对照视频中的练习方式,我觉得用处也不是太大,正好现在还要学习elk,以集群方式部署es,需要执行一些批量命令,而且还有一些修改配置文件的步骤,需要对每台主机操作。故此,尝试结合ansible的学习,让安装更加的自动化,有以下思路。说明一下,有些方案其实ansible也能执行,但感觉必要性不是特别的大。
1,es不能使用root用户启动
es不能使用root用户启动,故需要主机上创建普通的用户,给普通用户sudo免密权限,visudo命令,在root ALL=(ALL) ALL这行下添加,内容是把以上root改成普通用户,最后的ALL换成NOPASSWD:ALL。实际工作中,如果以openstack等方式,需要es主机的话,自动创建好普通es用户,该要的权限也都可以添加好。最好后面部署的时候,不使用sudo的方式,我自己的练习用户是wenwen,所有部署目录都在/home/wenwen下,以后会尝试把用户做成变量,另外一些主机ip和目录的配置,也尽量做成变量,以便支持web平台的相关操作。
2,使用VMware练习,要准备四台虚拟机
如果是使用VMware练习,准备四台虚拟机。ansible功能大多依赖python,如果是centos7以上,默认安装python,不用再装了。然后选择一台,安装ansible,其余的不用,这是ansible方便的地方。安装ansible的主机,我喜欢称之为跳板机或者堡垒机,后面都称为跳板机。为什么呢,因为即使ansible执行后,输入远程主机密码会保存会话,下次不用再输入了,但万一远程主机密码修改或会话失效呢,还要重新来。而设置免密登录,以rsa方式认证,则大致能避免这个问题。免密登录配置方式,可以参考别人的博客,https://www.cnblogs.com/276815076/p/10449354.html#5113218,里面有一些我遇到坑时的解决方式。我推测如果有openstack方式,则连免密登录配置都不用手动做了,跳板机上生成的公钥,当作openstack的一个变量应用于初始机器的authorized_key了,方便很多。这只是我的一种思路,实际上如果是使用密码,ansible也是支持把账号密码写到/etc/ansible/hosts里的,如下
方法一 主机+端口+密码
[webserver]
192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
方法二 主机+端口+密码
[webserver]
192.168.1.3[1:3]
[webserver:vars]
ansible_ssh_pass="123456"
3,ansible执行时sudo的用户是普通用户还是root用户
ansible在远程主机上执行时,可能会需要一些root权限,一般编写playbook会将remote_user设置为root,以下选项不用开启也可以,但是remote_user为root,就需要给root加免密登录了。我不想做root的免密,就让remoter_user为我自己的wenwen用户,然后开启以下的配置。修改ansible安装目录的ansible.cfg文件,以下配置开启
[privilege_escalation]
become=True ***//使用“true”或“yes”来表示启用这个特权,如:become=true表示打开了become开关。
become_method=sudo *//********表示用什么方式将普通账户切换到root或所需的其他账户,这里可以用su或sudo。*
#become_user=root *//********设置为root账户,相当于我们以普通账户登入到远程主机时,再使用su - root切换为root账户。*
#become_ask_pass=False*//表示询问密码*
4,开始编写创建roles和playbook
每个软件的安装都是一个role,在roles目录下,创建以下目录,刚创建的目录中再创建task,vars,handle,templates等,安装的role有以下:
install-openjdk-epel-npm-unzip-nodejs-bzip2 这是一些需要yum的安装,需要将上面3中提到的sudo用户为root,使用我的wenwen用户就提示不让,也不知道为啥,明明给wenwen配置了所有root权限了,可能还是有些地方普通用户还是没有配好吧。
install-es 使用wenwen用户安装es和es-head,但是es-head的运行放到一个单独的playbook中了,因为可能需要sudo用户为root,后面再提。
install-kibana ,使用wenwen用户安装kibana并运行,需要es安装好并且es的全部节点都启动成功了。
install-logstash ,使用wenwen用户安装logstash并运行,配置的logstash.conf的output为es,也需要es节点都启动成功。
注意事项:install-es中还有一个修改系统配置文件的步骤,是需要root用户执行的,yml文件是task下的modifysys.yml,这个修改也太清楚作用,因为这个编写是用echo追加文件的方式,卸载elk里如果删除这几个配置的话,担心影响其它非elk软件的使用,所以如果确认主机上没有配置过,则可以去掉修改main.yml中的注释安装,执行后,再加上注释。不然下次安装,就重复添加了。
es-playbook 这是es-head的启动需要的playbook,没有做成role方式,为了不混淆安装卸载的role,将npm运行拆分出来了,和roles目录平级。里面是一个playbook的yml文件,第一次执行需要sudo为root用户,后面可以为普通用户,启动的的命令配置的nohup输出为/dev/null,我若配置到输出文件中,就不能正常启动,是不是因为输出到文件中的问题也不清楚,就只好按照能启动成功的方式来写了。
卸载的role:
uninstall-elk 停止进程,删除目录,移除yum的一些组件,如openjdk,npm等,同样存在卸载风险,一些工具如jdk,可能非elk的软件也在用,卸载的话,就得不偿失了。把卸载依赖软件的部分在main.yml文件中注释了,保留了停止进程和删除目录的步骤,并打了tags,这样可以有选择的执行停止elk某个组件进程或者删除目录。如果需要卸载依赖软件,需要使用root用户。
5,关于role的介绍
roles: <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles
project: <---具体的角色项目名称,比如nginx、tomcat、php
files: <--用来存放由copy模块或script模块调用的文件。
templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks: <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
main.yml
handlers: <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
main.yml
vars: <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
main.yml
defaults: <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
main.yml
meta: <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。
main.yml
6,手动添加防火墙规则
偷懒没写到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.yml
install-es.yml
install-kibana.yml
install-logstash.yml
uninstall-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目录,把对应的安装包放上去。
ansible应用之安装elk框架的更多相关文章
- ansible指路篇-安装及基本命令使用
ansible指路篇-安装及基本命令使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是ansible ansible是新出现的自动化运维工具,基于Python开发,集合 ...
- ansible示例,离线安装etcd
一.基础介绍 ========================================================================================== 1. ...
- 虚拟机创建及安装ELK
虚拟机创建及安装ELK 作者:高波 归档:学习笔记 2018年5月31日 13:57:02 快捷键: Ctrl + 1 标题1 Ctrl + 2 标题2 Ctrl + 3 标题3 C ...
- Win8.1 安装Express 框架
1.安装Windows Node.js客户端 2.安装Express框架 我本机是Win8.1的,使用命令npm install -g express安装Express,安装完成后显示一些安装明细,刚 ...
- nodejs学习笔记一:安装express框架并构建工程目录
偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...
- Windows 安装ELK
在Windows服务器上安装ELK logstash在windows平台下不能监控磁盘文件,用nxlog代替,监控文件并把内容发送到logstash 部署环境 Os :Windows 7 logsta ...
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana)
第一次听到ELK,是新浪的@ARGV 介绍内部使用ELK的情况和场景,当时触动很大,原来有那么方便的方式来收集日志和展现,有了这样的工具,你干完坏事,删除日志,就已经没啥作用了. 很多企业都表示出他们 ...
随机推荐
- JAVA语言基础组成(2)
函数 函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...
- 成为 Apache 贡献者,从提交第一个简单 PR 开始!
开源之路,PR 走起 ! ---全球最大同性交友社区 1 fork 以下实例以 incubator-dolphinscheduler 海豚调度为例进行操作 从远端仓库* https://github. ...
- .NET 7 发布的最后一个预览版Preview 7, 下个月发布RC
微软在2022年8月9日 发布了.NET 7 Preview 7[1],这是它在11月10日 RTM 之前进入发布候选阶段之前的最后预览版. 预览版 7 已在 Visual Studio 17.4 预 ...
- 「SHOI2014」概率充电器
题面 n <= 500000 0<= p,qi <= 100 题解 这是道概率树形DP题,但是很难推怎么用加法原理和乘法原理正向求每个点被充电的概率,所以我们求每个点不被充电的概 ...
- LOJ2312 LUOGU-P3733「HAOI2017」八纵八横 (异或线性基、生成树、线段树分治)
八纵八横 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路的两端都是城市(可能两端是同一个 ...
- Linux有趣命令
通外网 下载使用阿里云镜像源:wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.re ...
- KingbaseES R6 集群修改data目录
案例说明: 本案例是在部署完成KingbaseES R6集群后,由于业务的需求,集群需要修改data(数据存储)目录的测试.本案例分两种修改方式,第一种是离线修改data目录,即关闭整个集群后,修改数 ...
- 【读书笔记】C#高级编程 第八章 委托、lambda表达式和事件
(一)引用方法 委托是寻址方法的.NET版本.委托是类型安全的类,它定义了返回类型和参数的类型.委托不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda表达式与委托直接相关.当参数是委托类 ...
- 累加和为 K 的最长子数组问题
累加和为 K 的最长子数组问题 作者:Grey 原文地址: 博客园:累加和为 K 的最长子数组问题 CSDN:累加和为 K 的最长子数组问题 题目描述 给定一个整数组成的无序数组 arr,值可能正.可 ...
- Scrum五大会议要怎么开?
在Scrum框架中,我们对Scrum的五个会议一定都不陌生,但如何组织这五个会议,才能让Scrum团队真正积极.主动地参与进项目管理中呢?接下来我们会以一个Sprint为周期,详细介绍一下Sprint ...