大家好,我是J.O.老弟,今天这篇文章来分享一下Elasticsearch的单机及集群安装,基于6.x的版本。
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
cd 到elasticsearch 的下载目录,执行
tar -zxf elasticsearch-6.6.2.tar.gz
cd elasticsearch-6.6.2
修改Elasticsearch.yml文件
network.host: 0.0.0.0 #设置外网访问,默认配置外网无法访问
vi /etc/sysctl.conf 添加以下内容
vm.max_map_count=262144
若不修改,可能在启动es时报如下错误:
max virtual memory areas vm.max_map_count[65530] is too low,increase to at least [262144]
修改完需要重启才能生效
查看刚修改的变量当前值是多少
sysctl -a|grep vm.max_map_count
若不想重启电脑的前提下修改变量,单次生效
sysctl -w vm.max_map_count=262144
vi ES安装目录/config/jvm.options
-Xms1g
-Xmx1g
注意xms和xmx大小要一致,若服务器内存不合适,可以调至512m或其他大小。
此项修改针对的是如下这种启动时报错:
Exception in thread “main” java.nio.file.AccessDeniedException: /data/app/elasticsearch6.6.2/config/jvm.options
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.nio.file.Files.newInputStream(Files.java:152)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:60)
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
若修改后启动ES仍报错,且确认修改无误,需退出登录账号重新登录后尝试。
此项修改针对的是如下几种启动时报错:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [1786] for user [lck] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
不要以root用户进行启动
创建用户
useradd jeffosmond
echo "要创建的账户的密码" | passwd jeffosmond --stdin
启动ES
# 前台启动
ES安装目录/bin/elasticsearch
# 后台启动
ES安装目录/bin/elasticsearch -d
https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-linux-x86_64.tar.gz
vi kibana-6.4.2-linux-x86_64/config/kibana.yml
server.port: 5600 ##服务端口
server.host: "0.0.0.0" ##服务器IP(0.0.0.0代表外网可访问)
elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址
-- 前台启动
./bin/kibana
-- 后台启动
nohup ./bin/kibana &
登录Kibana的首页(刚才配置的IP地址加端口号)例如:
http://localhost:5600
下载分词器插件并解压缩至ES的plugin目录下(记得先在plugin下创建子目录,不要直接解压到plugin下),解压后重启ES就可以直接使用了。测试安装好的分词器是否可用,可以在kibana的devtool中进行。
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.6.2
测试方法:在kibana的devtools中输入:
// 不使用分词器
POST _analyze
{
"analyzer": "simple",
"text": "我是一个小可爱,咿呀咿呀呦!"
}
// 使用ik分词器
POST _analyze
{
"analyzer": "ik_smart",
"text": "我是一个小可爱,咿呀咿呀呦!"
}
https://github.com/medcl/elasticsearch-analysis-pinyin/releases/tag/v6.6.2
测试方法:在kibana的devtool中输入:
GET /medcl/_analyze
{
"text" : ["刘德华"],
"analyzer": "pinyin_analyzer"
}
整体思路就是将单机的elasticsearch 复制三份,并按如下内容配置每一个节点的elasticsearch.yml 配置文件
# 集群名称(需保证集群内所有节点配置的集群名称相同)
cluster.name: kkb-es
# 节点名称(每个节点的名称都不一样)
node.name: node0
# 是否为master节点
node.master: true
# 为es设置ip绑定,默认127.0.0.1即只能本地访问
network.host: 0.0.0.0
# http监听端口(默认9200,若被占用,则在9200~9300范围递增)
http.port: 9200
# TCP监听端口(默认9300,若被占用,则在9300~9400范围递增)
transport.tcp.port: 9300
# 多个集群服务的访问地址(节点间访问)
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
# 通过配置这个参数来防止集群脑裂现象:(集群总节点数量/2)+1
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
# 可以指定es的数据存储目录,默认存储在es_home/data目录下
path.data: /data/appData/es-6.3.1/data
# 可以指定es的日志存储目录,默认存储在es_home/logs目录下
path.logs: /data/appLog/es-6.3.1/logs
http://集群地址:集群配置端口/_cat/health?v
// 验证群集是否启动,带“*”证明是master节点,否则是slave节点
http://ES的服务器ip:9200/_cat/nodes?pretty
[2018-10-25T14:50:657][INFO]…[node0] failed to send join request to master (…省略) not master for join request];],tried [3] times
解决方案: 将节点data文件夹下的文件清空,默认在ES所在目录下的data中