您的位置:首页 > 数据库 > MySQL

elasticsearch2.3.2服务搭建、管理及实时同步mysql数据

2017-06-26 16:20 681 查看
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":"amberduke@pyrami.com","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> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: