1 环境:
CentOS 6.4 x64
JDK 1.8.0_45
2 Elasticsearch的安装
2.1 下载elasticsearch安装包:
https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.2.tar.gz
2.2 将下载完成的安装包上传到服务器的/usr/local文件夹下(上传地址根据个人习惯有所不同)
2.3 利用cd /usr/local命令进入local文件夹,利用tar -zvxf elasticsearch-1.5.2.tar.gz解压提取文件
2.4 输入./elasticsearch-1.5.2/bin/elasticsearch命令启动elasticsearch服务出现下图则说明安装成功
2.5 按ctrl+c停止服务,输入cd ./elasticsearch-1.5.2/config/ 命令进入elasticsearch的配置文件目录
2.6 输入vim ./elasticsearch.yml命令编辑elasticsearch的配置文件
2.6.1 找到Node节点
2.6.1.1 取消node.master: true和node.data: true的注释 如下图
2.6.2 找到Network And HTTP节点
2.6.2.1 将network.host节点修改成elasticsearch所在的服务器的ip地址 如下图
2.6.3 进入命令模式保存并退出配置文件
2.7 输入vim /etc/sysconfig/iptables 修改防火墙配置文件,添加9200端口的入站规则并重启防火墙
2.8 输入../bin/elasticsearch命令重新启动elasticsearch服务出现下图
或者在浏览器中输入http://<ip>:9200出现下图
则表示elasticsearch安装配置并且启动成功
3 Elasticsearch插件的安装
3.1 另开一个终端界面 输入命令cd /usr/local/elasticsearch-1.5.2/进入elasticsearch目录
3.2 elasticsearch-head elasticsearch web管理界面安装
3.2.1 输入./bin/plugin --install mobz/elasticsearch-head出现下图后表示插件安装成功(在线安装,如果本地安装则mobz/elasticsearch-head要替换成file:///<文件目录地址>)
3.4 MySQL JDBC驱动安装
3.4.1 输入curl -o mysql-connector-java-5.1.33.zip -L 'http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.33.zip/from/http://cdn.mysql.com/'命令下载mysql jdbc
3.4.2 输入cp ./mysql-connector-java-5.1.33/mysql-connector-java-5.1.33-bin.jar ./plugins/jdbc/ 命令将mysql jdbc移动到 plugins的jdbc目录下
3.4.3 输入chmod 644 ./plugins/jdbc/* 命令修改jdbc文件夹下的所有文件的访问权限
3.5 重新执行./bin/elasticsearch命令使jdbc插件生效
4 在mysql中创建数据库、表并添加测试数据
4.1 在mysql数据库中建立一个test数据库并建立person表 表结构如下
create table person
(id int ,
name varchar(20),
sex char(1),
createdate timestamp);
4.2 插入数据
insert into person(id,name,sex) values(1,'zhangsan','F');
insert into person(id,name,sex) values(2,'zhaoliu','F');
4.3 创建用户并给用户分配访问数据库的对应表的权限
4.4 修改防火墙配置,添加3306端口的入站规则
5 创建elasticsearch索引并设置与mysql数据更新同步
5.1 输入 curl -XPUT 'http://192.168.120.159:9200/test' 命令建立elasticsearch索引
5.2 建立elasticsearch中的索引与数据库表的映射
curl -XPUT 'http://192.168.120.159:9200/test/person/_mapping' -d '
{
"person": {
"properties": {
"id": {
"type": "long",
"store": "yes"
},
"name": {
"type": "string",
"store": "yes"
},
"sex": {
"type": "string",
"store": "yes"
}
}
}
}'
5.3 建立任务定时获取mysql中的数据更新到elasticsearch中
curl -XPUT 'http://192.168.120.159:9200/_river/my_jdbc_river/_meta' -d '{
"type": "jdbc",
"jdbc": {
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://<ip>/test",
"user": "<username>",
"password": "<password>",
"sql": "select id as _id,name,sex from person",
"index": "test",
"type": "person",
"bulk_size": 100,
"max_bulk_requests": 30,
"bulk_timeout": "10s",
"flush_interval": "5s",
"schedule": "0/5 * * * * ?"
}
}'
这样就建立了一个任务,定时每5秒从mysql中获取一次数据并将数据更新到elasticsearch中
注:示例写的比较简单每次是过去表中所有的数据更新到elasticsearch中,这里可以进行增量式获取即每次只获取新增的或者修改过的数据,只需要在sql后面加一个时间就可以了,具体的可以参照elasticsearch官方说明文档。
本文档参照
http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-plugins.html
https://github.com/jprante/elasticsearch-jdbc