linux搭建单机es及伪集群
先上传linux然后进行解压
tar -zxvf elasticsearch-6.8.2.tar.gz
es从5.0版本开始, 不允许使用root用户启动es, 所以需要创建一个新用户
创建用户
useradd es
目录权限赋予es用户
chown -R es:es /opt/elasticsearch-6.8.2
配置elasticsearch.yml
#es集群名称 cluster.name: my-application #集群节点名称 node.name: node-1 #es数据存放地址(如果注释则es目录默认创建data) path.data: /path/to/data #es日志存放地址(如果注释则默es目录认创建logs) path.logs: /path/to/logs #连接地址(本机ip,但如果外网连接不上可改为0.0.0.0) network.host: 127.0.0.1 #es端口 http.port: 9200
切换es用户
su es
直接在es的用户启动
[es@VM-0-3-centos bin]$ ./elasticsearch Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007e8652330000, 536783683584, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 536783683584 bytes for committing reserved memory. # An error report file with more information is saved as: # logs/hs_err_pid5575.log
出现这个报错表示内存不够
切换root用户并修改配置文件
修改es启动内存大小
vim jvm.options
#默认为1g, 将这两个值修改小一点
-Xms1g -Xmx1g
出现这个报错则需要编辑sysctl.conf
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
vim /etc/sysctl.conf
在末尾加上 vm.max_map_count = 2621441
该配置生效命令
sudo sysctl -p /etc/sysctl.conf
执行命令结果
[root@VM-0-3-centos bin]# sudo sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 net.ipv4.conf.all.promote_secondaries = 1 net.ipv4.conf.default.promote_secondaries = 1 net.ipv6.neigh.default.gc_thresh3 = 4096 net.ipv4.neigh.default.gc_thresh3 = 4096 kernel.softlockup_panic = 1 kernel.sysrq = 1 net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0 kernel.numa_balancing = 0 kernel.shmmax = 68719476736 kernel.printk = 5 vm.max_map_count = 2621441
还有这种启动报错
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
1. 修改limits.conf
vim /etc/security/limits.conf
在文件的最后面加上
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
然后再切换到es用户进行启动
su es
#前台启动
./elasticsearch
#es后台启动
./elasticsearch -d
es伪集群搭建
先将elasticsearch1文件夹复制多份为elasticsearch2, elasticsearch3
[root@hecs-102947 opt]# ls elasticsearch1 elasticsearch2 elasticsearch3 elasticsearch-6.8.2.tar.gz jdk-8u351-linux-x64.tar.gz [root@hecs-102947 opt]#
elasticsearch1的elasticsearch.yml配置
# 集群名称(---------必须一致-------------)
cluster.name: my-elasticsearch
# 节点名称(---------必须不一致-------------)
node.name: node-1
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定0.0.0.0 (---------其他机器访问需要设置为0.0.0.0或者是自己的实际IP-------------)
network.host: 0.0.0.0
# 设置对外服务的http端口es默认9200(---------必须不一致,避免端口冲突-------------)
http.port: 9201
# 设置节点间交互的tcp端口,默认是9300(---------必须不一致-------------)
transport.tcp.port: 9301
# 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
#(---------必须依据实际设置的集群名称配置es7.0以上版本-------------)
#这两es7.0以上才有的配置
cluster.initial_master_nodes, discovery.seed_hosts
#cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
##设置集群自动发现机器ip的集合(--------依据实际设置的集群节点间交互的tcp端口配置,可改为实际IP---------)
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#允许跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
elasticsearch2的elasticsearch.yml配置
# 集群名称(---------必须一致-------------)
cluster.name: my-elasticsearch
# 节点名称(---------必须不一致-------------)
node.name: node-2
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定0.0.0.0 (---------其他机器访问需要设置为0.0.0.0或者是自己的实际IP-------------)
network.host: 0.0.0.0
# 设置对外服务的http端口es默认9200(---------必须不一致,避免端口冲突-------------)
http.port: 9202
# 设置节点间交互的tcp端口,默认是9300(---------必须不一致-------------)
transport.tcp.port: 9302
# 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
#(---------必须依据实际设置的集群名称配置es7.0以上版本-------------)
#cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
##设置集群自动发现机器ip的集合(--------依据实际设置的集群节点间交互的tcp端口配置,可改为实际IP---------)
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#允许跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
elasticsearch3也类似配置好, 别忘了用es用户进行授权目录
chown -R es:es /opt/elasticsearch2
chown -R es:es /opt/elasticsearch3
然后切换es用户依次启动
上面配置也写到了es7版本和6版本的集群配置有些差异, 我在采用7版本集群会报错不知道这个配置 unknown setting [cluster.initial_master_nodes]
验证一下集群是否成功
查看集群健康
curl http://127.0.0.1:9201/_cat/health?v
[root@hecs-102947 bin]# curl http://127.0.0.1:9201/_cat/health?v epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1671628356 13:12:36 my-elasticsearch green 3 3 0 0 0 0 0 0 - 100.0% [root@hecs-102947 bin]#
显示有三个节点, 集群状态为green
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix