235天前2019-04-23 12:50:18 |    抢沙发  1673 
本文主要讲解如何在centos7环境下安装elasticsearch7并集成IK中文分词器的方法,至于怎么使用暂时不涉及。因为本人还没研究过怎么使用。环境也是因为项目需要所以才研究如何搭建生产环境的。

elasticsearch7

先大概说一下,centos7下安装elasticsearch7的一些注意事项。首先到目前为止,elasticsearch的最新版本是7.0.0然后elasticsearch必须在非root用户下运行,否则会报错,另外需要配置系统文件分页数量,否则也会报错。

elasticsearch 官网:https://www.elastic.co/cn/downloads/elasticsearch

打开后下载适合自己平台的安装包就可以了。

如下图:

elasticsearch

第一步:安装所需的java环境(最低需要1.8以以上版本):

yum install java-1.8.0-openjdk* -y
查看安装版本:
java -version
下载elasticsearch-7.0.0:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
解压elasticsearch-7.0.0:
tar -xzvf elasticsearch-7.0.0-linux-x86_64.tar.gz
进入elasticsearch-7.0.0目录:
cd elasticsearch-7.0.0
修改elasticsearch-7.0.0配置文件:
vim config/elasticsearch.yml
修改部分如下:
配置es的集群名称
cluster.name: my-application

节点名
node.name: node-1

bootstrap.memory_lock: true

# 允许访问的ip,0.0.0.0表示任意ip可以访问
network.host: 0.0.0.0

# 对外端口
http.port: 9200

# 集群其他节点IP,只有一个节点写本机ip
discovery.zen.ping.unicast.hosts: ["host1", "host2"]

# 集群节点数量
gateway.recover_after_nodes: 1
下面列出一个配置详细说明:
配置项说明: 
cluster.name: elasticsearch 
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。

node.name: “Franz Kafka” 
节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

node.master: true 
指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

node.data: true 
指定该节点是否存储索引数据,默认为true。

index.number_of_shards: 5 
设置默认索引分片个数,默认为5片。

index.number_of_replicas: 1 
设置默认索引副本个数,默认为1个副本。

path.conf: /path/to/conf 
设置配置文件的存储路径,默认是es根目录下的config文件夹。

path.data: /path/to/data 
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例: 
path.data: /path/to/data1,/path/to/data2

path.work: /path/to/work 
设置临时文件的存储路径,默认是es根目录下的work文件夹。

path.logs: /path/to/logs 
设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins: /path/to/plugins 
设置插件的存放路径,默认是es根目录下的plugins文件夹

bootstrap.mlockall: true 
设置为true来锁住内存。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过ulimit -l unlimited命令。

network.bind_host: 192.168.0.1 
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。

network.publish_host: 192.168.0.1 
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。

network.host: 192.168.0.1 
这个参数是用来同时设置bind_host和publish_host上面两个参数。

transport.tcp.port: 9300 
设置节点间交互的tcp端口,默认是9300。

transport.tcp.compress: true 
设置是否压缩tcp传输时的数据,默认为false,不压缩。

http.port: 9200 
设置对外服务的http端口,默认为9200。

http.max_content_length: 100mb 
设置内容的最大容量,默认100mb

http.enabled: false 
是否使用http协议对外提供服务,默认为true,开启。

gateway.type: local 
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。

gateway.recover_after_nodes: 1 
设置集群中N个节点启动时进行数据恢复,默认为1。

gateway.recover_after_time: 5m 
设置初始化数据恢复进程的超时时间,默认是5分钟。

gateway.expected_nodes: 2 
设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。

cluster.routing.allocation.node_initial_primaries_recoveries: 4 
初始化数据恢复时,并发恢复线程的个数,默认为4。

cluster.routing.allocation.node_concurrent_recoveries: 2 
添加删除节点或负载均衡时并发恢复线程的个数,默认为4。

indices.recovery.max_size_per_sec: 0 
设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。

indices.recovery.concurrent_streams: 5 
设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。

discovery.zen.minimum_master_nodes: 1 
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

discovery.zen.ping.timeout: 3s 
设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

discovery.zen.ping.multicast.enabled: false 
设置是否打开多播发现节点,默认是true。

discovery.zen.ping.unicast.hosts: [“host1”, “host2:port”, “host3[portX-portY]”] 
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。

下面是一些查询时的慢日志参数设置 
index.search.slowlog.level: TRACE 
index.search.slowlog.threshold.query.warn: 10s 
index.search.slowlog.threshold.query.info: 5s 
index.search.slowlog.threshold.query.debug: 2s 
index.search.slowlog.threshold.query.trace: 500ms

index.search.slowlog.threshold.fetch.warn: 1s 
index.search.slowlog.threshold.fetch.info: 800ms 
index.search.slowlog.threshold.fetch.debug:500ms 
index.search.slowlog.threshold.fetch.trace: 200ms
第二步:修改系统参数,如果不修改会报内存不足[Unable to lock JVM Memory: error=12, reason=Cannot allocate memory]。

编辑/etc/security/limits.conf分页文件。

vim /etc/security/limits.conf
在末尾添加:
es  -  nofile  65536
es soft memlock unlimited
es hard memlock unlimited
执行:
sysctl -w vm.max_map_count=262144
使配置生效:
sysctl -p
创建普通运行账户:
useradd es
设置密码:
passwd es
切换到es普通用户:
su es
然后启动elasticsearch:
./bin/elasticsearch
如果未自动结束就说明已经正常启动了,然后可以本地访问以下,或者浏览器访问以下ip:9200是否成功。

如下图:

elasticsearch7

如果无法访问的话可能是你setenforce 未关闭,关闭掉就好了。

临时setenforce关闭:

setenforce 0
第三步:集成IK分词器

这个非常之简单。

elasticsearch-analysis-ik插件地址:https://github.com/medcl/elasticsearch-analysis-ik

安装elasticsearch-analysis-ik:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.0.0/elasticsearch-analysis-ik-7.0.0.zip
执行以后会提示你IK插件需要一些额外的权限是否继续安装,我们选择y继续就OK了。

完成以后重启elasticsearch

重启以后访问ip:9200/iktest

返回成功说明OK。

另外ik的配置文件位置在config/analysis-ik/中。文件名为:IKAnalyzer.cfg.xml

第四步:添加系统服务与开机启动:

创建es服务系统配置文件:

vim /etc/sysconfig/elasticsearch
内容如下:
#######################
#    Elasticsearch    #
#######################

# Elasticsearch home directory
ES_HOME=/software/elasticsearch-7.0.0

# Elasticsearch Java path
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOMR/jre/lib

# Elasticsearch configuration directory
ES_PATH_CONF=/software/elasticsearch-7.0.0/config

# Elasticsearch PID directory
PID_DIR=/software/elasticsearch-7.0.0/config/elasticsearch

#############################
#   Elasticsearch Service   #
#############################

# SysV init.d
# The number of seconds to wait before checking if elasticsearch started successfully as a daemon process
ES_STARTUP_SLEEP_TIME=5

################################
#   Elasticsearch Properties   #
################################
# Specifies the maximum file descriptor number that can be opened by this process
# When using Systemd,this setting is ignored and the LimitNOFILE defined in
# /usr/lib/systemd/system/elasticsearch.service takes precedence
#MAX_OPEN_FILES=65536

# The maximum number of bytes of memory that may be locked into RAM
# Set to "unlimited" if you use the 'bootstrap.memory_lock: true' option
# in elasticsearch.yml.
# When using Systemd,LimitMEMLOCK must be set in a unit file such as
# /etc/systemd/system/elasticsearch.service.d/override.conf.
#MAX_LOCKED_MEMORY=unlimited

# Maximum number of VMA(Virtual Memory Areas) a process can own
# When using Systemd,this setting is ignored and the 'vm.max_map_count'
# property is set at boot time in /usr/lib/sysctl.d/elasticsearch.conf
#MAX_MAP_COUNT=262144
PS:该文件用于配置es服务的系统变量,用于systemd调用。上面我们配置了ES_HOME、ES_PATH_CONF、PID_DIR等,其中PID_DIR用于存放es进程的PID,用于systemd管理es进程的启动或停止。

创建es服务:

vim /usr/lib/systemd/system/elasticsearch.service
内容如下:
[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Environment=ES_HOME=/software/elasticsearch-7.0.0
Environment=ES_PATH_CONF=/software/elasticsearch-7.0.0/config
Environment=PID_DIR=/software/elasticsearch-7.0.0/config
EnvironmentFile=/etc/sysconfig/elasticsearch
WorkingDirectory=/software/elasticsearch-7.0.0
User=es
Group=es
ExecStart=/software/elasticsearch-7.0.0/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid

# StandardOutput is configured to redirect to journalctl since
# some error messages may be logged in standard output before
# elasticsearch logging system is initialized. Elasticsearch
# stores its logs in /var/log/elasticsearch and does not use
# journalctl by default. If you also want to enable journalctl
# logging, you can simply remove the "quiet" option from ExecStart.
StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of process
LimitNPROC=4096

# Specifies the maximum size of virtual memory
LimitAS=infinity

# Specifies the maximum file size
LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group
KillMode=process

# Java process is never killed
SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
 
[Install]
WantedBy=multi-user.target
PS:上面pid文件我是直接存在config目录中的,当然你也可以修改其他位置,只有有权限。


给脚本赋权限:

chmod +x /usr/lib/systemd/system/elasticsearch.service
重新加载systemd的守护线程:
systemctl daemon-reload
启动elasticsearch:
systemctl start elasticsearch.service
查看elasticsearch启动状态:
systemctl status elasticsearch.service
如果没报错,启动好了就添加开机启动:
systemctl enable elasticsearch.service

如果报:memory locking requested for elasticsearch process but memory is not locked

就先去elasticsearch配置文件里面吧bootstrap.memory_lock 内存锁定关掉。

vim /software/elasticsearch-7.0.0/config/elasticsearch.yml
bootstrap.memory_lock改为false

然后重新启动就好了。

到此centos7安装elasticsearch7并集成IK中文分词器的分享就到此结束了。


发表评论

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享