Linux 非root用户部署elasticsearch 7.17.23和ik分词器

文章目录


下载安装包

首先,我们将Elasticsearch安装包和IK分词器插件下载到服务器上。下载路径为/home/cms/bag/es

bash 复制代码
cd /home/cms
mkdir bag/es -p
cd bag/es
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.23-linux-x86_64.tar.gz
wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.23.zip

环境

在实际部署环境中,我们有三台服务器,分别为masternode01node02。IP地址如下:

IP 主机名
192.168.10.1 master
192.168.10.2 node01
192.168.10.3 node02

安装JDK(三台)

Elasticsearch 依赖于 Java 环境,因此需要在所有节点上安装 JDK。安装后需配置环境变量,以确保 Java 能够正确运行。

bash 复制代码
cd /home/cms/bag/es
tar xf jdk.tar.gz
cd /home/cms/app
mv ../bag/es/jdk1.8.0_221 ./jdk
# 添加环境变量
[cms@localhost app]$ cat /home/cms/.bashrc 
...
export JAVA_HOME=/home/cms/app/jdk
export PATH=$JAVA_HOME/bin:$PATH
[cms@localhost app]$ source /home/cms/.bashrc
# 验证 Java 版本
[cms@localhost app]$ java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
[cms@localhost app]$ 

注解

在这里,你可以使用tar命令解压缩JDK压缩包,并将其移动到合适的位置。接着,编辑.bashrc文件,设置Java环境变量。确保使用source命令让新的环境变量生效,并通过java -version验证是否安装成功。

安装supervisor(三台)

supervisor 是一个进程管理工具,可以确保 Elasticsearch 在系统重启后自动启动,并在异常退出时自动重启。

bash 复制代码
sudo yum install -y supervisor
sudo sed -i  's#minfds=1024#minfds=65535#g' /etc/supervisord.conf
sudo systemctl enable supervisord
sudo systemctl start supervisord 
sudo systemctl status supervisord

注解

这里我们使用yum安装supervisor,并将默认的文件描述符限制从1024修改为65535,以适应高并发场景。systemctl 命令用于启动和启用supervisord,确保它开机自启并立即启动。

环境初始化(三台)

为保证高并发处理性能,我们需要调整系统的文件描述符和进程数限制。通过编辑/etc/security/limits.conf文件,可以增加这些系统资源的限制。

bash 复制代码
[cms@master supervisor]$ sudo vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 131072
* soft nproc 65535
* hard nproc 65535

同样,为了优化内核参数,我们修改了/etc/sysctl.conf文件。

bash 复制代码
# 控制系统在使用SWAP的频率,0表示除非内存不足,否则不使用SWAP
vm.swappiness = 0

# 设置ARP邻居表项超时的时长为120秒
net.ipv4.neigh.default.gc_stale_time = 120

# 禁用对所有接口的源地址验证
net.ipv4.conf.all.rp_filter = 0

# 禁用默认接口的源地址验证
net.ipv4.conf.default.rp_filter = 0

# 控制ARP报文的发送行为。值为2时,系统更倾向于在同一网络中发送ARP请求
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2

# 控制TCP连接的TIME_WAIT状态槽的最大数量
net.ipv4.tcp_max_tw_buckets = 5000

# 启用TCP SYN Cookies,用于防御SYN洪泛攻击
net.ipv4.tcp_syncookies = 1

# 设置TCP SYN请求的最大队列长度,避免TCP SYN洪泛攻击
net.ipv4.tcp_max_syn_backlog = 1024

# 设置在重新发送TCP SYNACK包之前的重试次数,默认是5,这里设置为2以加快失败连接的检测
net.ipv4.tcp_synack_retries = 2

# 禁用回环接口的IPv6支持
net.ipv6.conf.lo.disable_ipv6 = 1

# 启用系统请求按键功能,允许执行紧急命令
kernel.sysrq = 1

# 设置进程能够映射的最大内存区域数目,通常需要增加该值以支持大型应用
vm.max_map_count = 262144

别忘了使用sudo sysctl -p命令使配置生效。

注解

这些配置项调整了文件描述符、进程限制以及内核的一些重要参数,适用于需要处理大量并发连接的场景,尤其是Elasticsearch这种面向大数据的搜索引擎。vm.swappiness 设为 0 可以减少系统使用SWAP的频率,从而提升性能。

部署 Elasticsearch(三台)

解压

在每台服务器上,我们将下载好的Elasticsearch安装包进行解压,并将其放置到指定的应用目录中。

bash 复制代码
[cms@node01 es]$ tar xf elasticsearch-7.17.23-linux-x86_64.tar.gz 
[cms@node01 es]$ cd ../../app/
[cms@node01 app]$ mv ../bag/es/elasticsearch-7.17.23 ./elasticsearch

配置 elasticsearch.yml

在每台服务器上,编辑elasticsearch.yml文件。这里我们主要修改了network.hostdiscovery.seed_hostscluster.initial_master_nodes等参数,以便配置集群环境。

  • 192.168.10.1(master)
  • 192.168.10.2(node01)
  • 192.168.10.3(node02)

192.168.0.1

bash 复制代码
cluster.name: ela
# Elasticsearch集群的名字,所有节点必须使用相同的集群名称才能加入集群。

node.name: es01-al
# 节点的名字,便于识别该节点。

node.master: true
# 设置该节点是否可以作为集群的主节点(Master Node)。

node.data: true
# 设置该节点是否用于存储数据。如果是数据节点,该值应为true。

path.data: /home/cms/app/elasticsearch/data/data
# 指定Elasticsearch存储数据的路径。

path.logs: /home/cms/app/elasticsearch/logs/
# 指定Elasticsearch存储日志文件的路径。

bootstrap.memory_lock: false
# 控制是否锁定内存,避免内存被交换到磁盘上。设置为true可以提高性能,但需要配置系统以允许锁定内存。

network.host: 192.168.10.1
# Elasticsearch监听的网络地址,通常是服务器的IP地址。

network.tcp.no_delay: true
# 启用TCP_NODELAY选项,禁用TCP的Nagle算法,以减少延迟。

network.tcp.keep_alive: true
# 启用TCP的keep-alive选项,保持长时间没有通信的连接活跃。

network.tcp.reuse_address: true
# 启用SO_REUSEADDR选项,允许重新绑定地址,通常在服务器重启时使用。

network.tcp.send_buffer_size: 128mb
# 设置发送TCP数据的缓冲区大小。

network.tcp.receive_buffer_size: 128mb
# 设置接收TCP数据的缓冲区大小。

transport.tcp.port: 9300
# 集群间通信使用的TCP端口,通常默认使用9300。

transport.tcp.compress: true
# 启用集群内部通信的压缩功能,减少带宽占用。

http.max_content_length: 200mb
# 设置通过HTTP传输的最大内容长度,通常用于限制最大请求或响应的大小。

http.cors.enabled: true
# 启用跨域资源共享(CORS),允许浏览器跨域请求Elasticsearch。

http.cors.allow-origin: "*"
# 允许的跨域请求源,"*"表示允许所有来源。

http.port: 9200
# Elasticsearch HTTP服务监听的端口,通常默认使用9200。

discovery.seed_hosts: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
# 用于发现集群中其他节点的地址,Elasticsearch使用这些地址启动时加入集群。

cluster.initial_master_nodes: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
# 在集群首次启动时,设置可以作为候选主节点的节点列表,确保能正确选举出主节点。

cluster.fault_detection.leader_check.interval: 15s
# 定义主节点检测其他节点状态的间隔时间。设置为15秒。

discovery.cluster_formation_warning_timeout: 30s
# 当集群形成过程中遇到问题时,触发警告的超时时间,设置为30秒。

cluster.join.timeout: 30s
# 设置节点加入集群的最大超时时间,超时后认为加入失败。

cluster.publish.timeout: 90s
# 定义主节点在选举结果、集群状态变更等信息发布时的超时时间,设置为90秒。

cluster.routing.allocation.cluster_concurrent_rebalance: 32
# 设置集群允许同时进行的分片重新平衡的最大数量,32表示允许并发重新平衡32个分片。

cluster.routing.allocation.node_concurrent_recoveries: 32
# 定义每个节点允许同时进行的数据恢复操作的最大数量。

cluster.routing.allocation.node_initial_primaries_recoveries: 32
# 定义节点启动时允许并发恢复的初始主分片的数量,通常用于加速启动时的恢复过程。

192.168.10.2

bash 复制代码
cluster.name: ela
node.name: es02-al
node.master: true
node.data: true
path.data: /home/cms/app/elasticsearch/data/data
path.logs: /home/cms/app/elasticsearch/logs/
bootstrap.memory_lock: false
network.host: 192.168.10.2
network.tcp.no_delay: true
network.tcp.keep_alive: true
network.tcp.reuse_address: true
network.tcp.send_buffer_size: 128mb
network.tcp.receive_buffer_size: 128mb
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 200mb
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
discovery.seed_hosts: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
cluster.initial_master_nodes: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
cluster.fault_detection.leader_check.interval: 15s
discovery.cluster_formation_warning_timeout: 30s
cluster.join.timeout: 30s
cluster.publish.timeout: 90s
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32

192.168.10.3

bash 复制代码
cluster.name: ela
node.name: es03-al
node.master: true
node.data: true
path.data: /home/cms/app/elasticsearch/data/data
path.logs: /home/cms/app/elasticsearch/logs/
bootstrap.memory_lock: false
network.host: 192.168.10.3
network.tcp.no_delay: true
network.tcp.keep_alive: true
network.tcp.reuse_address: true
network.tcp.send_buffer_size: 128mb
network.tcp.receive_buffer_size: 128mb
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 200mb
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
discovery.seed_hosts: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
cluster.initial_master_nodes: ["192.168.10.1:9300", "192.168.10.2:9300", "192.168.10.3:9300"]
cluster.fault_detection.leader_check.interval: 15s
discovery.cluster_formation_warning_timeout: 30s
cluster.join.timeout: 30s
cluster.publish.timeout: 90s
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32

每台服务器的配置略有不同,尤其是在network.hostnode.name部分。这些参数确保了每个节点在集群中有唯一的标识和正确的网络绑定。

注解

elasticsearch.yml 是 Elasticsearch 的核心配置文件,涵盖了网络、数据路径、集群配置等多方面内容。集群的正确配置依赖于这些参数,因此需确保每个节点的配置项与集群的需求一致。

配置 Supervisor 管理 Elasticsearch

我们通过在/etc/supervisord.d/目录下创建一个新的配置文件来将 Elasticsearch 进程纳入 supervisor 的管理中。这样可以确保它在任何时候都能自动启动并稳定运行。

bash 复制代码
[program:elasticsearch]
command=/home/cms/app/elasticsearch/bin/elasticsearch
user = cms
autostart=true
autorestart=true
stdout_logfile=/home/cms/app/elasticsearch/logs/appspider.log
stderr_logfile=/home/cms/app/elasticsearch/logs/appspider.log
logfile_maxbytes=50MB 
logfile_backups=10
bash 复制代码
[cms@master elasticsearch]$ sudo supervisorctl update
[cms@master elasticsearch]$ sudo supervisorctl status
elasticsearch                    RUNNING   pid 5914, uptime 0:00:06
[cms@master elasticsearch]$ 

通过 supervisorctl updatesupervisorctl status 可以更新配置并检查进程状态。

注解

通过这种方式,我们无需手动管理 Elasticsearch 的启动和停止,supervisor 可以自动完成这些操作。同时,日志文件也会按照配置定期轮转,防止磁盘空间被耗尽。

部署 IK 分词器(三台)

IK 分词器是中文分词的一个常用插件,特别适用于 Elasticsearch 中的中文全文搜索。

bash 复制代码
cd /home/cms/bag/es
mkdir ik
unzip elasticsearch-analysis-ik-7.17.23.zip -d ik
cd ik
chmod +x ./*
cd /home/cms/app/elasticsearch/plugins/
mv /home/cms/bag/es/ik ./
sudo supervisorctl restart elasticsearch

测试 IK 分词器

bash 复制代码
curl -X POST "192.168.10.1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"中华人民"}'
curl -X POST "192.168.10.2:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"中华人民"}'
curl -X POST "192.168.10.3:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"中华人民"}'
bash 复制代码
[cms@master logs]$ curl -X POST "192.168.10.1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"中华人民"}'
{
  "tokens" : [
    {
      "token" : "中华人民",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "中华",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "华人",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "人民",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}
[cms@master logs]$

注解

我们通过curl命令测试IK分词器的效果。ik_max_word 模式会将文本最大化分词,例如"中华人民"被分为"中华"、"华人"、"人民"等。这个功能非常适合需要精准检索的应用场景。

相关推荐
是阿建吖!3 分钟前
【Linux】进程状态
linux·运维
Mephisto.java20 分钟前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe25 分钟前
Elasticsearch 分词器
python·elasticsearch
明明跟你说过32 分钟前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
小马爱打代码33 分钟前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
Komorebi.py2 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
内核程序员kevin5 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
朝九晚五ฺ9 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream9 小时前
Linux的桌面
linux