1.使用docker安装
1.1 docker安装ElasticSearch
- 拉取镜像
docker pull elasticsearch:7.7.0
- 启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --restart=true elasticsearch:7.7.0
访问访问localhost:9200 出现以下内容表示安装成功。
{
"name" : "ece13c2201ae",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "PyT_-BOASeCwRolhP3I39A",
"version" : {
"number" : "7.7.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "81a1e9eda8e6183f5237786246f6dced26a10eaf",
"build_date" : "2020-05-12T02:01:37.602180Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
1.2 安装es-header插件
- 拉取镜像
docker pull mobz/elasticsearch-head:5
- 创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
- 启动容器
docker start elasticsearch-head
or
docker start 容器id (docker ps -a 查看容器id )
访问localhost:9100 出现插件管理控制台 说明安装成功。
尝试连接easticsearch会发现无法连接上,由于是前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。
解决办法:修改docker中elasticsearch的elasticsearch.yml文件。
docker exec -it elasticsearch /bin/bash (进不去使用容器id进入)
- 在Es容器内操作
vi config/elasticsearch.yml
# 在最下面添加2行
http.cors.enabled: true
http.cors.allow-origin: "*"
# 退出并重启
exit
- 退出Es容器后执行
docker restart 容器id
bug修复:ElasticSearch-head 操作时不修改配置,默认会报 406错误码。
- 进入es-haed 插件容器
docker exec -it elasticsearch-head /bin/bash
- 在容器内操作
# 编辑他的前端交互js文件
vim /usr/src/app/_site/vendor.js
第6886行:把 application/x-www-form-urlencoded 改成 application/json;charset=UTF-8
第7574行:把 application/x-www-form-urlencoded 改成 application/json;charset=UTF-8
#保存退出,重启容器,成功查询到es数据
1.3 安装IK分词器
- 进入Es容器
docker exec -it elasticsearch /bin/bash (进不去使用容器id进入)
- 容器内操作
cd /usr/share/elasticsearch/plugins
mkdir ik
cd ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip
#解压
unzip elasticsearch-analysis-ik-7.7.0.zip
#删除压缩包
rm -rf elasticsearch-analysis-ik-7.7.0.zip
完成后退出容器并重启。
1.4 安装Kibana
- 拉镜像
docker pull kibana:7.7.0
- 在服务器/物理机上创建本地目录文件
mkdir /es/kibana
cd /es/kibana
vim kibana.yml
#加入以下内容:
server.host: "0.0.0.0"
# ip为es的docker容器ip
elasticsearch.hosts: ["http://172.17.0.5:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
# 保存退出
:wq!
- 启动容器
docker run --name kibana -v /es/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 -d --restart=true kibana:7.7.0
有可能kibana连接不上es,几个注意点:
- 保证Es和Kibana在同一个网段。
- 或者使用桥接的方式连接二者
- 注意版本对应
- 注意配置文件的冒号后面有空格
可能请求之后发现跨域,这个直接根据浏览器F12提示找到对应的源码,改一下就行了。
2. Linux物理机安装
2.1 单机安装Es
- 解压软件
# 解压缩
tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module
# 改名
mv elasticsearch-7.8.0 es
解压后可以看到 ES 的文件目录结构如下:
| 目录 | 描述 |
|---|---|
| bin | 包含一些执行脚本,其中ES的启动文件和脚本安装文件就在这里 |
| config | 包含集群的配置文件(elasticsearch.yml),jvm配置文件(jvm.options),user等相关配置 |
| JDK | ES7.0版本以后默认带有JDK |
| lib | java的一些类库 |
| plugins | ES插件的安装目录 |
| modules | 包含所有的ES模块 |
- 创建用户
因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要创建新用户,在 root中创建新用户。
useradd es #新增 es 用户
passwd es #为 es 用户设置密码
userdel -r es #如果错了,可以删除再加
chown -R es:es /opt/module/es #文件夹所有者
- 修改配置文件
修改
/opt/module/es/config/elasticsearch.yml文件
# 加入如下配置
cluster.name: elasticsearch
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
path.data: ./data
path.logs: ./logs
discovery.seed_hosts: ["localhost"]
- discovery.seed_hosts:默认本机的情况下无需扫描,Es会默认的扫描本机的9300-9305端口,一旦进行了网络环境配置,这个默认扫描就会失效。discovery.seed_hosts 配置为 master 候选者节点即可。 如果需要指定端口的话,其值可以为:
["localhost:9300", "localhost:9301"]。 - cluster.initial_master_nodes 指定新集群 master 候选者列表,其值为节点的名字列表。这里配置了 node.name: node-1,所以其值为 ["node-1"],而不是 ip 列表 !
- network.host 和 http.port 是 ES 提供服务的监听地址和端口,线上一定不能配置 ip 为 0.0.0.0,这是非常危险的行为!!!
怎么样来理解这个 discovery.seed_hosts 和 cluster.initial_master_nodes 呢?
cluster.initial_master_nodes 是候选者列表,一般我们线上环境候选者的数量会比较少,毕竟是用来做备用的。而且这个配置只跟选举 master 有关,也就是跟其他类型的节点没有关系,其他类型的节点不需要配置这个也是可以的。
discovery.seed_hosts 这个可以理解为是做服务或者节点发现的,其他节点必须知道他们才能进入集群,一般配置为集群的 master 候选者的列表。
在现实环境中是这些 master 候选者(组织联系人)可能会经常变化,那怎么办呢?discovery.seed_hosts 这个配置项除了支持 ip 外还支持域名,所以可以用域名来解决这个问题。其他类型节点的配置上写的是域名,域名解析到对应的 ip,如果机器挂了,新的节点 ip 换了,就把域名解析到新的ip即可,这样其他节点的配置就不用修改了。所以非 master 候选节点要配 discovery.seed_hosts (组织联系人)才能顺利加入到集群中来。
修改
/opt/module/es/config/jvm.options文件
# 设置堆内存最小值
-Xms1g
# 设置堆内存最大值
-Xmx1g
JVM 配置需要以下几点:
- -Xms 和-Xmx 这两个 JVM 的参数必须配置为一样的数值。服务在启动的时候就分配好内存空间,避免运行时申请分配内存造成系统抖动。
- Xmx 不要超过机器内存的 50%,留下些内存供 JVM 堆外内存使用。
- 并且 Xmx 不要超过 32G。建议最大配置为 30G。接近 32G,可能会导致 JVM 压缩指针的功能失效,导致性能下降。
修改
/etc/security/limits.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
修改
/etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
# 注:* 代表 Linux 所有用户名称
修改
/etc/sysctl.conf
# 在文件中增加下面内容
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=655360
重新加载
sysctl -p
- 使用 ES 用户启动
cd /opt/module/es/
#启动
bin/elasticsearch
#后台启动
bin/elasticsearch -d
# 查看日志:elasticsearch 指定的配置文件配置的cluster.name
tail -n 100 -f logs/elasticsearch.log
启动时,会动态生成文件,如果文件所属用户不匹配,会发生错误,需要重新进行修改用户和用户组。
2.2 集群安装Es
修改
/opt/module/es/config/elasticsearch.yml文件,分发文件.
# 加入如下配置
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-1
#ip 地址,每个节点的地址不能重复
network.host: linux1
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["linux1:9300","linux2:9300","linux3:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
其余修改同单机安装。
2.3 安装Kibana
Kibana 与 ES 的版本是有对应关系的,所以需要下载与 ES 同版本的 Kibana,在这里下载 Kibana 7.8.0。 使用 wget 下载并且解压安装 Kibana:
# 进入刚才安装ES的目录
cd ES
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz
tar xvf kibana-7.8.0-linux-x86_64.tar.gz
# 重命名
mv kibana-7.8.0-linux-x86_64 kibana
cd kibana
# 需要注意的是,线上一定不能配置ip为 0.0.0.0,这是非常危险的行为!!!
echo -e '\nserver.host: "0.0.0.0"' >> config/kibana.yml
echo -e '\nelasticsearch.hosts: ["http://localhost:9211"]' >> config/kibana.yml
./bin/kibana >> run.log 2>&1 &
安装完成后,在浏览器中访问 localhost:5601,如果运行成功可以进入到如下界面: