ubuntu安装elasticsearch7.11和kibana,安装ik中文分词,设置认证开放外网访问

x
xiezixing
发布于 5 个月前

mongodb在使用的过程中,发现对于模糊查询,也就是全文搜索的效率其实比较低,所以在商用项目上,最好是mongodb配合elasticsearch来使用,于是这篇文章就教大家如何安装elasticsearch7.11版本,并且安装ik中文分词,然后设置开放外网访问,最后设置账号密码认证。

资料链接:

elasticsearch官网关于debian安装的教程:https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html

kibana安装的教程:https://www.elastic.co/guide/en/kibana/7.11/deb.html#deb-repo

开源中文分词插件:https://github.com/medcl/elasticsearch-analysis-ik

导入elasticsearch PGP Key

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

从APT库中安装

sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch

如果存在elasticsearch,会提示:

Duplicate sources.list entry https://artifacts.elastic.co/packages/7.x/apt/ ...`

下载Debian包并且安装

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.1-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.1-amd64.deb.sha512
shasum -a 512 -c elasticsearch-7.11.1-amd64.deb.sha512 
sudo dpkg -i elasticsearch-7.11.1-amd64.deb

设置开启自启动

查看系统是使用的SysV init 还是systemd

ps -p 1

使用SysV init

sudo update-rc.d elasticsearch defaults 95 10

然后就可以使用以下命令开启或关闭elasticsearch:

sudo -i service elasticsearch start
sudo -i service elasticsearch stop

如果开启失败,日志位置在 /var/log/elasticsearch/.

使用 systemd

设置自启动:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

然后就可以使用如下命令启动或者停止服务:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

日志位置在于: /var/log/elasticsearch/.

如果您已对Elasticsearch密钥库进行密码保护,则需要systemd使用本地文件和系统环境变量来提供 密钥库密码。此本地文件存在时应受到保护,并且在Elasticsearch启动并运行后可以安全地删除它。

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

查看elasticsearch运行情况

直接访问host:9200,即可查看:

curl -X GET "localhost:9200/?pretty"

会返回如下信息:

{
  "name" : "Cp8oag6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  "version" : {
    "number" : "7.11.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "f27399d",
    "build_date" : "2016-03-30T09:51:41.449Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "1.2.3",
    "minimum_index_compatibility_version" : "1.2.3"
  },
  "tagline" : "You Know, for Search"
}

安装kibana

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install kibana
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service
sudo systemctl stop kibana.service

配置文件位置:/etc/kibana/kibana.yml

开启远程访问:

server.host: "0.0.0.0"

kibana的安装整体和安装elasticsearch差不多,相关目录位置:

Type

Description

Default Location

Setting

home

Kibana根目录$KIBANA_HOME

/usr/share/kibana

bin

二进制运行脚本包含 kibana 启动 Kibana 服务和 kibana-plugin 安装插件

/usr/share/kibana/bin

config

配置文件包含: kibana.yml

/etc/kibana

data

kibana和它的插件写入硬盘的数据文件

/var/lib/kibana

path.data

logs

日志文件位置

/var/log/kibana

path.logs

plugins

插件位置

/usr/share/kibana/plugins


设置elasticsearch

目录/etc/elasticsearch 包含elasticsearch的基本配置文件。 这里所有文件在安装后都设置成拥有者:root:elasticsearch .

setgid标志在/etc/elasticsearch 目录上应用组权限,以确保Elasticsearch可以读取任何包含的文件和子目录。所有文件和子目录都继承root:elasticsearch所有权。从此目录或任何子目录运行命令(例如 elasticsearch-keystore工具)需要root:elasticsearch 的权限。

默认情况下,Elasticsearch从文件/etc/elasticsearch/elasticsearch.yml中加载其配置 。在配置Elasticsearch中说明了此配置文件的格式。

Debian软件包还具有系统配置文件(/etc/default/elasticsearch),该文件可让您设置以下参数:

JAVA_HOME

设置要使用的自定义Java路径。

MAXOPENFILES

最大打开文件数,默认为65535

MAXLOCKEDMEMORY

最大锁定内存. 设置成 unlimited ,如果你使用 bootstrap.memory_lock 选项在elasticsearch.yml文件中。

MAXMAPCOUNT

一个进程可能具有的最大内存映射区域数。如果mmapfs 用作索引存储类型,请确保将其设置为较高的值。欲了解更多信息,请查看 Linux内核文件 有关max_map_count。这是通过sysctl在启动Elasticsearch之前设置的。默认为262144

ESPATHCONF

配置文件目录(其中必须包括elasticsearch.yml, jvm.options,和log4j2.properties文件); 默认为 /etc/elasticsearch

ESJAVAOPTS

您可能想要应用的任何其他JVM系统属性。

RESTARTONUPGRADE

配置在软件包升级时重启,默认为false。这意味着您必须在手动安装软件包后重新启动Elasticsearch实例。这样做的原因是为了确保集群中的升级不会导致连续的分片重新分配,从而导致高网络流量并减少集群的响应时间。


使用的systemd要求通过systemd而不是通过/etc/sysconfig/elasticsearch 文件来配置系统资源限制。有关更多信息,请参见Systemd配置

Debian软件包目录列表

Debian软件包将配置文件,日志和数据目录放置在基于Debian的系统的适当位置:

Type

Description

Default Location

Setting

home

Elasticsearch主目录或 $ES_HOME

/usr/share/elasticsearch

bin

二进制脚本,包括elasticsearch启动节点的脚本和elasticsearch-plugin安装插件脚本

/usr/share/elasticsearch/bin

conf

配置文件包括 elasticsearch.yml

/etc/elasticsearch

ESPATHCONF

conf

环境变量包括堆大小,文件描述符。

/etc/default/elasticsearch

data

节点上分配的每个索引/分片的数据文件的位置。可以容纳多个位置。

/var/lib/elasticsearch

path.data

jdk

捆绑的Java开发工具包用于运行Elasticsearch。可以通过在/etc/default/elasticsearch中设置JAVA_HOME环境变量来覆盖。

/usr/share/elasticsearch/jdk

logs

日志文件位置。

/var/log/elasticsearch

path.logs

plugins

插件文件位置。每个插件将包含在一个子目录中。

/usr/share/elasticsearch/plugins

repo

共享文件系统存储库位置。可以容纳多个位置。可以将文件系统存储库放置在此处指定的任何目录的任何子目录中。

Not configured

path.repo

后面的步骤

随后的选项:

开启外网访问

elasticsearch.yml中设置:

network.host: 0.0.0.0

启用身份验证 

基本身份验证通常足以保护Elasticsearch群集免受黑客攻击。 

默认情况下,在Elasticsearch基本和试用许可证中禁用身份验证。您可以通过在文件elasticsearch.yml中设置启用它 xpack.security.enabled: true  。此设置还激活了Elasticsearch提供的其他免费安全功能。重新启动Elasticsearch之后,用户将必须指定用户名和密码才能访问集群。

接下来的重要步骤是为执行不同管理角色的内置用户创建密码。这些用户包括:apmsystem, beatssystem, elastic, kibanasystem, logstashsystem, 和remotemonitoringuser

要为其创建密码,您可以使用Elasticsearch安装随附的名为“ elasticsearch-setup-passwords”的交互式bash脚本。您可以在Elasticsearch bin目录下找到它,并在终端中以交互方式启动(请参见下图,确保记住您创建的所有密码,因为稍后将需要其中的一些密码)。

elasticsearch-setup-passwords脚本介绍:

bin/elasticsearch-setup-passwords auto|interactive
[-b, --batch] [-h, --help] [-E <KeyValuePair>]
[-s, --silent] [-u, --url "<URL>"] [-v, --verbose]

此命令仅在Elasticsearch安全功能的初始配置期间使用。它使用 elastic引导程序密码 来运行用户管理API请求。如果您的Elasticsearch密钥库已经受密码保护,则在设置内置用户的密码之前,必须输入密钥库密码。为elastic 用户设置密码后,引导密码将不再处于活动状态,并且您无法再次使用此命令。相反,您可以使用Kibana中的“管理”>“用户” UI或“更改密码” API来更改密码

此命令使用HTTP连接来连接到集群并运行用户管理请求。如果您的群集在HTTP层上使用TLS / SSL,则该命令会自动尝试使用HTTPS协议建立连接。它使用文件elasticsearch.yml中的设置xpack.security.http.ssl来配置连接。如果不使用默认的配置目录位置,请在运行命令之前确保ESPATHCONF环境变量返回正确的elasticsearch-setup-passwords路径。您可以使用-E命令选项覆盖文件elasticsearch.yml中的设置。有关调试连接失败的更多信息,请参阅 Setup-passwords命令由于连接失败而失败

参数

auto将随机生成的密码输出到控制台。

-b, --batch如果启用,则在不提示用户的情况下运行更改密码过程。

-E <KeyValuePair>配置标准Elasticsearch或X-Pack设置。

-h, --help显示帮助信息。

interactive提示您手动输入密码。

-s, --silent显示最小输出。

-u, --url "<URL>"指定该工具用于提交用户管理API请求的URL。默认值由elasticsearch.yml文件中的设置确定 。如果xpack.security.http.ssl.enabled 设置为true,则必须指定HTTPS URL。

-v, --verbose显示详细输出。

例子

以下示例使用-u参数来告诉工具在哪里提交其用户管理API请求:

bin/elasticsearch-setup-passwords auto -u "http://localhost:9201"

配置Kibana身份验证

启用Elasticsearch身份验证后,用户必须使用有效的用户名和密码登录到Kibana。

为了以管理用户身份访问Kibana,您应确保将通过交互式对话框创建的Kibana密码添加到名为的Kibana配置文件中:kibana.yml

elasticsearch.username: "kibana_system"
elasticsearch.password: "your_password" 

或者,您可以将以下设置添加到Kibana密钥库中:

./bin/kibana-keystore create
./bin/kibana-keystore add elasticsearch.username
./bin/kibana-keystore add elasticsearch.password

下次访问Kibana时,系统将提示您输入用户名和密码:

使用Kibana创建用户

创建内置用户后,您可以为要允许访问Elasticsearch的所有用户配置身份验证。Elastic Stack支持各种身份验证,包括基本(本地)身份验证,LDAP,PKI,SAML或Kerberos。 

本机领域身份验证是ES> 6.8.0中的一项免费功能,因此让我们讨论如何使用它来配置用户。创建用户的最简单方法是从Kibana仪表板。 

您需要使用“ elastic”内置用户登录到Kibana,然后转到“堆栈管理”>“安全性”>“用户”(请参见下图)。

然后,单击“创建用户”按钮以打开“新用户”对话框,您可以在其中输入所有必需的用户详细信息(请参见下图)。

启用授权

授权允许控制用户对Elasticsearch集群中特定资源的访问。要在早期的Elasticsearch版本中启用授权,您必须使用诸如Nginx之类的代理来指定复杂的过滤规则。这种方法有缺陷,因为过滤器无法涵盖所有​​可能的用例,并且Elasticsearch API经常更新。幸运的是,最新版本的Elasticsearch允许轻松地从Kibana配置授权。 

默认情况下,Elasticsearch用户只能更改自己的密码并获取有关自己的某些信息。Elasticsearch管理员可以使用默认或自定义规则来扩展集群中的用户权限范围。 

每个角色定义一组可以在特定资源(索引,文档,字段,集群,indices, documents, fields, clusters)上执行的动作(例如,读取,删除)。您可以从Kibana的“堆栈管理”>“安全性”>“角色”访问内置角色(请参见下图)。

您可以选择一个或多个这些角色,并将它们分配给我们在上面创建的测试用户: 

如您所见,我们为测试用户授予了四个角色,包括Kibana Admin。下次登录时,测试用户将能够管理Kibana和Elasticsearch,但将无法管理其他用户(因为只有超级用户才能执行此操作)。

TLS加密

如果禁用了TLS加密,Elasticsearch节点和客户端将以纯文本格式发送所有数据。此数据可能包含敏感信息,例如密码和其他凭据。在这种情况下,对网络通信进行加密对于防止嗅探飞行中的数据,中间人攻击以及对数据的任何形式的操纵以及试图获得对Elasticsearch节点的访问而言非常重要。 

TLS加密还可用于防止恶意黑客节点加入群集并通过复制获得对数据的访问。如果启用了TLS,则Elasticsearch节点在与其他节点通信时必须使用由指定的证书颁发机构(CA)颁发的证书来标识自己。如果未提供有效证书,则该节点将无法访问群集。

如前所述,Elasticsearch 6.8.0使加密通信成为免费的Elasticsearch产品的一部分。当前,Elasticsearch加密通信支持以下功能:

  • 默认情况下,传输层上的TLS,HTTP层上的TLS(可选)

  • 所述elasticsearch-的certutil用于产生证书命令

  • 强大的加密功能。可以使用密钥长度大于128位的加密,例如256位AES加密。

我们不会为您的ES群集配置TLS证书的更多细节,因为这是一个复杂的主题,值得单独撰写。您可以在此处找到有关在ES群集中​​配置TLS的详细指南。 

启用IP过滤

Elasticsearch支持IP过滤,该IP过滤可应用于应用程序客户端,节点客户端,其他节点以及尝试连接到集群的用户。还可以将Elasticsearch访问控制功能设置为拒绝域和子网。IPv4和IPv6地址均受支持。

ES管理员可以将某些IP列入黑名单,以拒绝访问群集。在这种情况下,来自黑名单IP的连接将立即被丢弃,并且不会处理任何请求。

您可以通过指定elasticsearch.yml 里边的xpack.security.transport.filter.allowxpack.security.transport.filter.deny的设置。

另外,您可以使用_all关键字拒绝所有未明确允许的连接:

xpack.security.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ]
xpack.security.transport.filter.deny: _all

此外,如果您在高度动态的环境中工作(在配置群集之前不知道IP),则可以使用ES更新API动态配置IP过滤规则。例如, 

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent" : {
    "xpack.security.transport.filter.allow" : "172.16.0.0/24"
  }
}
'

备份Elasticsearch数据

安排Elasticsearch数据的定期备份是合理的灾难恢复策略的重要组成部分。管理员需要确保备份能够反映群集的一致状态并且不会损坏。否则,备份将无用。 

Elasticsearch具有内置的“快照和还原”模块,您可以使用该模块为关键ES数据拍摄快照并进行还原。Elasticsearch内置快照具有应用程序一致性和存储效率。应用程序一致性可确保快照反映了快照创建时数据库的实际状态。这是通过记录所有未决的内存中操作以及磁盘上的数据来完成的。 

此外,Elasticsearch快照也经过优化,可节省存储资源和快速磁盘IO。它们是增量创建的,以确保每个新快照都存储未存储在较早快照中的数据。这允许以最小的开销进行快速有效的快照。

快照和还原模块允许对特定索引和数据流进行快照,并将其存储在本地或远程存储库中。Elasticsearch支持诸如Amazon S3,HDFS,Microsoft Azure,Google Cloud Storage等远程存储库。

此外,Elasticsearch支持快照生命周期管理以自动拍摄和管理快照。

要了解有关使用“快照和还原”模块创建Elasticsearch数据备份的更多信息,请查阅本文

安装中文分词插件:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

将6.3.0更换成你需要安装的版本号。

或者直接下载插件并且移动到插件文件夹中:

https://github.com/medcl/elasticsearch-analysis-ik/releases 下载您需要的版本

创建插件文件夹 cd your-es-root/plugins/ && mkdir ik

解压下载的插件压缩包到您的elasticsearch文件夹中your-es-root/plugins/ik

注意:安装分词器之后,请重启elasticsearch

创建索引:

curl -XPUT http://localhost:9200/index

设置分词器:

curl -XPOST http://localhost:9200/index/_mapping -H 'Content-Type:application/json' -d'
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }

}'

索引一些内容

curl -XPOST http://localhost:9200/index/_create/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/_create/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/_create/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/_create/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'

查询并且使用高亮

curl -XPOST http://localhost:9200/index/_search  -H 'Content-Type:application/json' -d'
{
    "query" : { "match" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

返回结果:

{
    "took": 14,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2,
        "hits": [
            {
                "_index": "index",
                "_type": "fulltext",
                "_id": "4",
                "_score": 2,
                "_source": {
                    "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
                },
                "highlight": {
                    "content": [
                        "<tag1>中国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
                    ]
                }
            },
            {
                "_index": "index",
                "_type": "fulltext",
                "_id": "3",
                "_score": 2,
                "_source": {
                    "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
                },
                "highlight": {
                    "content": [
                        "均每天扣1艘<tag1>中国</tag1>渔船 "
                    ]
                }
            }
        ]
    }
}

热更新 IK 分词使用方法

目前该插件支持热更新 IK 分词,通过上文在 IK 配置文件中提到的如下配置

 	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">location</entry>
 	<!--用户可以在这里配置远程扩展停止词字典-->
	<entry key="remote_ext_stopwords">location</entry>

其中 location 是指一个 url,比如 http://yoursite.com/getCustomDict,该请求只需满足以下两点即可完成分词热更新。

  1. 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。

  2. 该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

满足上面两点要求就可以实现热更新分词了,不需要重启 ES 实例。

可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 或其他简易 http server 下,当 .txt 文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt 文件。

分词器经验:

最后给出一个经验性的结论

  • ik_smart 既能满足英文的要求,又更智能更轻量,占用存储最小,所以首推 ik_smart

  • standard 对英语支持是最好的,但是对中文是简单暴力每个字建一个反向索引,浪费存储空间而且效果很c差

  • ikmaxwordik_smart 对中文的支持更全面,但是存储上的开销实在太大,不建议使用

错误处理:

错误一、the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

如果你运行elasticsearch在单一节点,则可以在elasticsearch.yml中设置:

discovery.type: single-node

或者你运行多节点,则需要配置:

discovery.seed_hosts : ["localhost", "127.0.0.1"]

解释:

cluster.initialmasternodes :用于提供初始节点集,其投票将在主选举过程中进行考虑。

discovery.seed_hosts:用于提供符合主机资格的节点集。这应该包含所有符合主机资格的节点的名称。

有关更多详细信息,请阅读本指南

错误二、Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled]

在elasticsearch.yml中设置:

xpack.security.transport.ssl.enabled: true

关于如何申请证书及在集群中启用认证,kibana实现安全性,请参考:https://www.elastic.co/cn/blog/getting-started-with-elasticsearch-security

相关文章推荐
评论区
暂未开放
相关文章推荐