每个版本的es配置有些区别,需要看文档说明。我这里是用7.10.1搭建的,应该适用于7.x不包括7.10以上版本,例如7.11,7.12
一、节点说明
节点一:192.168.50.103
节点二:192.168.50.104
节点三:192.168.50.105
二、更改内核参数
修改每一台的vm.max_map_count内核参数为262144
不更改这里,无法正常启动docker es
# 查看max_map_count当前值
sysctl -a|grep vm.max_map_count
# 修改max_map_count
sysctl -w vm.max_map_count=262144
# 更新修改
sysctl -p
三、设置yml配置文件
## 192.168.50.103 es.yml
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.50.103
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.50.103","192.168.50.104","192.168.50.105"]
cluster.initial_master_nodes: ["es-node1", "es-node2","es-node3"]
## 192.168.50.104 es.yml
cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.50.104
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.50.103","192.168.50.104","192.168.50.105"]
cluster.initial_master_nodes: ["es-node1", "es-node2","es-node3"]
## 192.168.50.105 es.yml
cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.50.105
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.50.103","192.168.50.104","192.168.50.105"]
cluster.initial_master_nodes: ["es-node1", "es-node2","es-node3"]
三个节点配置文件只有这两个选项不一样 node.name,network.publish_host,其他都一样。
cluster.name 集群名称三个节点必须相同
四、运行docker
三台机器分别运行docker命令
docker run -d --name es \
-p 9200:9200 -p 9300:9300 \
-v /root/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
elasticsearch:7.10.1
还可以添加其他参数,限制内存大小和挂载数据卷:
docker run -d --name es1 \
-p 9200:9200 -p 9300:9300 \
-v /root/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /www/data:/usr/share/elasticsearch/data \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
elasticsearch:7.10.1
注:单节点运行命令 docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.10.1
五、查看运行效果
访问url:http://192.168.50.105:9200/_cluster/health?pretty
{
"cluster_name": "elasticsearch-cluster",
"status": "green",
"timed_out": false,
"number_of_nodes": 3, //三个节点正在运行
"number_of_data_nodes": 3,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
Elasticsearch Head 链接效果:
五、安装elasticsearch-analysis-ik中文分词插件
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意:不是下载源码,是下载打包好的jar包文件,要下载对应的版本,我这里是v7.10.1 https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.10.1
下载完成后传到服务器上,执行以下命令:
# 拷贝主机文件到容器
docker cp /root/elasticsearch-analysis-ik-7.10.1.zip 容器id:/usr/share/elasticsearch/plugins/
# 进入容器
docker exec -it 容器id /bin/bash
# 进入插件目录
cd plugins/
# 解压文件
unzip elasticsearch-analysis-ik-7.10.1.zip -d ik-analyzer
# 删除压缩文件,不删除容易会启动不起来
rm elasticsearch-analysis-ik-7.10.1.zip
# 退出容器
exit
# 重启容器
docker restart 容器id
每个节点机器都需要安装ik分词器。
六、测试分词效果
{
"analyzer": "ik_max_word",
"text": "这里是好记性不如烂笔头感叹号的博客园"
}
七、IK配置热更新词典
只需要在web服务器上放置一个xx.txt文件就可以,每次这个文件更新以后,请求头head会自动更新ETag,Last-Modified这两个值,这两个值有一个更新后,ik会自动抓取,txt文件一行一个关键词
更改ik插件config目录中的IKAnalyzer.cfg.xml文件
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://xxx.com/a.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<entry key="remote_ext_stopwords">http://xxx.com/b.txt</entry>
更改容器种的 IKAnalyzer.cfg.xml文件
# 拷贝容器文件到主机
docker cp 容器ID:/usr/share/elasticsearch/plugins/ik-analyzer/config/IKAnalyzer.cfg.xml /root/IKAnalyzer.cfg.xml
# 拷贝主机文件到容器
docker cp /root/IKAnalyzer.cfg.xml 容器ID:/usr/share/elasticsearch/plugins/ik-analyzer/config/IKAnalyzer.cfg.xml
# 退出容器交互模式
exit
# 重启容器
docker restart 容器ID
八、安装Kibana
拉去docker镜像
docker pull kibana:7.10.1
运行容器
docker run --name ki -d --restart=always -p 5601:5601 kibana:7.10.1
更改容器中的配置参数
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.50.105:9200","http://192.168.50.103:9200","http://192.168.50.104:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
访问kibana:http://127.0.0.1:5601
九、给Kibana设置访问密码
使用nginx的反向代理,设置访问密码