elasticsearch7安装并搭建集群,kibana,header&ik分词器插件安装

基于系统centos7

-------------------------------------------------------------

elasticsearch

standalone

  1. 下载elasticsearch7

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz

  1. 解压
    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

  2. 新建用户,es默认不能使用root启动
    useradd esuser
    passwd esuser
    输入密码

  3. 将es7目录以及子目录,全部赋予esuser
    chown -R esuser:esuser es7/

  4. 修改系统配置
    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刷新使即时生效

  1. 切换回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项里的几个配置需要至少配置一个 如果多个节点 则以数组形式将各个节点名写入即可

修改好后保存退出。

  1. 启动es
    /usr/local/es7/bin/elasticsearch -d ,后面-d 是静默启动

  2. 验证
    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本来就不一样,需要先清空这个目录,因为每个节点索引分片的分配在每新增一个节点都要重新进行一次分配。

参考:elastic节点data目录一致

共有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

  1. 集群身份认证,3个节点都要
    在elasticsearch.yml配置文件中加入
xpack.security.enabled: true
  1. 集群内部安全通信,操作其中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. 设置密码 (在某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是超级用户,它可以做任何事情

  1. 验证
    可见,没有密码是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配置文件的那个用户

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容