ELK日志分析系统之Elasticsearch集群(一)

ELK日志分析系统之Elasticsearch集群(一)

前言

由于整个架构涉及了多个集群, 需要部署的工具很多,这里采用ansible来配合部署.

机器规划

102.168.147.10   ansible管理机

102.168.147.11    elastic-1   (node-master node-data)     head 插件  kibana  展示

102.168.147.12    elastic-2  (node-master   node-data)

102.168.147.13     elastic-3  (node-data)

102.168.147.14     kafka-zook-1

102.168.147.15     kafka-zook-2

102.168.147.16     kafka-zook-3

102.168.147.17     logstash

ansible_host文件展示

[all]
192.168.137.[10:17]
[kafka-zook]
192.168.137.[11:13]
[elastic]
192.168.137.[14:16]
[logstash]
192.168.137.17

  • 无交互密钥脚本

#!/bin/bash
#author:王庭威
#descrip:无交互分发密钥
#date:2019.01.29
port=22
password=123456
for ip in 192.168.137.{10..17}
do
sshpass -p $password ssh-copy-id -i ~/.ssh/id_rsa.pub -p $port -o StrictHostKeyChecking=no root@$ip
echo $ip “密钥分发成功”
done

  • ansible  ping 测试

部署elastic集群

批量安装jdk:

因为elastic是以java编写,运行需要jdk环境, 本地ansible下载好jdk文件,然后分发elastic集群.本地编写jdk安装脚本,通过ansible script模块执行本地脚本

ansible elastic -m copy -a “src=/root/jdk-8u201-linux-x64_.tar.gz dest=/root/jdk-8u201-linux-x64_.tar.gz”

  • jdk安装脚本

#!/bin/bash
#作者:王庭威
yum install java -y
jdk_name=jdk-8u201-linux-x64_.tar.gz
tar -xvzf $jdk_name -C /usr/local
cd /usr/local/ && ln -s ./jdk1.8.0_201/ jdk
cat >>/etc/profile<<EOF
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
source /etc/profile

  • 为脚本添加权限

chmod a+x jdk_install.sh

  • ansible通过script执行

ansible elastic -m script -a “/root/jdk_install.sh”

  • 验证jdk是否安装

ansible elastic -m shell -a “java -version”

  • 下载elasticsearch软件包(这里用rpm安装)

ansible elastic -m copy -a “src=/root/elasticsearch-6.7.0.rpm dest=/root/elasticsearch-6.7.0.rpm”

ansible elastic -m shell -a “yum install elasticsearch-6.7.0.rpm -y “

ansible elastic -m shell -a “rpm -qa |grep elastic “

  • 内核调优

#!/bin/bash
#作者:王庭威
#描述:内核调优
echo “fs.file-max=655360” >>/etc/sysctl.conf
echo “vm.max_map_count=262144” >>/etc/sysctl.conf
######################################################
cat >> /etc/security/limits.conf<<EOF
* soft nproc 20480
* hard nproc 20480
* soft nofile 65536
* hard nofile 65536
* soft memlocak unlimited
* hard memlocak unlimited
EOF
rm -rf /etc/security/limits.d/20-nproc.conf
sysctl -p

  • elasitc集群执行调优脚本

ansible elastic -m script -a “/root/kernel_up.sh”

  • elasitc配置文件设置

[root@elastic-1 ~]# grep -Ev ‘^#| $’ /etc/elasticsearch/elasticsearch.yml


cluster.name: elastic   #集群名字,自定义
node.name: elastic-1   #节点名字,自定义
node.data: true              #每台都作为node data节点
node.master: true          #指定为node-master节点,这里我把elastic-1和elastic-2指定为master节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0    #监听节点,默认是127.0.0.1 需要改成0.0.0.0 .但是不安全.可以改成自己内网网段.
http.port: 9200           #服务端口
discovery.zen.ping.unicast.hosts: [“192.168.137.15:9300”, “192.168.137.16:9300”] #集群服务发现.这里需要填写排除自己意外的其他两个节点,记得发现端口是9300
discovery.zen.minimum_master_nodes: 1  #指定最少master节点 ,master节点少于1 elastic集群将不可用.

http.cors.enabled: true      #下面两行为了配合head插件需要跨域.
http.cors.allow-origin: “*”


  • 启动elasticsearch并检查

service elasticsearch start 

chkconfig elasticsearch on

  • 安装elasticsearch-head插件

head插件已经独立成一个项目了,用nodejs 安装

这里将插件安装在elastic-1节点上

脚本如下:


#!/bin/bash
#作者:王庭威
#descrip:安装head插件
yum install git nodejs npm -y
cd /usr/local && git clone https://github.com/mobz/elasticsearch-head.git
npm config set registry https://registry.npmjs.org/
cd /usr/local/elasticsearch-head && npm install


  • 修改head监听地址(默认是localhost)

vim /usr/local/elasticsearch-head/_site/app.js

  • 启动head服务

npm  run start & 

  • elasticsearch.yml添加跨域支持
  • 否则访问head会出现集群未连接的灰色状态,通过f12会看到各种403

http.cors.enabled: true     
http.cors.allow-origin: “*”

  • 访问head页面

总结

可以看到集群的三个节点,由于我们没有任何数据,所以上面集群健康值是0,是正常的,到此三节点elasticsearch+head插件部署完成

 

 

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...