阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7.2部署Elasticsearch+Kibana+Zookeeper+Kafka

186次阅读
没有评论

共计 8670 个字符,预计需要花费 22 分钟才能阅读完成。

CentOS 7.2 部署 Elasticsearch-5.0.1+Kibana-5.0.1+Zookeeper3.4.6+Kafka_2.9.2-0.8.2.1 详解。

CentOS 7.2 部署 Elasticsearch+Kibana+Zookeeper+Kafka

环境准备:
操作系统:centos7.2 x86_64

# uname -a
Linux u04elk03.yaya.corp 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
软件包:
jdk-8u102-linux-x64.rpm
kibana-5.0.1-x86_64.rpm
elasticsearch-5.0.1.rpm
kafka 版本:2.9.2-0.8.2.1.tgz
zookeeper3.4.6.tar.gz

zook 和 kafka 集群:
u04elk03.yaya.corp
u04elk02.yaya.corp
u04elk.yaya.corp

elasticsearch 集群:
u04elk03.yaya.corp
u04elk02.yaya.corp

1. 安装 jdk1.8,记得删除之前的 openjdk 或者低版本 jdk

rpm -e –nodeps Java-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64
rpm -e –nodeps Python-javapackages-3.4.1-11.el7.noarch
rpm -e –nodeps tzdata-java-2016f-1.el7.noarch
rpm -e –nodeps java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64
rpm -e –nodeps javapackages-tools-3.4.1-11.el7.noarch

2. 安装 elasticsearch-5.0.1
下载地址:https://www.elastic.co/downloads
rpm -ivh elasticsearch-5.0.1.rpm

u04elk02.yaya.corp 的 elasticsearch.yml 配置
cluster.name: yunva_elk_cluster

node.name: u04elk02.yaya.corp
node.master: true
node.data: true
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200

u04elk03.yaya.corp 的配置
# cat /etc/elasticsearch/elasticsearch.yml
cluster.name: yunva_elk_cluster

node.name: u04elk03.yaya.corp
node.master: true
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200

创建日志和数据存放目录
mkdir -p /data/es/data
mkdir /data/es/logs
chown -R elasticsearch.elasticsearch /data/es

启动 elasticsearch

systemctl start elasticsearch
systemctl enable elasticsearch

访问以下 web 地址验证是否 ok:
http://192.168.3.13:9200/

出现如下信息,说明没有问题

{
  “name” : “u04elk02.yaya.corp”,
  “cluster_name” : “yunva_elk_cluster”,
  “cluster_uuid” : “_6G7IvUeT6-2Qdh_AXo2mA”,
  “version” : {
    “number” : “5.0.1”,
    “build_hash” : “080bb47”,
    “build_date” : “2016-11-11T22:08:49.812Z”,
    “build_snapshot” : false,
    “lucene_version” : “6.2.1”
  },
  “tagline” : “You Know, for Search”
}

可以查看相关集群的状态信息

# curl -XGET ‘http://localhost:9200/_cluster/state/{metrics}/{indices}’
{“cluster_name”:”yunva_elk_cluster”}

# curl -XGET ‘http://localhost:9200/_cluster/state?pretty’
{
  “cluster_name” : “yunva_elk_cluster”,
  “version” : 2,
  “state_uuid” : “hHaLqrlyT4KszbCCZ5Yy-Q”,
  “master_node” : “oe-62CJxS_G5sKLYWeepqA”,
  “blocks” : {},
  “nodes” : {
    “oe-62CJxS_G5sKLYWeepqA” : {
      “name” : “u04elk02.yaya.corp”,
      “ephemeral_id” : “qhW1YiSURwKZUenjKDRWZw”,
      “transport_address” : “10.19.124.119:9300”,
      “attributes” : {}
    }
  },
  “metadata” : {
    “cluster_uuid” : “4b6LLl0GRdWNm9r7acGE8Q”,
    “templates” : {},
    “indices” : {},
    “index-graveyard” : {
      “tombstones” : []
    }
  },
  “routing_table” : {
    “indices” : {}
  },
  “routing_nodes” : {
    “unassigned” : [],
    “nodes” : {
      “oe-62CJxS_G5sKLYWeepqA” : []
    }
  }
}

elasticsearch-5.0.1 只支持内核 3.5 以上版本的 linux 操作系统
centos6.5 报错:
[2016-11-23T16:16:24,329][WARN][o.e.b.JNANatives] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in

①优化 elasticsearch 内存配置:
修改配置文件:

vim /etc/elasticsearch/jvm.options
-Xms10g
-Xmx10g

建议配置为物理最大内存的一半以上,在 /usr/share/elasticsearch/bin/elasticsearch.in.sh 配置没有用

查看日志出现类似 heap size [9.9gb] 说明配置成功:
[2016-11-23T20:02:52,900][INFO][o.e.e.NodeEnvironment] [u04elk02.yaya.corp] heap size [9.9gb], compressed ordinary object pointers [true]

②配置文件句柄
vim /etc/security/limits.d/20-nproc.conf
删除这行:
*          soft    nproc    4096

3. 安装 kibana
rpm -ivh kibana-5.0.1-x86_64.rpm

编辑配置文件
vim /etc/kibana/kibana.yml
修改这两项,其他默认不用动
server.host: “0.0.0.0”
elasticsearch.url: “http://localhost:9200”

启动命令:
systemctl start kibana
systemctl enable kibana

4. 安装 zookeeper 集群,单独配置,不用 kafka 自带的(集群节点建议是单数个,本次我们有启用 3 个节点)

下载地址:http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/
tar -zxf zookeeper-3.4.6.tar.gz
cd /data/zookeeper-3.4.6/
cp zoo_sample.cfg zoo.cfg

vim zoo.cfg
—————————————
tickTime=2000
initLimit=10
syncLimit=5
# 数据保存目录
dataDir=/data/zookeeper-3.4.6/data
# 日志保存目录
dataLogDir=/data/zookeeper-3.4.6/logs
# 保留的快照个数
autopurge.snapRetainCount=20
# 保留的时间,单位小时
autopurge.purgeInterval=30
clientPort=2181
server.1=u04elk.yaya.corp:2888:3888
server.2=u04elk02.yaya.corp:2888:3888
server.3=u04elk03.yaya.corp:2888:3888
—————————————

创建 data 和 Log 文件夹

mkdir /data/zookeeper-3.4.6/data
mkdir /data/zookeeper-3.4.6/logs

在 zoo.cfg 中的 dataDir 指定的目录下,新建 myid 文件。
例如:$ZK_INSTALL/data 下,新建 myid。在 myid 文件中输入 1。表示为 server.1。
cd /data/zookeeper-3.4.6/data/myid
touch myid
echo 1 > myid

将整个目录拷贝到其他节点,然后修改 myid 为各自的节点标示即可:
scp -P 2022 /data/zookeeper-3.4.6/ -r u04elk.yaya.corp:/data/

5.kafka 配置
下载地址:http://kafka.apache.org/downloads
 
/data/kafka_2.9.2-0.8.2.1
# egrep -v “#|^$” config/server.properties
—————————————
broker.id=1
port=9092
host.name=0.0.0.0
num.network.threads=3
 
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=u04elk.yaya.corp:2181,u04elk02.yaya.corp:2181,u04elk03.yaya.corp:2181
zookeeper.connection.timeout.ms=6000
—————————————

只改 zook 和 host.name,broker.id= 1 这三项,其他默认
zookeeper.connect=u04elk.yaya.corp:2181,u04elk02.yaya.corp:2181,u04elk03.yaya.corp:2181
host.name=0.0.0.0

启动
bin/kafka-server-start.sh config/server.properties &

注意:
broker.id=0  broker 的 id,每个 kafka 节点配置不能一样,可以 0,1,2 等
host.name=192.168.10.2 broker 的 hostname;如果 hostname 已经设置的话,broker 将只会绑定到这个地址上;如果没有设置,它将绑定到所有接口,并发布一份到 ZK。每台节点设置成当前节点的 IP 地址

将文件拷贝到其他节点,修改 broker.id 的值,在各节点中启动 kafka:
scp -P 2022 /data/kafka_2.9.2-0.8.2.1 -r u04elk.yaya.corp:/data/

bin/kafka-server-start.sh config/server.properties &

zook 启动报错:
# ./zkServer.sh status
JMX enabled by default
Using config: /data/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

网上的解决方案:

1. 打开 zkServer.sh 找到 status)
STAT=`echo stat | nc localhost $(grep clientPort “$ZOOCFG” | sed -e ‘s/.*=//’) 2> /dev/null| grep Mode`
在 nc 与 localhost 之间加上 -q 1(是数字 1 而不是字母 l)
如果已存在则去掉
注: 在我的 zkServer.sh 脚本文件里根本没有这一行, 所以没有生效

2. 调用 sh zkServer.sh status 遇到这个问题。百度,google 了后发现有人是修改 sh 脚本里的一个 nc 的参数来解决,可在 3.4.6 的 sh 文件里并没有找到 nc 的调用。配置文档里指定的 log 目录没有创建导致出错,手动增加目录后重启,问题解决。
注: 我想不是日志的问题所以这个方法根本就没有试

3. 创建数据目录, 也就是在你 zoo.cfg 配置文件里 dataDir 指定的那个目录下创建 myid 文件, 并且指定 id, 改 id 为你 zoo.cfg 文件中 server.1=localhost:2887:3887 中的 1. 只要在 myid 头部写入 1 即可.
注: 这是我的解决办法

实际的解决办法:
vim /etc/hosts

将本机对应的 127.0.0.1 和 192.168.1.103 对应的主机名删除(主机名是正确的,但是无法启动,可能是绑定了 127.0.0.1)

kafka 在 centos 系统上的报错:
/data/kafka_2.9.2-0.8.2.1/zookeeper.out 文件中的报错:Path:/admin/preferred_replica_election Error:KeeperErrorCode = NoNode for /admin/preferred_replica_election

2016-11-23 19:26:33,472 [myid:2] – INFO  [ProcessThread(sid:2 cport:-1)::PrepRequestProcessor@645] – Got user-level KeeperException when processing sessionid:0x25890ed3acc0000 type:create cxid:0x10 zxid:0x20000000b txntype:-1 reqpath:n/a Error Path:/admin Error:KeeperErrorCode = NoNode for /admin
2016-11-23 19:26:33,641 [myid:2] – INFO  [ProcessThread(sid:2 cport:-1)::PrepRequestProcessor@645] – Got user-level KeeperException when processing sessionid:0x25890ed3acc0000 type:setData cxid:0x1a zxid:0x20000000f txntype:-1 reqpath:n/a Error Path:/controller_epoch Error:KeeperErrorCode = NoNode for /controller_epoch
2016-11-23 19:26:33,682 [myid:2] – INFO  [ProcessThread(sid:2 cport:-1)::PrepRequestProcessor@645] – Got user-level KeeperException when processing sessionid:0x25890ed3acc0000 type:delete cxid:0x27 zxid:0x200000011 txntype:-1 reqpath:n/a Error Path:/admin/preferred_replica_election Error:KeeperErrorCode = NoNode for /admin/preferred_replica_election

原因���析:
机器有两块网卡,kafka 的 host.name 开始只绑定在了内部 IP 上,另一块对外网卡无法访问,把值设置为空的话会 kafka 监听端口在所有的网卡上绑定,但是在外网访问时,客户端又遇到了 java.nio.channels.ClosedChannelException 异常信息,server 端用 tcpdump 分析的时候发现客户端有传递 kafka 所在机器的机器名过来。在 client 里断点跟踪一下发现是 findLeader 的时候返回的元信息是机器名而不是 IP。客户端无法解析这个机器名所以出现了前面的异常。

在 server.properties 里还有另一个参数是解决这个问题的,advertised.host.name 参数用来配置返回的 host.name 值,把这个参数配置为外网 IP 地址即可。

这个参数默认没有启用,默认是返回的 java.net.InetAddress.getCanonicalHostName 的值,在我的 mac 上这个值并不等于 hostname 的值而是返回 IP,但在 linux 上这个值就是 hostname 的值。

ElasticSearch 最新版本 2.20 发布下载了  http://www.linuxidc.com/Linux/2016-02/128166.htm

Linux 上安装部署 ElasticSearch 全程记录  http://www.linuxidc.com/Linux/2015-09/123241.htm

Elasticsearch 安装使用教程 http://www.linuxidc.com/Linux/2015-02/113615.htm

ElasticSearch 配置文件译文解析 http://www.linuxidc.com/Linux/2015-02/114244.htm

ElasticSearch 集群搭建实例  http://www.linuxidc.com/Linux/2015-02/114243.htm

分布式搜索 ElasticSearch 单机与服务器环境搭建  http://www.linuxidc.com/Linux/2012-05/60787.htm

ElasticSearch 的工作机制  http://www.linuxidc.com/Linux/2014-11/109922.htm 

Elasticsearch 的安装,运行和基本配置 http://www.linuxidc.com/Linux/2016-07/133057.htm

使用 Elasticsearch + Logstash + Kibana 搭建日志集中分析平台实践  http://www.linuxidc.com/Linux/2015-12/126587.htm

Ubuntu 14.04 搭建 ELK 日志分析系统(Elasticsearch+Logstash+Kibana) http://www.linuxidc.com/Linux/2016-06/132618.htm

Elasticsearch1.7 升级到 2.3 实践总结  http://www.linuxidc.com/Linux/2016-11/137282.htm

ElasticSearch 的详细介绍:请点这里
ElasticSearch 的下载地址:请点这里 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137636.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8670字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中