一、介绍

总共4台机器,分别为

192.168.1.99

192.168.1.100

192.168.1.210

192.168.1.211

服务所在机器为:

redis:192.168.1.211

logstash: 192.168.210 192.168.1.211

elasticsearch: 分别布置在四台(211不为主、不存储数据)

kibana:192.168.1.211

nginx:192.168.1.211

二、elk集群架构图

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

cd /etc/ansible
mkdir -pv elk/roles/{jdk,redis,logstash,es,es_head,kibana,nginx}/{tasks,files,templates,meta,handlers,vars}

四、配置hosts

在/etc/ansible/hosts添加如下内容:

[jdk_servers]
192.168.1.99
192.168.1.100
192.168.1.210
192.168.1.211 [redis_servers]
192.168.1.211 [es_servers]
192.168.1.99 node_name=node-99 node_master=true node_data=true network_host=192.168.1.99
192.168.1.100 node_name=node-100 node_master=true node_data=true network_host=192.168.1.100
192.168.1.210 node_name=node-210 node_master=true node_data=true network_host=192.168.1.210
192.168.1.211 node_name=node-211 node_master=true node_data=true network_host=192.168.1.211 [es_plugin_head]
192.168.1.211 [logstash_servers]
192.168.1.210
192.168.1.211 [kibana_servers]
192.168.1.211 [nginx_servers]
192.168.1.211

PS:es_servers组里面,后面定义了变量,因为es配置文件中,会根据服务器的不同,对应的配置也不同,在这里定义,可以直接在tasks里面去引用

五、JDK roles

1.把jdk-8u91-linux-x64.tar.gz和Java环境变量脚本传到files目录下

2.编写vars

[root@master jdk]# cat vars/main.yml
jdk_package_name: jdk-8u91-linux-x64.tar.gz
env_dir: /etc/profile.d

3.编写tasks

[root@master jdk]# cat tasks/main.yml
- name: copy jdk software
copy: src={{ jdk_package_name }} dest=/tmp/ owner=root group=root
- name: uncompression jdk software
shell: tar -zxf /tmp/{{ jdk_package_name }} -C /usr/local/
- name: copy jdk env
copy: src=java.sh dest={{ env_dir }}/ owner=root group=root mode=0644
- name: enforce env
shell: source {{ env_dir }}/java.sh
- name: delete jdk compressin files
shell: rm -f /tmp/{{ jdk_package_name }}

4.使用角色

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

[root@master elk]# cat jdk.yml
- hosts: 127.0.0.1
remote_user: root
roles:
- jdk

5. 运行playbook安装jdk

[root@master elk]# ansible-playbook jdk.yml

六、redis roles

1.把redis.tar.gz传到files目录下,redis配置文件和启动脚本传到templates目录下

2.编写vars

[root@master redis]# cat vars/main.yml
redis_package_file: redis.tar.gz
redis_dir: /usr/local/redis
exec_dir: /etc/init.d

3.编写tasks

[root@master redis]# cat tasks/main.yml
- name: copy redis software
copy: src={{ redis_package_file }} dest=/tmp/ owner=root group=root
- name: uncompression redis software
shell: tar zxf /tmp/{{ redis_package_file }} -C /usr/local
- name: copy redis start script
template: src=redis dest={{ exec_dir }}/ owner=root group=root mode=0755
- name: copy redis config
template: src=redis.conf dest={{ redis_dir }}/etc/ owner=redis group=redis
- name: create redis user
user: name=redis shell=/sbin/nologin
- name: change owner and group
file: path={{ redis_dir }} owner=redis group=redis #recurse=yes
- name: mkdir directory for redis data
file: dest=/data/redis mode=0755 state=directory owner=redis group=redis
- name: start redis service
shell: /etc/init.d/redis start
- name: add boot start redis start
shell: chkconfig --level 345 redis on
- name: delete redis compression files
shell: rm -f /tmp/{{ redis_package_file }}

4.使用角色

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

[root@master elk]# cat redis.yml
- hosts: redis_servers
remote_user: root
roles:
- redis

5. 运行playbook安装redis

[root@master elk]# ansible-playbook redis.yml

七、logstash roles

1.把logstash.tar.gz传到files目录下,logstash自定义配置文件和启动脚本传到templates目录下

2.编写vars

[root@master logstash]# cat vars/main.yml
logstash_package_file: logstash.tar.gz
logstash_dir: /usr/local/logstash

3.编写tasks

[root@master logstash]# cat tasks/main.yml
- name: copy logstash software
copy: src={{ logstash_package_file }} dest=/tmp/ owner=root group=root
- name: uncompression logstash software
shell: tar zxf /tmp/{{ logstash_package_file }} -C /usr/local
- name: mkdir config files dir
file: dest={{ logstash_dir }}/conf.d mode=0755 state=directory owner=es group=es
- name: copy logstash start script
template: src=start.sh dest={{ logstash_dir }}/ owner=es group=es mode=0755
- name: copy logstash config
template: src=visit.conf dest={{ logstash_dir }}/conf.d/ owner=es group=es
- name: create es user
user: name=es
- name: change owner and group
file: path={{ logstash_dir }} owner=es group=es
- name: start logstash service
shell: su - es -c "{{ logstash_dir }}/start.sh"
- name: delete logstash compression files
shell: rm -f /tmp/{{ logstash_package_file }}

4.使用角色

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

[root@master elk]# cat logstash.yml
- hosts: logstash_servers
remote_user: root
roles:
- logstash

5. 运行playbook安装logstash

[root@master elk]# ansible-playbook logstash.yml

八、es roles

1.把elasticsearch.tar.gz传到files目录下,es配置文件和启动脚本传到templates目录下

2.编写vars

[root@master es]# cat vars/main.yml
es_package_file: elasticsearch.tar.gz
es_dir: /usr/local/elasticsearch
config_name: elasticsearch.yml

3.编写tasks

[root@master es]# cat tasks/main.yml
- name: copy es software
copy: src={{ es_package_file }} dest=/tmp/ owner=root group=root
- name: uncompression es software
shell: tar zxf /tmp/{{ es_package_file }} -C /usr/local
- name: copy es start script
template: src=start.sh dest={{ es_dir }}/ owner=es group=es mode=0755
- name: copy es config
template: src=elasticsearch.yml dest={{ es_dir }}/config/ owner=es group=es
- name: update es config
shell: sed -i "{{ item }}" {{ es_dir }}/config/{{ config_name }}
with_items:
- 's/#node.name/node.name: {{ node_name }}/'
- 's/#node.master/node.master: {{ node_master }}/'
- 's/#node.data/node.data: {{ node_data }}/'
- 's/#network.host/network.host: {{ network_host }}/'
- name: create es user
user: name=es
- name: change owner and group
file: path={{ es_dir }} owner=es group=es #recurse=yes
- name: mkdir directory for es data
file: dest=/data/elasticsearch mode=0755 state=directory owner=es group=es
notify: mkdir Subdirectory
- name: start es service
shell: su es -c 'cd {{ es_dir }} && ./start.sh'
- name: delete es compression files
shell: rm -f /tmp/{{ es_package_file }}

4.编写handlers

[root@master es]# cat handlers/main.yml
- name: mkdir Subdirectory
file: dest=/data/elasticsearch/{{ item }} mode=0755 state=directory owner=es group=es
with_items:
- logs
- data

5.使用角色

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

[root@master elk]# cat es.yml
- hosts: es_servers
remote_user: root
roles:
- es

5. 运行playbook安装es

[root@master elk]# ansible-playbook es.yml

九、es-head roles

1.把node-v4.4.7-linux-x64.tar.gz和elasticsearch-head.tar.gz传到files目录下,把_site/app.js传到templates目录下

2.编写vars

[root@master es_head]# cat vars/main.yml
node_package_file: node-v4.4.7-linux-x64.tar.gz
node_dir: /usr/local/node-v4.4.7-linux-x64
head_package_file: elasticsearch-head.tar.gz
head_dir: /usr/local/elasticsearch/elasticsearch-head

3.编写tasks

[root@master es_head]# cat tasks/main.yml
- name: copy node software
copy: src={{ node_package_file }} dest=/tmp/ owner=root group=root
- name: uncompression node software
shell: tar zxf /tmp/{{ node_package_file }} -C /usr/local/
- name: copy node to env
shell: rsync -a {{ node_dir }}/bin/* /usr/bin/
- name: copy head plugin software
copy: src={{ head_package_file }} dest=/tmp/ owner=root group=root
- name: uncopmression head plugin software
shell: tar zxf /tmp/{{ head_package_file }} -C /usr/local/elasticsearch/
- name: copy head config
template: src=app.js dest={{ head_dir }}/_site/ owner=es group=es
- name: change owner and group
file: path={{ head_dir }} owner=es group=es #recurse=yes
- name: start es service
shell: su es -c 'cd {{ head_dir }} && npm run start > {{ head_dir }}/run.log &'
- name: delete node compression files
shell: rm -f /tmp/{{ node_package_file }}
- name: delete head compression files
shell: rm -f /tmp/{{ head_package_file }}

4.使用角色

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

[root@master elk]# cat es_head.yml
- hosts: es_plugin_head
remote_user: root
roles:
- es_head

5. 运行playbook安装es-head

ansible-playbook es_head.yml

十、kibana roles

1.把kibana.tar.gz传到files目录下,kibana配置文件和启动脚本传到templates目录下

2.编写vars

[root@master kibana]# cat vars/main.yml
kibana_package_file: kibana.tar.gz
kibana_dir: /usr/local/kibana

3.编写tasks

[root@master kibana]# cat tasks/main.yml
- name: copy kibana software
copy: src={{ kibana_package_file }} dest=/tmp/ owner=root group=root
- name: uncompression kibana software
shell: tar zxf /tmp/{{ kibana_package_file }} -C /usr/local
- name: copy kibana start script
template: src=start.sh dest={{ kibana_dir }}/ owner=es group=es mode=0755
- name: copy kibana config
template: src=kibana.yml dest={{ kibana_dir }}/config/ owner=es group=es
- name: change owner and group
file: path={{ kibana_dir }} owner=es group=es
- name: start kibana service
shell: su - es -c "{{ kibana_dir }}/start.sh"
- name: delete kibana compression files
shell: rm -f /tmp/{{ kibana_package_file }}

4.使用角色

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

[root@master elk]# cat kibana.yml
- hosts: kibana_servers
remote_user: root
roles:
- kibana

5. 运行playbook安装kibana

ansible-playbook kibana.yml

十一、nginx roles(211本身就已经安装nginx,如果目标机器没安装,请参考我之前的文章)

1.把htpasswd生成密码的对应文件传到files目录下,nginx配置文件传到templates目录下

2.编写vars

[root@master nginx]# cat vars/main.yml
nginx_basedir: /usr/local/nginx

3.编写tasks

[root@master nginx]# cat tasks/main.yml
- name: copy conf file
template: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
with_items:
- { src: es.conf, dest: conf/vhosts/ }
- { src: kibana.conf, dest: conf/vhosts/ }
- name: copy passwd file
copy: src={{ item }} dest={{ nginx_basedir }}/conf/htpasswd/ owner=root group=root mode=0644
with_items:
- es
- kibana
notify: restart nginx

4.编写handlers

[root@master nginx]# cat handlers/main.yml
- name: restart nginx
shell: /usr/local/nginx/sbin/nginx -s reload

5.使用角色

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

[root@master elk]# cat nginx.yml
---
- hosts: nginx_servers
user: root
roles:
- nginx

5. 运行playbook加载nginx

ansible-playbook nginx.yml

最新文章

  1. Eclipse不自动编译java文件的终极解决方案
  2. mybatis+MySQL--CRUD
  3. Amazon AWS EC2开启Web服务器配置
  4. HTML 学习笔记 CSS3 (多列)
  5. Ubuntu Server安装图形界面全过程
  6. POJ3038 Flying Right
  7. http https 区别
  8. ubuntu下安装基本配置
  9. codevs 2449 骑士精神 (IDDfs)
  10. Ftp连接错误
  11. /etc/ld.so.conf详解
  12. codeforce vk cup2017
  13. linux之有名管道
  14. PopupMenuDemo【popupMenu的简单使用】
  15. LoadRunner【第一篇】下载、安装、破解
  16. APICloud-数据存储
  17. 以加密方式访问tomcat服务器
  18. Github链接及git学习心得总结
  19. git一些实践命令,关于reabse和merge的区别在最后做了一个比较
  20. Echarts 简单报表系列四:雷达图

热门文章

  1. 复习及总结--.Net线程篇(2)
  2. Memcached 之 .NET(C#)实例分析
  3. LeetCode-Count Bits
  4. Python使用函数实现把字符串转换成整数
  5. jQuery UI dialog 参数说明
  6. org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade 解决方案 (网络转载)
  7. 巨蟒python全栈开发flask14项目开始6
  8. Spoken English Practice(Don't get me wrong, that explanation makes no difference, I'm still mad at you. Come on, be reasonable!)
  9. Rete_algorithm
  10. 年假小 Plan