Develope/Programming

0. ElasticSearch + FileBeat + Kafka 기본 설치 및 연동

고로이 2017. 10. 30. 17:31
반응형

1. Elastic Search 설치

1-1. 다운로드

     rpm 혹은 tar로 설치한다.

     tar - xvf elasticsearch-5.4.0.tar.gz

1-2. 옵션 설정
$ cd ElasticSearch/config
$ vi elastic search.yml 

1) 클러스터 명
cluster.name: EUNBI     (ex)

클러스터의 이름. 
노드들을 공유할 때 같은 이름을 사용하면 된다.

2) 노드
-마스터 노드의 경우-
node.name: "master"    (""<-필요, 버전에 따라 안써도 될 수도 있음)
node.master: true
node.data: true            (false도 가능, 마스터 노드가 데이터 노드이기도 할 때 true)

-데이터(슬레이브) 노드의 경우-
node.name: "slave1"
node.master: false
node.data: true

3) 네트워크 
network.host: 127.0.0.1      (default, 각자의 서버이름을 적기)
http.port: 9200                   (default)

http.cors.enabled: true          
http.cors.allow-origin: "*"     

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: server01
#
# Set a custom port for HTTP:
#
http.port: 9200
transport.tcp.port: 9300


1-4) Discovery   
          **Master 경우**
# --------------------------------- Discovery ----------------------------------
#
# Elasticsearch nodes will find each other via unicast, by default.
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.zen.ping.unicast.hosts: ["server02", "server03"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
#
discovery.zen.minimum_master_nodes: 1
#

          **Slave 경우**
# --------------------------------- Discovery ----------------------------------
#
# Elasticsearch nodes will find each other via unicast, by default.
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.zen.ping.unicast.hosts: ["server01:9300"]


ps. 버젼에 따라 호스트를 타 주소로 입력하면, 메모리의 문제가 생긴다
localhost일 때는 warning이엇는데
타 주소는 에러이다. 에러 메세지를 따라 유저에 리미트를 sudo 권한으로 늘리면 됌


1-3. 추가설정
- 방화벽 설정 : port, 혹은 방화벽 내리기


1-4. 실행
./bin/elasticsearch 
위 커맨드로 바로 실행 가능

 - 추가옵션 
-d : 데몬으로 실행
-p 파일명 : pid를 파일명에 저장


이를 토대로 shell script 작성가능

[start.sh]
./bin/elasticsearch -d -p es.pid

[stop.sh]
kill $(cat es.pid)


ps. slave 실행 시 [elasticsearch] failed to send join request to master. same id but is a different node instance
위와 비슷한 오류가 뜰 때, 
data 폴더의 내용을 삭제해주면 된다.
데이터 노드 복사로 아이디가 겹쳐서 나는 에러


1-5. 설치 확인
curl -XGET http://[마스터 서버 명]:9200/

curl -XGET http://server01:9200/
*이름과 클러스터명 확인

curl -XGET http://server01:9200/ _cluster/hearlth?pretty
*데이터 노드와 총 노드개수 확인


2. FileBeat 설치


2-1. 다운로드

file비트 뿐만이 아니라
패킷 등 여러 비트가 존재

elasticsearch 와 호환되는 버전을 받아야 한다. 고 한다.

tar -xvf filebeat-5.4.0-linux-x86_64.tar.gz

2-2. 환경설정
fileBeat에는 full과 default 두가지 설정파일이 존재한다.
디폴트에 추가하자

1) prospectors
input type과 path를 설정한다.
패스는 기본이 /var/log/*.log 이다

exclude file 등에 특정 파일을 제외할 수 있다. 사용은 REGEX

권한이 없어서 접근하지 못하는 파일들 (ex)yum)을 제외시키자.


2) output

아웃풋은 기본이 엘라스틱서치

로그스태시나 카프카도 이용 가능하다.

템플릿 관련해서 직접 지정해 줄 수 있다.

template.name: "filebeat"
temlplate.path: "filebeat.template.json"
template.overwrite: true

덮어쓰기는 일단 트루를 줫는데 보통은 false로 준다고들 한다. 

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.0.4:9200"]

  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"
#------------------------------kafka output-----------------------------------
#
#output.kafka:
#  hosts: ["192.168.0.4:9092"]

 # topic: EUNBI

  #max_message_bytes: 1000000

2-3. Template 설정
인덱스에 관한 템플릿이다. 인덱스가 새로 생성될 때의 규칙을 템플릿으로 지정한 것이다. 
filebeat에 내장되어잇는 기본 템플릿을 이용하였으나, 새롭게 작성하여도 된다.


1) 기존 템플릿 삭제
curl -XDELETE '192.168.0.4 :9200/_template/template_1(템플릿 이름)?pretty'

2) shard 개수 추가
settings 부분에 number of shards 추가.
index.number_of_shards 로 해도 된다. 뒤에 컴마(,) 잊지 말기

"index_patterns": ["filebeat-*"],
  "settings": {
    "number_of_shards": 3
  }, 

3) 템플릿 재 업로드
curl -XPUT 192.168.0.4:9200/_template/filebeat(템플릿 이름)?pretty -d@filebeat.template.json

4) fileBeat.yml
template.overwrite : false

true 시에는 직접 지정 가능하다고 알고 있음


2-4. 실행
filebeat -e -c filebeat.yml



3. Kafka 설치

3-1. 다운로드
0.10의 scala 2.11버전을 설치햇다.

tar -xvf kafka_2.11-0.10.2.1.tgz.gz

3-2. 환경설정
1) Zookeeper : config/zookeeper.properties
- Kafka는 zookeeper를 따로 실행할 수 있다. 

dataDir=/home/centos/eunbi/apps/zookeeper/data          <<zookeeper dir

# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0

server.1=server01:15000:16000
server.2=server02:15000:16000
server.3=server03:15000:16000



2) KafkaServer : config/server.properties
1) Server Basics
############################# Server Basics #############################

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1                << 서버마다 다른 아이디를 줘야 함

2) Zookeeper
############################# Zookeeper #############################

# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=server01:2181,server02:2181,server03:2181


# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=6000


3-3. 실행
1) 실행하기 : bin/kafka-server-start.sh config/server.properties

2) 실행 확인 
[centos@server01 bin]$ jps
17904 NameNode
5729 QuorumPeerMain
18257 ResourceManager
19650 HRegionServer
20306 Kafka
20374 Jps
13959 Elasticsearch
18027 DataNode
18540 NodeManager
19502 HMaster

3) 실행 확인 - 2
- topic 생성 : ./kafka-topics.sh --create --zookeeper [ zookeeper 서버명 ] --replication-factor 1 --partitions 1 --topic [ Topic 명 ]
[centos@server01 bin]$ ./kafka-topics.sh --create --zookeeper server01:2181 --replication-factor 1 --partitions 1 --topic kafka-test

Created topic "kafka-test".

-topic list 확인
[centos@server01 bin]$ ./kafka-topics.sh --list --zookeeper server01
kafka-test

          -zookeeper에서 확인
[centos@server03 apps]$ ./zookeeper/bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 7] ls /brokers/topics
[kafka-test]


          4) 실행 확인 -3
                    - 메세지 작성
[centos@server01 bin]$ ./kafka-console-producer.sh --broker-list server01:9092 --topic kafka-test
지금시간은 오전 10시 41분 입니다.
this is Message

-메세지 확인
[centos@server02 bin]$ ./kafka-console-consumer.sh --bootstrap-server server01:9092 --topic kafka-test --from-beginning --zookeeper server01
지금시간은 1오전 10시 41분 입니다.
this is Message







* 추가 참조 사이트


반응형