elasticsearch安装,单机部署,远程访问以及使用Java连接踩过的坑
elasticsearch安装很简单,但是选择版本一定要确定该版本必须又对应的spring-boot-starter-data-elasticsearch支持,查看是否对应的办法可以上网查对应表,也可以在maven中查看依赖dependencies中
一定要和选用的elasticsearch版本相同,否则会出现NoNodeAvailableException[None of the configured nodes are available的错误,导致无法往节点中写入数据。
安装直接下载安装包解压即可:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-x.x.x.zip
unzip elasticsearch-x.x.x.zip
cd elasticsearch-x.x.x/
然后就要进行配置了,因为我没有做集群所以直接单节点配置。
vim /config/elasticsearch.yml
我的yml配置添加了以下语句:
cluster.name: my-application //集群的名称
node.name: "node1" //节点名称
node.data: true //允许该节点存储数据(默认开启)
network.host: 0.0.0.0 //绑定的ip地址,表示所有ip都可以访问es服务
transport.tcp.port: 9300 //如果使用的是阿里云记得打开端口权限,设置节点间交互的tcp端口,默认是9300
transport.tcp.compress: true //传输过程中数据是否压缩
http.port: 9200 //设置对外服务的http端口,默认为9200
http.cors.enabled: true // 是否允许跨域请求。默认为false
http.cors.allow-origin: "*" //定义允许哪些源请求。
discovery.type: single-node //使用单节点部署
每一条语句的意思,我用注释写在上面了。
然后需要创建一个非root权限的账号,需要在root用户下创建
# 以root用户来创建新的用户 , groupadd 添加一个用户组
[root@localhost home]# groupadd elk
# 添加一个用户,-g是在用户组下 -p是密码
[root@localhost home]# useradd elk -g elk -p elk
#赋予用户对文件夹的权限
chown -R elk:elk elasticsearch-x.x.x/
#切换到新用户
su elk
因为elasticsearch的服务不能用root用户启动,所以要切换到非root用户进行启动。
#切换到elk用户后,进入bin文件夹
cd /elasticsearch-x.x.x/bin
#后台启动elasticsearch服务
./elasticsearch -d
然后进行测试服务是否启动成功。可以使用浏览器去访问服务器的9200端口,也可以在服务器终端上进行
curl localhost:9200
得到响应为:
{
"name" : "eblog",
"cluster_name" : "eblog",
"cluster_uuid" : "38abG1lfSoWKulj45277dA",
"version" : {
"number" : "6.4.3",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "fe40335",
"build_date" : "2018-10-30T23:17:19.084789Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
则说明服务启动成功。再对java项目中application.yml文件进行连接配置。
spring:
data:
elasticsearch:
cluster-name: my-application
cluster-nodes: xxx.xxx.xxx.xxx:9300
repositories:
enabled: true
这里是用tcp连接去对服务器的ES服务插入数据,因此走9300端口,注意cluster-name的名字必须和ES服务中yml里cluster.name定义的名字相同,否则会报错说找不到节点。
至此连接上远程的ES服务,可以用POSTMAN进行测试,也可以直接使用java项目写入数据。