elasticsearch7.9 修改指定JDK

错误:future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/nlp/java/jdk1.8.0_162/jre] does not meet this requirement

#这是由于在elastic 到7.0之后 默认要使用JDK11以上 但是我们平时开发使用的一般都是JDK1.8,所以导致启动不成功
#elastic 7.2之后就自带JDK 我们可以再不改名系统本身环境变量的同时,使用elastic自身的JDK
#需要修改elastic的启动文件
vim bin/elasticsearch

#配置为elasticsearch自带jdk
export JAVA_HOME=/usr/local/nlp/elasticsearch-7.9.1/jdk
export PATH=$JAVA_HOME/bin:$PATH

#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/usr/local/nlp/elasticsearch-7.9.1/jdk/bin/java"
else
        JAVA=`which java`
fi

<think>我们正在处理用户关于Elasticsearch 7.9.3版本多机搭建集群的问题。根据用户提供的引用和之前的上下文,用户遇到了集群创建时UUID不一致的问题,并出现了“force is not a recognized option”的错误。此外,用户现在明确要求获取7.9.3版本多机搭建集群的方法。 之前的回答中已经包含了部分解决方案,但用户现在需要的是完整的多机集群搭建方法。因此,我们需要提供一个清晰的、分步骤的Elasticsearch 7.9.3多机集群搭建指南。 注意:用户提到使用Docker(引用[2]和[3])以及非容器环境(引用[4])的尝试,但问题中既有Docker方式也有普通安装方式。这里我们提供两种方法:普通安装和Docker安装。 步骤规划: 一、普通安装(三节点集群) 二、Docker安装(三节点集群) 在开始之前,确保所有机器满足以下条件: 1. 系统环境:Linux(CentOS/Ubuntu等) 2. 网络配置:所有节点间网络互通,开放端口9200(HTTP)和9300(TCP) 3. 时间同步:所有节点时间同步 4. 关闭交换分区:`sudo swapoff -a` 5. 调整文件描述符和线程数限制(参考引用[1]中的重要配置) 以下分两种方式详细说明: 一、普通安装(三节点集群) 1. 下载并安装Elasticsearch 7.9.3 在所有节点执行: ```bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-linux-x86_64.tar.gz tar -xzf elasticsearch-7.9.3-linux-x86_64.tar.gz mv elasticsearch-7.9.3 /usr/share/elasticsearch ``` 2. 创建数据目录和日志目录(所有节点) ```bash mkdir /var/lib/elasticsearch mkdir /var/log/elasticsearch ``` 3. 创建elasticsearch用户并授权(所有节点) ```bash useradd elasticsearch chown -R elasticsearch:elasticsearch /usr/share/elasticsearch chown -R elasticsearch:elasticsearch /var/lib/elasticsearch chown -R elasticsearch:elasticsearch /var/log/elasticsearch ``` 4. 修改系统配置(所有节点) 编辑`/etc/security/limits.conf`,添加: ``` elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 elasticsearch soft nproc 4096 elasticsearch hard nproc 4096 ``` 编辑`/etc/sysctl.conf`,添加: ``` vm.max_map_count=262144 ``` 执行`sysctl -p`使生效。 5. 配置elasticsearch.yml(关键步骤,注意每个节点不同) 节点1(假设主机名为node1,IP为192.168.0.1): ```yaml cluster.name: production node.name: node1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["node1", "node2", "node3"] # 可以是IP或主机名 cluster.initial_master_nodes: ["node1", "node2", "node3"] # 初始主节点 bootstrap.memory_lock: true ``` 节点2(node2, IP=192.168.0.2): ```yaml cluster.name: production node.name: node2 ... # 其他同上,注意node.name改为node2 ``` 节点3(node3, IP=192.168.0.3): ```yaml cluster.name: production node.name: node3 ... # 同上 ``` 6. 配置jvm.options(所有节点) 根据服务器内存大小调整,一般设置堆内存为物理内存的一半,不超过31GB。 ``` -Xms16g -Xmx16g ``` 7. 启动服务(所有节点) ```bash sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch -d ``` 8. 验证集群状态 ```bash curl http://node1:9200/_cluster/health?pretty ``` 二、Docker安装(三节点集群) 1. 创建自定义网络(所有节点) ```bash docker network create elastic-network ``` 2. 为每个节点创建数据目录(所有节点) ```bash mkdir -p /data/elasticsearch/{node1,node2,node3}/{data,logs} chmod -R 777 /data/elasticsearch # 简单授权,生产环境应严格权限 ``` 3. 编写配置文件(每个节点一个配置文件) node1的配置文件(/data/elasticsearch/node1/es1.yml): ```yaml cluster.name: docker-cluster node.name: node1 network.host: 0.0.0.0 discovery.seed_hosts: ["node1", "node2", "node3"] cluster.initial_master_nodes: ["node1", "node2", "node3"] http.port: 9200 transport.port: 9300 bootstrap.memory_lock: true ``` node2(/data/elasticsearch/node2/es2.yml): ```yaml cluster.name: docker-cluster node.name: node2 ... # 同上 ``` node3(/data/elasticsearch/node3/es3.yml): ```yaml cluster.name: docker-cluster node.name: node3 ... # 同上 ``` 4. 启动容器(每个节点执行一个,注意修改对应节点) 在节点1启动node1容器: ```bash docker run -d --name es-node1 --net elastic-network \ -p 9200:9200 -p 9300:9300 \ -v /data/elasticsearch/node1/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/node1/data:/usr/share/elasticsearch/data \ -v /data/elasticsearch/node1/logs:/usr/share/elasticsearch/logs \ -v /etc/localtime:/etc/localtime \ --ulimit memlock=-1:-1 \ --ulimit nofile=65535:65535 \ --ulimit nproc=4096:4096 \ -e "ES_JAVA_OPTS=-Xms16g -Xmx16g" \ elasticsearch:7.9.3 ``` 在节点2启动node2容器(注意修改挂载的配置、数据目录和名称): ```bash docker run -d --name es-node2 --net elastic-network \ -p 9200:9200 -p 9300:9300 \ -v /data/elasticsearch/node2/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/node2/data:/usr/share/elasticsearch/data \ -v /data/elasticsearch/node2/logs:/usr/share/elasticsearch/logs \ ... # 其他参数同上 ``` 节点3类似。 5. 验证集群状态 ```bash curl http://节点1的IP:9200/_cluster/health?pretty ``` 注意:如果节点不在同一内网,需要确保防火墙开放端口,并且使用IP地址而非主机名(或者配置hosts)。 三、常见问题解决方案(针对引用[4]中的连接超时问题) 1. 确保所有节点间9200和9300端口互通(使用telnet或nc测试) 2. 如果跨公网,确保安全组和防火墙规则允许 3. 配置文件中的`discovery.seed_hosts`使用IP地址(如果DNS解析不可靠) 4. 检查节点的系统时间是否同步 四、插件安装(如IK分词器) 对于普通安装: ```bash /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip ``` 对于Docker安装,可以在Dockerfile中构建,或者在容器启动后进入容器执行上述命令,然后重启容器。 最后,根据用户之前的问题,生成相关问题: §§相关问题§§ 1. 如何验证Elasticsearch集群的健康状态? 2. 在Docker中部署Elasticsearch集群有哪些网络配置注意事项? 3. Elasticsearch节点无法加入集群时如何进行故障排查? 4. 如何为Elasticsearch集群安装和配置IK分词器? 注意:在回答中,我们引用了用户提供的引用[1]-[4],在适当位置添加引用标识。 </think>### Elasticsearch 7.9.3 多机集群搭建指南 #### 一、基础环境准备(所有节点执行) 1. **系统配置优化** ```bash # 调整虚拟内存限制 echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p # 调整文件描述符限制 echo "elasticsearch - nofile 65535" >> /etc/security/limits.conf ``` 2. **安装依赖环境** ```bash # Ubuntu/Debian apt update && apt install openjdk-11-jdk -y # CentOS/RHEL yum install java-11-openjdk -y ``` #### 二、集群节点配置(关键步骤) ```yaml:elasticsearch.yml # 公共配置(所有节点相同) cluster.name: production-cluster # 集群名称必须一致 network.host: 0.0.0.0 http.port: 9200 transport.port: 9300 discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"] # 所有节点IP cluster.initial_master_nodes: ["node1", "node2", "node3"] # 初始主节点名称 # 节点专属配置(每个节点不同) node.name: node1 # 节点唯一标识 node.roles: [master, data] # 节点角色 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch ``` #### 三、节点启动流程 1. **启动初始主节点(node1)** ```bash # 首次启动需指定初始主节点 bin/elasticsearch -d -Ecluster.initial_master_nodes=node1,node2,node3 ``` 2. **加入其他节点** ```bash # node2和node3执行(无需initial_master_nodes参数) bin/elasticsearch -d ``` #### 四、跨服务器网络配置要点 1. **防火墙规则(所有节点)** ```bash firewall-cmd --permanent --add-port=9200/tcp # HTTP API firewall-cmd --permanent --add-port=9300/tcp # 节点通信 firewall-cmd --reload ``` 2. **主机名解析(/etc/hosts)** ``` 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3 ``` #### 五、集群验证命令 ```bash # 检查节点状态 curl -XGET &#39;http://localhost:9200/_cat/nodes?v&#39; # 验证集群健康 curl -XGET &#39;http://localhost:9200/_cluster/health?pretty&#39; ``` 预期输出: ```json { "cluster_name" : "production-cluster", "status" : "green", "number_of_nodes" : 3 } ``` #### 六、Docker集群部署方案 ```bash # Node1容器启动 docker run -d --name es-node1 \ -p 9200:9200 -p 9300:9300 \ -v node1-data:/usr/share/elasticsearch/data \ -v ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ elasticsearch:7.9.3 # Node2容器启动(修改端口映射) docker run -d --name es-node2 \ -p 9201:9200 -p 9301:9300 \ -v node2-data:/usr/share/elasticsearch/data \ -v ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ elasticsearch:7.9.3 ``` > 注意:每个节点需使用独立数据卷,配置文件中`node.name`需不同[^2][^3] #### 七、常见故障处理 1. **节点无法加入集群** - 检查防火墙规则和端口开放状态 - 验证所有节点`cluster.name`是否完全相同 - 删除数据目录重建集群:`rm -rf /var/lib/elasticsearch/nodes/*` 2. **跨云厂商服务器连接问题** ```yaml # 添加传输协议配置 transport.profiles.default.port: 9300-9400 transport.publish_port: 9300 ``` > **关键提示**: > - 集群首次启动后,**移除**`cluster.initial_master_nodes`配置项[^1] > - 生产环境建议配置`bootstrap.memory_lock: true`防止内存交换 > - 跨公网部署需启用安全配置(TLS加密和用户认证)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值