Elasticsearch是一个分布式搜索引擎服务器,搜索引擎有自己专门的搜索引擎服务器,而不是依靠数据库来做,我们搜索内容时,如果使用数据库来做,则需要模糊查询数据库中所有的数据,一条一条的去顺序比对,这种搜索效率是极低的;
我们这里介绍Elasticsearch搜索引擎服务器,使用时需要将数据库中的数据同步到Elasticsearch服务器中,通过搜索引擎服务器去做搜索查询,因为其只支持搜索查询,专职于搜索服务的支持,其效率很高;
并且得益于其分布式结构,可以将数据分割到多个服务器中,搜索内容时,多个服务器一起检索自己服务器存放的内容,最后将结果进行汇总,将大大减少搜索时间;
后面我们要使用多个端口,为了避免繁琐的开放端口操作,我们关掉防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 禁用防火墙
systemctl disable firewalld.service
我们使用 Docker 来运行 Elasticsearch,首先安装 Docker,可以参考第五篇第二节
相关内容,我们这里直接使用此前准备好的docker-base
虚拟机,克隆并重命名为es
即可;
因为我们一共要启动3个镜像,所以需要将内存设置大一点,最小设置为2G
,通过右键点击es虚拟机--设置--修改内存大小
进行配置:
我们还需要设置ip:
./ip-static
ip: 192.168.64.181
ifconfig
我们可以在线下载Elastic Search 镜像文件:
docker pull elasticsearch:7.9.3
当然也可以直接使用本地准备好的镜像文件,通过mobaxterm
连接虚拟机后,将elasticsearch文件夹中:pditems文件夹
、elasticsearch-analysis-ik-7.9.3.zip
、es-img.gz
上传到容器根目录中,然后使用docker load -i es-img.gz
命令导入镜像;
虚拟机必须修改系统参数 max_map_count
,否则 Elasticsearch
无法启动:
在mobaxterm连接中,通过命令在 /etc/sysctl.conf
文件中添加 vm.max_map_count=262144
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
# 立即生效
sysctl -p
需要注意不能重复执行上面的命令,上面命令中的>>
是指追加,多次执行会导致添加多个此项配置,执行后查看我们设置的参数是否成功:
cat /etc/sysctl.conf
完成后,使用shutdown -r now
命令重新启动虚拟机:
重启时,服务器会暂时断开连接,需要等待重启完成后重新连接;
在一台服务器上,使用Docker部署三个ES容器组成的集群
我们首先创建虚拟网络,然后通过虚拟网络连接3个节点,并且在宿主机上创建/var/lib/es/node1/plugins
目录,安装相关插件,创建/var/lib/es/node1/data
存放相关文件;
# 创建虚拟网络
docker network create es-net
# node1 的挂载目录
mkdir -p -m 777 /var/lib/es/node1/plugins
mkdir -p -m 777 /var/lib/es/node1/data
# node2 的挂载目录
mkdir -p -m 777 /var/lib/es/node2/plugins
mkdir -p -m 777 /var/lib/es/node2/data
# node3 的挂载目录
mkdir -p -m 777 /var/lib/es/node3/plugins
mkdir -p -m 777 /var/lib/es/node3/data
Elasticsearch 集群启动是比较慢的,我们创建3个连接窗口,分别启动三个服务器,让其同时运行:
docker run -d \
--name=node1 \
--restart=always \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-v /var/lib/es/node1/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node1/data:/usr/share/elasticsearch/data \
-e node.name=node1 \
-e node.master=true \
-e network.host=node1 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
docker run -d \
--name=node2 \
--restart=always \
--net es-net \
-p 9201:9200 \
-p 9301:9300 \
-v /var/lib/es/node2/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node2/data:/usr/share/elasticsearch/data \
-e node.name=node2 \
-e node.master=true \
-e network.host=node2 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
docker run -d \
--name=node3 \
--restart=always \
--net es-net \
-p 9202:9200 \
-p 9302:9300 \
-v /var/lib/es/node3/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node3/data:/usr/share/elasticsearch/data \
-e node.name=node3 \
-e node.master=true \
-e network.host=node3 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
我们这里需要说明的是,这里的主节点指的是承担接收、分发客户端指定的工作节点,ES集群不存在主从架构,所以没有从节点的说法;
-d
:后台运行--name=node1
:节点在集群中的唯一名称为node1 --restart=always
:随系统重启 --net es-net
:连接到虚拟网络es-net
(在前边的步骤中我们创建了虚拟网络,并取名为es-net
) -p
:端口映射,这里映射了俩个端口,容器启动后有俩个端口,分别为9200和9300;9200负责和客户端通信,执行客户端增删改查,是一个http的web应用端口;9300是多台服务器集群之间互相连接,内部通信使用的;-v
:挂载,分别挂载了插件安装目录和文件存放目录,参考手册了解其具体路径;-e
:代码环境变量,ES的运行需要创建集群,集群之间需要互相连接,通过-e
配置集群的环境变量
-e node.name
:节点在集群中的唯一名称-e node.master
:可以设置true或者false,表明其是否可以被选举为主节点,其主节点除了搜索任务,还要承担接收、分发客户端指令的任务; -e network.host
:当前节点的地址(使用虚拟网络通信时,可以使用容器名来互相访问)discovery.seed_hosts
:集群中其他节点的地址列表cluster.initial_master_nodes·
:候选的主节点地址列表,虽然我们这里配置了node1,但是其他节点也设置了可被选举为主节点,所以主节点也可能是其他节点;cluster.name
:集群名ES_JAVA_OPTS
:java虚拟机参数详细变量说明可以参考官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html
启动之后使用docker ps
命令查看启动结果,3个服务器都存在:
浏览器访问:http://192.168.64.181:9200
浏览器访问:http://192.168.64.181:9200/_cat/nodes
elasticsearch-head 项目提供了一个直观的界面,可以很方便地查看集群、分片、数据等等。elasticsearch-head最简单的安装方式是作为 chrome 浏览器插件进行安装。
在 elasticsearch-head 项目仓库中下载 chrome 浏览器插件:https://github.com/mobz/elasticsearch-head/raw/master/crx/es-head.crx,可以直接选用我们本地提供的文件es-head.crx.zip
;
如果是下载的文件,需要将文件后缀改为 zip
将压缩文件解压缩
在 chrome 浏览器中选择“更多工具”–“扩展程序”
在“扩展程序”中确认开启了“开发者模式”
点击“加载已解压的扩展程序”
选择前面解压的插件目录
连接 http://192.168.64.181:9200/