elasticsearch2.3.2服務搭建、管理及實時同步mysql數據

elasticsearch是基於Luence的一個全文檢索框架,高效,快速,準確。


本文參考一下幾篇博客:

http://blog.csdn.net/cnweike/article/details/33736429

http://www.cnblogs.com/zhongshengzhen/p/elasticsearch_logstash.html

http://blog.csdn.net/yeyuma/article/details/50240595#quote

等。。。


安裝環境:
系統環境:ubuntu 14.0 64位。要求可上外網(需要在線安裝一些小插件)。

elasticsearch版本:2.3.2。下載地址:https://www.elastic.co/downloads/past-releases/elasticsearch-2-3-2,zip版和tar版均可,linux都能解壓。

jdk版本:1.8.0_131

logstash2.3.2(安裝logstash-input-jdbc插件用。此插件用於定時同步mysql數據到elasticsearch)

下載地址:https://www.elastic.co/downloads/past-releases/logstash-2-3-2

mysql數據庫驅動包:mysql-connector-java-5.1.29.jar


elasticsearch安裝步驟:

1.安裝jdk1.8
步驟忽略。。。。
輸入:java -version


java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)


安裝成功。
2.安裝elasticsearch:
1)到官網下載安裝包,本文選擇2.3.2版。
https://www.elastic.co/downloads/past-releases
因爲我們是在linux系統上安裝,所以下載tar版的即可。
我是在windows上下載好後,傳到linux上的。
2)linux普通用戶登錄即可。我的是hadoop。
將elasticsearch安裝包放到/home/hadoop/software 路徑下
解壓:tar -zxvf elasticsearch-2.3.2.gar.gz
解壓後進入他的bin目錄下,執行“./elasticsearch”命令即可啓動。

由於沒有修改配置文件,此時啓動的服務僅可以本機訪問。即:
http://localhost:9200

如果想其他電腦遠程訪問,則要修改配置文件:
elasticsearch-2.3.2/config/elasticsearch.yml
將network.host : 192.168.0.1 改爲你的linux系統的ip地址,並將行首的 “#”去掉。保存退出。
然後重啓elasticsearch服務。重啓時可能會彈出兩個錯誤,別擔心,下面會寫如何解決這兩個問題。如果沒有,恭喜,你很幸運。
(1) max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [ 262144]
修改配置文件:
sudo vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
      (2) max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
修改配置文件:
sudo vi /etc/security/limits.conf
加入:
hadoop soft nofile 65536
hadoop hard nofile 65536
當你訪問http://localhost:9200的時候,瀏覽器會輸出一些信息:證明你的服務啓動成功。
{
 "name" : "Trip Monroe",
 "cluster_name" : "elasticsearch",
 "version" : {
   "number" : "2.3.2",
   "build_hash" : "b9e4a6acad4008027e4038f6abed7f7dba346f94",
   "build_timestamp" : "2016-04-21T16:03:47Z",
   "build_snapshot" : false,
   "lucene_version" : "5.5.0"
 },
 "tagline" : "You Know, for Search"
}
3)elasticsearch有一個管理插件,安裝後可以在瀏覽器管理你的服務。
執行命令即可安裝插件:
在elasticsearch-2.3.2/bin目錄下執行:
./plugin install mobz/elasticsearch-head
安裝成功後訪問
http://192.168.42.190:9200/_plugin/head/
即可看到管理界面。
4)服務啓動後會打印一些日誌,如果你仔細觀察會發現有兩個端口號,9200和9300.
9200是http協議的訪問端口,而9300是程序訪問的入口。
5)如何同步mysql數據到elasticsearch
網上有很多資料,大多數都是安裝一些插件,本文也是如此。
現在評價比較好的插件是logstash-input-jdbc,那麼本文即將講解如何安裝次插件。
(1)到官網下載logstash插件包,放到/home/hadoop/opt/下,zip版的tar版的都可以,linux都可以解壓的。
我下的是zip版的。
解壓 unzip logstash-all-plugins-2.3.2.zip
cd logstash-2.3.2/bin
(2)此時還不能直接用plugin安裝,還需要配置一些東西
首先給你的linux系統安裝gem命令(此處需要連接外網)
sudo apt-get update
sudo apt-get install gem
sudo apt-get install Ruby(這個是否必須安裝沒測,反正我裝了)
然後替換一下鏡像
gem sources --add https://ruby.taobao.org/  --remove https://rubygems.org/

sudo vi Gemfile # 
修改 source 的值 爲: "https://ruby.taobao.org"
3, sudo vi Gemfile.jruby-1.9.lock # 找到 remote 修改它的值爲: https://ruby.taobao.org
再然後執行
sudo bin/plugin install logstash-input-jdbc
就成功了。

6.安裝 logstash-input-jdbc插件同步mysql數據
1, 如果沒有安裝 gem 的話 安裝gem 
sudo apt-get update
sudo yum install gem
替換淘寶


1,gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
2,gem sources -l


*** CURRENT SOURCES ***


https://ruby.taobao.org
# 請確保只有 ruby.taobao.org
如果 還是顯示 https://rubygems.org/ 進入 home的 .gemrc 文件
sudo vim ~/.gemrc 
手動刪除 https://rubygems.org/
2, 修改Gemfile的數據源地址。步驟:


1, whereis logstash # 查看logstash安裝的位置, 我的在 /opt/logstash/ 目錄
2, sudo vi Gemfile # 
修改 source 的值 爲: "https://ruby.taobao.org"
3, sudo vi Gemfile.jruby-1.9.lock # 找到 remote 修改它的值爲: https://ruby.taobao.org
或者直接替換源這樣你不用改你的 Gemfile 的 source。


sudo gem install bundler




$ bundle config mirror.https://rubygems.org https://ruby.taobao.org
安裝logstash-input-jdbc 


我一共試了三種方法,一開始都沒有成功,原因如上,鏡像的問題。一旦鏡像配置成淘寶的了,理論上隨便選擇一種安裝都可以成功,我用的是第三種。


第一種:


cd /opt/logstash/


sudo bin/plugin install logstash-input-jdbc


如果成功就成功了。
./logstash -f jdbc.conf

jdbc.conf(單表同步配置方法)
input {
   stdin {
   }
   jdbc {
     # mysql jdbc connection string to our backup databse
     jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
     # the user we wish to excute our statement as
     jdbc_user => "root"
     jdbc_password => "root"
     # the path to our downloaded jdbc driver
     jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
     # the name of the driver class for mysql
     jdbc_driver_class => "com.mysql.jdbc.Driver"
     jdbc_paging_enabled => "true"
     jdbc_page_size => "50000"
     statement_filepath => "/home/hadoop/opt/logstash-2.3.2/bin/jdbc.sql"
     schedule => "* * * * *"
     type => "gjhz"
   }


}


filter {
   json {
       source => "message"
       remove_field => ["message"]
   }
}


output {
   elasticsearch {
       hosts => "192.168.42.190:9200"
       index => "zkr"
document_id => "%{a_id}"
   }


   stdout {
       codec => json_lines
   }
}
jdbc.conf(多表同步配置方法)
input {
   stdin {
   }
   jdbc {
     # mysql jdbc connection string to our backup databse
     jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
     # the user we wish to excute our statement as
     jdbc_user => "root"
     jdbc_password => "root"
     # the path to our downloaded jdbc driver
     jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
     # the name of the driver class for mysql
     jdbc_driver_class => "com.mysql.jdbc.Driver"
     jdbc_paging_enabled => "true"
     jdbc_page_size => "50000"
     statement_filepath => "jdbc.sql"
     schedule => "* * * * *"
     type => "gjhz"
   }
jdbc {
     # mysql jdbc connection string to our backup databse
     jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
     # the user we wish to excute our statement as
     jdbc_user => "root"
     jdbc_password => "root"
     # the path to our downloaded jdbc driver
     jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
     # the name of the driver class for mysql
     jdbc_driver_class => "com.mysql.jdbc.Driver"
     jdbc_paging_enabled => "true"
     jdbc_page_size => "50000"
     statement_filepath => "jdbc2.sql"
     schedule => "* * * * *"
     type => "rjfw"
   }
}


filter {
   json {
       source => "message"
       remove_field => ["message"]
   }
}


output {
if [type] == "gjhz"{
elasticsearch {
       hosts => "192.168.42.190:9200"
       index => "zkr"

document_id => "%{a_id}"
   }
}else{
elasticsearch {
       hosts => "192.168.42.190:9200"
       index => "zkr"
document_id => "%{d_id}"
   }
}
   


   stdout {
       codec => json_lines
   }
}
jdbc.sql
select a_id,a_name name , a_age age from aa


jdbc1.sql
select d_id,d_name name ,d_age age from dd




-----------------------------------------------------------------------------
elasticsearch命令行操作
<1> ./elasticsearch
啓動服務
<2> ./elasticsearch --cluster.name my_cluster_name --node.name my_node_name
啓動服務,並指定集羣名稱和節點名稱。
<3> curl 'localhost:9200/_cat/health?v'
查看集羣健康狀況
<4> curl 'localhost:9200/_cat/nodes?v'
查看集羣節點列表
<5> curl 'localhost:9200/_cat/indices?v'
列出所有索引列表
<6> curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary  @accounts.json
批量導入數據
注:1 需要在accounts.json所在的目錄運行curl命令。
2 localhost:9200是ES得訪問地址和端口
3 bank是索引的名稱
4 account是類型的名稱
5 索引和類型的名稱在文件中如果有定義,可以省略;如果沒有則必須要指定
6 _bulk是rest得命令,可以批量執行多個操作(操作是在json文件中定義的,原理可以參考之前的翻譯)
7 pretty是將返回的信息以可讀的JSON形式返回。
8 插入數據格式:
{"index":{"_index":"logstash-2015.05.20","_type":"log","_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender ":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
"_index" 、 "_type" 、"_id" ,三個字段可選,用於指定索引、類型、id。
"_index" 、 "_type"不指定的話默認使用命令中的"bank"、"account".
"_id"不指定的話自動生成。




----------------------------------------------------------------------------------
java API


<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.2</version>
</dependency>
對jackson的依賴:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>  
            <groupId>com.fasterxml.jackson.module</groupId>  
            <artifactId>jackson-module-jaxb-annotations</artifactId>  
            <version>2.6.3</version>  
        </dependency> 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章