몇년전부터 빅데이터와 함께 셋트로 종종 보이다가..

 

최근 갑자기 구인 시장의 핫이슈인 엘라스틱서치 서버를 추가하였습니다.

 

몇년전에 이름이 보일때부터 검색해보고 정보를 모으고는 있었는데..

 

최근에 면접보러간곳에서 엘라스틱서치를 메인으로 쓴다길래, 아~주~ 자세하게 질문하는것에 다 답변해주길래..(응?)

 

그 이야기를 듣고서 한번 이번주 내내 ConoHa 에서 테스트를 진행하였습니다.

 

그 결과가 상당히 만족스러워서..

 

서버를 한대 추가하였습니다.

 

개인적으로 테스트에 사용한 서비스가..

 

현재 사파.. 라기보다는 마교에 가깝겠구나..

 

마교의 테크닉으로 구성이 되어있는데..

( 구성보면 내가 왜 웹개발자인지 모를정도;; )

 

엘라스틱서치를 접목시켜볼까 생각중입니다.

( 그래도 웹이랑 어떻게든 연관있는 기술이니까 엘라스틱서치는 사파아닐까..??? 정파로 부르기에는 반대 할 사람이 많을듯.. )

 

무튼, 현재 여러가지 테스트를 종료하여서, 조만간 서비스들이 리뉴얼되는게 있을 수 있습니다.

( 주로 MySql Index 로 커버가 안되는 애들 + MySql Index 자체가 안되는 애들이 될듯합니다. 노래방 API 에도 접목을 생각해봤는데, 노래방 API는 index 가 빡세게 잘 잡혀있어서 아직까지 큰 문제가 되는 반응 속도는 아니라.. )

 

ps. ubuntu 18.04 에서 Elasticsearch7 을 설치하는 방법입니다.

엘라스틱서치가 메이저 버전이 올라갈때마다 변하는게 많은듯하여, 기존의 검색해서 나오는 내용대로는 동작 안하는 애들이 있는거 같아서, 간략하게 정리해둡니다.

 

1. 일단 서버의 재부팅과 업데이트를 진행합니다.

sudo reboot
sudo apt update && sudo apt dist-upgrade -y && sudo apt autoremove -y && sudo reboot

2. java 를 인스톨 합니다.

sudo apt install -y default-jdk

3. java 버전을 확인합니다.

java -version

4. 엘라스틱서치7를 설치합니다.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update && sudo apt dist-upgrade -y && sudo apt autoremove -y
sudo apt install -y elasticsearch

5. 엘라스틱서치의 설정을 변경합니다.

sudo vi /etc/elasticsearch/elasticsearch.yml
cluster.initial_master_nodes: {Your Server IP}
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["host1", "host2"]

cluster.initial_master_nodes 설정의 경우 localhost 에서 호출하기 위해서 꼭 필요한 설정입니다.

나머지는 외부 접속용이기 때문에, 알아서 설정을 하시면 됩니다.

나머지는 주석으로 가려져 있기에, 주석을 풀어주면 됩니다.

6. 엘라스틱서치 상태 확인 및 시작.

기본적으로 stop 상태여서, 시작을 해줘야합니다.

sudo service elasticsearch status
sudo service elasticsearch start

7. MySql 과의 연동을 위해, Logstash 를 설치합니다.

sudo apt install -y logstash

8. mysql-connector-java 를 다운로드 받습니다.

저는 MySql이 5 버전대기 때문에, 5버전대를 받았습니다.

wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar

9. 연동을 위한 설정을 작성합니다.

?serverTimezone=Asia/Seoul&useSSL=false&tinyInt1isBit=false 의 경우는 왠만하면 붇이는게 좋습니다.

그래야 에러가 발생하지 않습니다.

serverTimezone : 타임존이 설정되어야만 에러가 발생을 안합니다.

useSSL=false : SSL 접속도 꺼주셔야 MySql 작업시 에러가 발생 안합니다.

tinyInt1isBit=false : 연동 할 DB에서 tinyint 를 사용하고 있다면, 추가합니다. 값이 이상하게 들어가는것을 방지합니다.

vi {index name}.conf
input {
	jdbc {
		jdbc_driver_library => "/root/mysql-connector-java-5.1.47.jar"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_connection_string => "jdbc:mysql://{MySql IP OR Domain}:3306/{Database}?serverTimezone=Asia/Seoul&useSSL=false&tinyInt1isBit=false"
		jdbc_user => "{MySql User}"
		jdbc_password => "{MySql Password}"
		statement => "{연동 할 데이터를 가져오는 Query}"
		jdbc_paging_enabled => true
		jdbc_page_size => 500000
	}
}
filter {
	mutate {
		remove_field => ["@version", "@timestamp"]
	}
}
output {
	elasticsearch {
		hosts => ["localhost:9200"]
		index => "{Elasticsearch Index}"
	}
}

jdbc_paging_enabled : 페이징을 하겠다는 의미입니다. 많은 데이터를 가져와야한다면 true를 합니다.

jdbc_page_size : 페이징을할때 몇개 단위로 끊을것인지 설정합니다. 서버 상황에 맞게 설정해줍니다.

그리고 저는 한번 데이터를 넣고서 수정이랑은 안할거기에, @version 과 @timestamp 는 삭제하였습니다.

10. 이제 매핑데이터를 생성합니다.

vi mapping_{index name}.conf
{
	"settings": {
		"index.mapping.ignore_malformed": true
	},
	"mappings": {
		"properties": {
			"{field name}": {
				"type": "integer"
			}
		}
	}
}

{field name} : 이거는 자기자신의 DB Table 의 Field 명을 입력해주세요.

"type": 은 DB Table 에 맞춰서 수정합니다. ( 자세한건 검색! )

11. 서버 상태를 확인하고 매핑 데이터를 사용해서, index 를 생성합니다.

curl -X GET localhost:9200?pretty -H 'Content-Type: application/json'
curl -X PUT localhost:9200/{Your Index}?pretty -H 'Content-Type: application/json' --data-binary @/root/mapping_{Your Mapping Json File}.conf

12. MySql 의 데이터를 불러옵니다.

/usr/share/logstash/bin/logstash -f {Your Index Name Json File}.conf

13. 데이터 연동이 종료되면, 데이터를 확인합니다.

curl -X GET localhost:9200/{Your Index}/_count?pretty -H 'Content-Type: application/json'
curl -X GET localhost:9200/{Your Index}/_search?pretty -H 'Content-Type: application/json'

위의것은 총개수를 가져오고, 아래것은 그냥 평범하게 리스트를 리턴합니다.

( 입력한 데이터가 많다면, _search 의 경우 size 를 줘서 확인합니다. )

Posted by Pure Ani

RE:D Cherish! -Eternity Blood- CRYSTALiA

放課後シンデレラ2 HOOKSOFT

花鐘カナデ*グラム NanaWind

フタマタ恋愛 ASa Project

スタディ§ステディ2 ま~まれぇど

リンパにATATA! ~メス牡蠣ミルクどぴゅらっしゅ~ Hending

創作彼女の恋愛公式 Aino+Links

流星ワールドアクター Heliodor

Secret Agent~騎士学園の忍びなるもの~ ensemble

天冥のコンキスタ エウシュリー

HaremKingdom -ハーレムキングダム- SMEE

ラズベリーキューブ まどそふと

ノラと皇女と野良猫ハート2 -Nora, Princess, and Crying Cat.- HARUKAZE

『ノラと皇女と野良猫ハート2』応援中♪

ピュアソングガーデン PULLTOP

はにデビ! Honey&Devil eufonie

姫繰三六五 HIMEKURI365

姫繰三六五 公式ウェブサイト

はるるみなもに! クロシェット

死に逝く君、館に芽吹く憎悪 バグシステム

Sanguinea-サングイネア- すにぃる

麗華の館 しすたーそふと

カスタムメイドオンライン KISS