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用户 。

推荐阅读