docker安装elasticSearch单结点和集群

官网了解详情https://www.elastic.co/cn/elasticsearch/
一、准备工作
1.下载镜像docker pull elasticsearch:7.8.1
单节点运行容器docker run --name elasticsearch01 -e "discovery.type=single-node" -d elasticsearch:7.8.1
2.进入容器docker exec -it elasticsearch01 bash
进入容器内部目录cd /usr/share/elasticsearch
输入ls可看到config data logs plugins等目录,在config目录还可看到elasticsearch.yml配置文件
退回容器回到宿主机exit
3.在宿主建好相应的目录mkdir -p /root/elasticsearch/{config,data,logs,plugins}
其中plugins是es的插件目录,例如存放ik,其中data目录是存放数据的需要设置可读写权限
4.复制容器内配置文件到宿主机
docker cp elasticsearch01:/usr/share/elasticsearch/config/elasticsearch.yml /root/elasticsearch/config
5.停止容器docker stop elasticsearch01然后删除容器docker rm elasticsearch01
6.放开宿主机的9200和9300端口
firewall-cmd --zone=public --add-port=9200/tcp --add-port=9300/tcp --permanent
重新载入firewall-cmd --reload或者通过systemctl restart firewall也行
7.记得给logs和data目录设置权限,不然正式启动时失败,通过docker logs -f elasticsearch01可看到报错Error opening log file ‘logs/gc.log’: Permission denied
chmod 777 /root/elasticsearch/data
chmod 777 /root/elasticsearch/logs

二、启动和访问容器
正式启动容器

docker run --name elasticsearch01 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /root/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/elasticsearch/data:/usr/share/elasticsearch/data \
-v /root/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.8.1

9200端口用于外部通过http访问ES节点
9300端口用于ES节点之间的tcp通讯
ES_JAVA_OPTS="-Xms512m -Xmx1024m"表示测试环境下设置ES的初始内存和最大内存,否则内存不足就启动不了ES
discovery.type=single-node表示单节点

访问elasticsearch容器
在我的win10浏览器输入192.168.3.160:9200就可以看到elasticsearch返回的json信息了

三、安装分词器插件ik
从地址https://github.com/medcl/elasticsearch-analysis-ik中找到elasticsearch-analysis-ik-7.8.1.zip
下载到我的root下的downloads目录里
wget -P /root/downloads https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.1/elasticsearch-analysis-ik-7.8.1.zip
安装zip程序yum install -y unzip zip
解压到/root/elasticsearch/plugins/ik中
unzip /root/downloads/elasticsearch-analysis-ik-7.8.1.zip -d /root/elasticsearch/plugins/ik
重启elasticsearch容器docker restart elasticsearch01
删除下载的压缩包rm -rf /root/downloads/elasticsearch-analysis-ik-7.8.1.zip

四、安装可视化Web工具Kibana
先查看文档https://www.elastic.co/guide/cn/kibana/current/index.html
下载镜像docker pull kibana:7.8.1
运行容器

docker run --name kibana01 \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://192.168.3.160:9200  \
-d kibana:7.8.1

开放端口firewall-cmd --zone=public --add-port=5601/tcp --permanent
然后在我的win10浏览器输入192.168.3.160:5601就可以看到kibana主界面了,
然后进入打开Management菜单下的Dev Tools子菜单
输入以下代码

#新建索引并配置好映射和ik分词器
PUT product
{
    
    
  "mappings": {
    
    
    "properties": {
    
    
      "name": {
    
    
        "type": "text",
        "analyzer": "ik_smart"
      },
      "category": {
    
    
        "type": "keyword"
      }
    }
  }
}
#添加2条数据
PUT product/_doc/1
{
    
    
  "name": "i7笔记本电脑8g内存",
  "price": 6999,
  "category": "笔记本电脑"
}
PUT product/_doc/2
{
    
    
  "name": "i3笔记本电脑4g内存",
  "price": 4500,
  "category": "笔记本电脑"
}

#查看分词信息
GET _analyze
{
    
    
  "analyzer": "ik_smart",
  "text": "i7笔记本电脑8g内存"
}
#term词条完全匹配查询
GET product/_search
{
    
    
  "query": {
    
    
    "term": {
    
    
      "category": {
    
    
        "value": "笔记本电脑"
      }
    }
  }
}
#match分词后查询
GET product/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "name": "i7"
    }
  }
}

分别运行测试即可

五、用docker搭建ElasticSearch集群
我这里用Cenos7.6,三台不同虚拟机的来搭建,3台内存都大于3.5G
192.168.3.113
192.168.3.149
192.168.3.160
按上面一样,在3台宿主机:
1.都下载好镜像docker pull elasticsearch:7.8.1
2.建好相应的目录mkdir -p /root/elasticsearch/{config,data,logs,plugins}
3.开放宿主机端口firewall-cmd --zone=public --add-port=9200/tcp --add-port=9300/tcp --permanent
4.重启防火墙firewall-cmd --reload
5.给logs和data目录设置权限chmod 777 /root/elasticsearch/data chmod 777 /root/elasticsearch/logs
6.都安装分词器插件ik
7.创建elasticsearch.yml配置文件并自动添加配置代码
这里我选160为es-node1,先停止之前的docker stop elasticsearch01,然后删除docker rm elasticsearch01
并删掉之前的elasticsearch.yml文件,请先删除下面代码里的所有注释再复制粘贴执行,特别注意冒号后有一个空格

cat> /root/elasticsearch/config/elasticsearch.yml<<EOF
cluster.name: es-cluster #集群名(集群名必须一致)
node.name: es-node1 #节点名
network.publish_host: 192.168.3.160 #当前节点主机IP
network.host: 0.0.0.0 #可以让外网访问
http.cors.enabled: true        #是否开启跨域
http.cors.allow-origin: "*"    #表示支持所有域名
node.master: true #表示有资格成为主节点
node.data: true
discovery.seed_hosts: ["192.168.3.113:9300","192.168.3.149:9300","192.168.3.160:9300"] #有成为主节点资格的节点列表
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]#初始化一个新集群时根据此配置来选举master
EOF

8.在149上也创建elasticsearch.yml配置文件并自动添加配置代码,记得改es-node2和192.168.3.149
9.在113上也创建elasticsearch.yml配置文件并自动添加配置代码,记得改es-node3和192.168.3.113
10.修改宿主机的/etc/sysctl.conf文件,最后一行添加vm.max_map_count=262144,然后执行/sbin/sysctl -p立即生效
不然docker默认分配的虚拟内存不足,会报max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
11.将-e ES_JAVA_OPTS="-Xms512m -Xmx512m"这里都设成一样的大小,否则可能会报
initial heap size [536870912] not equal to maximum heap size [1073741824]类似的错
12.都正式启动容器,记得-e "discovery.type=single-node"这句不要了
13.在我的win10浏览器输入http://192.168.3.160:9200/_cluster/health?pretty或149或113IP的地址都可返回JSON消息,如下图
在这里插入图片描述
14.输入docker stop kibana01停止前面安装的kibana之后再docker rm kibana01删除,然后用下面命令启动

docker run --name kibana01 \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS='["http://192.168.3.113:9200","http://192.168.3.149:9200","http://192.168.3.160:9200"]' \
-d kibana:7.8.1

然后在浏览器打开http://192.168.3.160:5601中的菜单Management中的Stack Monitoring
在Clusters里启用Tun on Monitoring,然后就可看到相关集群信息了,如下图
在这里插入图片描述
注意所有版本要保持一致不管是elasticsearch还是ik分词器还是kibana

猜你喜欢

转载自blog.csdn.net/junshangshui/article/details/114273359