基于系统centos7
-------------------------------------------------------------
elasticsearch
standalone
- 下载elasticsearch7
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
解压
mv elasticsearch-7.17.0-linux-x86_64.tar.gz /usr/local
cd /usr/local
tar -xzvf elasticsearch-7.17.0-linux-x86_64.tar.gz
mv elasticsearch-7.17.0 es7新建用户,es默认不能使用root启动
useradd esuser
passwd esuser
输入密码将es7目录以及子目录,全部赋予esuser
chown -R esuser:esuser es7/修改系统配置
es需要增大系统默认的文件打开数和用户可支配内存数
vi /etc/security/limits.conf
文件末尾追加 (esuser 为启动elasticsearch的用户名)
esuser soft nofile 65536
esuser hard nofile 65536
vi /etc/sysctl.conf
# 优化文件描述符
vm.max_map_count = 655360
# 优化脏内存页,es写入削峰
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.dirty_writeback_centisecs=200
# 优化系统回收inode cache权重
vm.vfs_cache_pressure=200
vm.dirty_expire_centisecs=6000
保存退出,使用sysctl -p刷新使即时生效
- 切换回esuser,调整一些es参数
su esuser
/usr/local/es7/config/jvm.options 这里修改jvm占用内存 ,默认是4g,有需要可以修改
-Xms4g
-Xmx4g
这两个需要一致
/usr/local/es7/config/elasticsearch.yml,修改节点,集群名,以及数据保存目录等信息
cluster.name: llc-es-cluster # 集群名 随意指定 同个集群的不同节点需要使用相同集群名 不同节点名
node.name: es107 # 节点名
#path.data: /data/tip/es/data #es数据存放路径
#path.logs: /data/tip/es/logs #es日志存放路径
network.host: 0.0.0.0 #es使用的IP地址 默认本机,使用0.0.0.0 就能让外面的机器访问
#http.port: 9200 #es使用的端口号 默认9200
cluster.initial_master_nodes: ["es107"] #值为上面配置的node.name 配置文件中的discover项里的几个配置需要至少配置一个 如果多个节点 则以数组形式将各个节点名写入即可
修改好后保存退出。
启动es
/usr/local/es7/bin/elasticsearch -d ,后面-d 是静默启动验证
curl http://192.168.1.107:9200
得到结果如下,表示成功:
{
"name" : "es107",
"cluster_name" : "llc-es-cluster",
"cluster_uuid" : "NWRApcdkSbC1I70s1MJhiQ",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "bee86328705acaa9a6daede7140defd4d9ec56bd",
"build_date" : "2022-01-28T08:36:04.875279988Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
参考:
Elasticsearch 7x 配置文件详解
es7搭建过程遇到常见的错误及解决方案
cluster
需要注意的是:如果各个节点的data目录下的nodes本来就不一样,需要先清空这个目录,因为每个节点索引分片的分配在每新增一个节点都要重新进行一次分配。
共有3个节点,192.168.1.104、192.168.1.105、192.168.1.107
修改配置文件
vi /usr/local/es7/config/elasticsearch.yml
#所有节点都必须一致
cluster.name: test-es-cluster
#节点各不相同
node.name: es104
# 发现es集群节点
discovery.seed_hosts: ["192.168.1.104:9300", "192.168.1.105:9300", "192.168.1.107:9300"]
# 初始化竞选主master(3台有资格,最终master节点通过算法决定的)
cluster.initial_master_nodes: ["es104", "es105", "es107"]
#是否开启跨域访问
http.cors.enabled: true
#开启跨域访问后的地址限制,*表示无限制
http.cors.allow-origin: "*"
开启9300集群内部通信端口,加完刷新下,集群默认通讯端口就是9300
firewall-cmd --add-port=9300/tcp --permanent
firewall-cmd --reload
如果想用别的端口,配置文件加上:
#transport做集群之间指令通信的
transport.tcp.port: 9300
各个节点按上面配置好之后,各自启动es,启动成功后,输入连接查看,以下结果为成功,带*为master。
[root@localhost ~]# curl http://192.168.1.105:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.107 14 96 8 0.31 0.58 0.82 cdfhilmrstw - es107
192.168.1.105 33 96 10 0.43 0.74 1.08 cdfhilmrstw - es105
192.168.1.104 11 96 8 0.28 0.55 0.86 cdfhilmrstw * es104
以下命令也可以,number_of_nodes为3
[root@localhost ~]# curl http://192.168.1.104:9200/_cluster/health?pretty=true
{
"cluster_name" : "llc-es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 3,
"active_shards" : 6,
"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.0
}
安全配置(密码身份验证)
默认是不带密码的,这样不太安全,所以得设置一下。
集群身份认证需要跟集群内部安全通信一起配置不然会报错
首先cd /usr/local/es7
- 集群身份认证,3个节点都要
在elasticsearch.yml配置文件中加入
xpack.security.enabled: true
- 集群内部安全通信,操作其中1个节点
- 生成证书
为Elasticsearch集群创建一个证书颁发机构。
bin/elasticsearch-certutil ca
之后直接按enter回车即可,
Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可
Enter password for elastic-stack-ca.p12 : #这里直接回车即可,不要设置密码
之后会在/usr/local/es7下看到新生成的文件 elastic-stack-ca.p12
- 生成私钥
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
下面三项直接回车即可:
Enter password for CA (elastic-stack-ca.p12) :
Please enter the desired output file [elastic-certificates.p12]:
Enter password for elastic-certificates.p12 : #这里直接回车即可,不要设置密码,否则后面ES会启动不了
Certificates written to /usr/local/es7/elastic-certificates.p12
设置完毕后,会在/usr/local/es7 下看到新生成的文件:elastic-certificates.p12
- 创建文件夹certs放置私钥
mkdir config/certs
cp elastic-certificates.p12 config/certs
- 拷贝给其他的节点
scp -r config/certs/ root@192.168.1.105:/usr/local/es7/config/
scp -r config/certs/ root@192.168.1.107:/usr/local/es7/config/
- elasticsearch.yml配置证书(3个节点都要)
http.cors.allow-headers: Authorization
xpack.security.enabled: true
#证书配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
- 再次确保es7文件夹以及其下的子文件夹内容,都归于特定用户esuser所有
chown -R esuser:esuser /usr/local/es7
- 启动es
/usr/local/es7/bin/elasticsearch (初次不加-d 静默启动,便于观察日志)
可以看到,es104节点中,有105、107这样的其他节点显示出来
- 设置密码 (在某1个节点中执行就好)
bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
按个人需求输入密码即可。
ES中内置的用户:
elastic 账号:拥有 superuser 角色,是内置的超级用户。
kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
beats_system账号:拥有 beats_system 角色。用户 Beats 在 Elasticsearch 中存储监控信息时使用。
elastic是超级用户,它可以做任何事情
- 验证
可见,没有密码是401,身份验证失败的。
[root@localhost es7]# curl -u elastic:123456 http://192.168.1.104:9200/_cluster/health?pretty=true
{
"cluster_name" : "llc-es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 4,
"active_shards" : 8,
"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.0
}
[root@localhost es7]# curl http://192.168.1.104:9200/_cluster/health?pretty=true
{
"error" : {
"root_cause" : [
{
"type" : "security_exception",
"reason" : "missing authentication credentials for REST request [/_cluster/health?pretty=true]",
"header" : {
"WWW-Authenticate" : "Basic realm=\"security\" charset=\"UTF-8\""
}
}
],
"type" : "security_exception",
"reason" : "missing authentication credentials for REST request [/_cluster/health?pretty=true]",
"header" : {
"WWW-Authenticate" : "Basic realm=\"security\" charset=\"UTF-8\""
}
},
"status" : 401
}
[root@localhost es7]# curl -u elastic:123456 http://192.168.1.104:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.104 17 96 5 0.96 0.62 0.50 cdfhilmrstw - es104
192.168.1.107 16 96 8 0.43 0.53 0.50 cdfhilmrstw * es107
192.168.1.105 44 96 9 0.69 0.63 0.59 cdfhilmrstw - es105
参考:
Elasticsearch 7.10 + Kibana 集群搭建
Elasticsearch安全认证
header插件
在谷歌应用商店搜索“elasticsearch-head”插件,然后将其安装,自动添加至谷歌浏览器
点击其使用即可,界面如下:
ik分词器
1、下载
去到https://github.com/medcl/elasticsearch-analysis-ik/releases,下载相应的版本zip文件,再上传到es目录
2、解压
如果没有安装unzip、zip,执行以下命令安装
yum install -y unzip zip
创建一个ik目录
cd /usr/local/es7
mkdir plugins/ik
解压到ik目录
unzip elasticsearch-analysis-ik-7.17.0.zip -d plugins/ik
待启动后,日志能看到已经load了进去
测试使用:
首要提醒ik有2种分词器:
ik_max_word 是细粒度分词,会穷尽一个语句中所有分词可能
ik_smart 是粗粒度分词,优先匹配最长词,不会有重复的数据
打开head插件,去到复合查询
-
ik_smart
-
ik_max_word
我们也可以自定义编辑词库。
步骤同样非常简单:
(1) 进入 elasticsearch/plugins/ik/config 目录
(2) 新建一个custom文件夹,再里面新建一个 ext.dic 文件,编辑内容:
流浪地球
(3) 修改IKAnalyzer.cfg.xml (在 ik/config 目录下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
修改完配置重新启动 elasticsearch,再次测试!
kibana
操作一个节点104
1、下载
cd /usr/local
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.0-linux-x86_64.tar.gz
2、解压、重命名
tar -xzvf kibana-7.17.0-linux-x86_64.tar.gz
mv kibana-7.17.0 kibana7
3、修改配置
vi /usr/local/kibana7/config/kibana.yml
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
#中文显示
i18n.locale: "zh-CN"
4、新建kibana用户、将kibana目录全部赋予给新用户
同样kibana也是不能使用root启动,还是创建用户给它
useradd kibanauser
passwd kibanauser
更新密码
chown -R kibanauser:kibanauser /usr/local/kibana7/
5、启动kibana
nobup /usr/local/kibana7/bin/kibana &
6、访问页面
http://192.168.1.104:5601 ,输入用户名密码即可,可以用elasticsearch内置的多个用户,不一定是kibana配置文件的那个用户