给自己博客添加 Elasticsearch 实现全文搜索

经过调研,决定使用 Docker 来快速部署 Elasticsearch。

1.安装 Docker 和 Docker-Compose

笔者服务器是 CentOS 7 x64,参考了Get Docker CE for CentOSInstall Docker Compose安装。

安装 Docker

# Install Docker CE (using the repository)
## SET UP THE REPOSITORY
### 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2  
### 设置 stable repository
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  
### 安装 docker-ce
yum install docker-ce  
### 设置开机启动,并启动 Docker
systemctl enable docker  
systemctl start docker  
# 安装后使用以下命令测试(出现以下提示则安装成功)
## This message shows that your installation appears to be working correctly.
docker run hello-world  

安装 Docker Compose

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。具体使用可以参考Docker:Docker Compose 详解 - 简书

# 下载最新版本安装脚本
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  
# 添加可执行权限
chmod +x /usr/local/bin/docker-compose  
# 如果提示 docker-compose 命令不可用,则将其添加到PATH(笔者机器不需要)
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose  
# 测试
docker-compose --version  

2.Docker 安装 Elasticsearch

可参考官方文档Install Elasticsearch with Docker

2.1 安装

# 拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.1  

2.2 运行-开发模式 (快速)

2.2.1 先修改内存配置

直接运行报错了:(内存不够,docker默认分配的jvm内存太大了)

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.  
OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=1  
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000ca660000, 899284992, 0) failed; error='Not enough space' (errno=12)  
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 899284992 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid1.log

查找 jvm.options 文件位置

locate "jvm.options"  
#/var/lib/docker/overlay2/573b40254a1429fcaeda561a8ff5f33eaace854395de9345226111fbb3ef8788/diff/usr/share/elasticsearch/config/jvm.options

根据各自服务器硬件配置,使用 vi 修改 jvm.options 中内存配置。

然后启动 Docker Elasticsearch:

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name "es" docker.elastic.co/elasticsearch/elasticsearch:6.6.1  

2.2.2 修改配置,解决跨域访问问题

# 先进入容器
docker exec -it es /bin/bash  
# 进入后
ls config/  
cd config/  
# 编辑 elasticsearch.yml
vim elasticsearch.yml 

# 在 yml 文件末尾加上
http.cors.enabled: true  
http.cors.allow-origin: "*"  
# 为了安全生产环境应该关闭外网访问
vim elasticsearch.yml  
# 修改 network.host 为
network.host: 127.0.0.1  
# 另外还可以修改默认的集群名称

重启 docker elasticsearch。

docker restart es  

修改默认的 Elasticsearch 集群名称
Elasticsearch 默认的集群名称是elasticsearch,在生产环境上一定要修改成其他的名称,并且不同的环境和不同的集群要保证不相同,监控集群节点情况,如果有未知节点加入,一定要及时预警。

3.安装 Elasticsearch 常用可视化管理工具

3.1 Elasticsearch-head

elasticsearch-head 相当于是一个桌面,通过elasticsearch-head工具可以来操作elasticsearch。

1.镜像拉取

docker pull mobz/elasticsearch-head:5  

2.启动

docker run -d --name="es-admin" -p 9100:9100 mobz/elasticsearch-head:5  

可通过 http://xxx:9100/ 来访问。

3.2 ElasticHD

ElasticHD 支持 ES监控、实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to DSL工具等,体验下来感觉还是比较强大的!

1.项目地址
https://github.com/360EntSecGroup-Skylar/ElasticHD

2.直接安装方式

# 首先下载zip压缩包
wget https://github.com/360EntSecGroup-Skylar/ElasticHD/releases/download/1.4/elasticHD_linux_amd64.zip  
# 解压
# 修改权限
chmod -R 777 ElasticHD  
# 运行
./ElasticHD -p 127.0.0.1:9800 

3.Docker安装方式:

# 镜像拉取
docker pull containerize/elastichd  
# 启动
docker run -p 9800:9800 -d --name="es-hd" --link es:demo containerize/elastichd  

4.启动访问:http://localhost:9800

4.安装 IK 分词器

elasticsearch分词器,对中文分词并不是太友好。可以下载开源的IK分词器,来解决这一问题。

# 先进入 elasticsearch 容器 -> plugins 目录下
docker exec -it es /bin/bash  
cd plugins/  
mkdir ik  
cd ik/  
# 下载资源
## elasticsearch 5.0 后的版本都不支持插件在线安装的方式
## 具体可以参考 https://github.com/medcl/elasticsearch-analysis-ik/issues/344
## 可以通过下载资源方式安装
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip  
## 这里需要注意的是ik 分词器的版本。需要与elasticsearch版本相对应,否者后面会启动失败(具体可以参考其github首页)。
# 解压
unzip elasticsearch-analysis-ik-6.6.1.zip  
rm -rf elasticsearch-analysis-ik-6.6.1.zip  

重启 docker elasticsearch。

docker restart es  

具体使用方式可以参考ElasticSearch6.5 使用ik+拼音分词

X.Docker Compose (暂时不使用,略复杂)

## 2.3 运行-生产模式

1.先检查 ``vm.max_map_count`` 配置

# The vm.max_map_count kernel setting needs to be set to at least 262144 for production use. Depending on your platform:
# 如果过小,需要修改(以下命令可以查看)
grep vm.max_map_count /etc/sysctl.conf  
# 可通过以下命令,使实时生效
sysctl -w vm.max_map_count=262144  
2.推荐安装 Docker Compose  
。。。。。。

配置 Docker elasticsearch

6.自己的SpringBoot项目也可以使用docker运行

。。。

7.可以考虑利用gitee钩子处理自己项目的升级、部署之类

。。。