三台 CentOS 7 服务器上部署 Elasticsearch (ES) 集群
1. 环境准备
1.1 服务器规划
服务器IP 节点名称 角色(默认混合角色)
192.168.30.100 es-node1 Master + Data
192.168.30.101 es-node2 Master + Data
192.168.30.102 es-node3 Master + Data
1.2 系统配置
所有节点服务器执行以下命令:
防火墙配置规则放行端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
systemctl restart firewalld
禁用SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
修改系统参数
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
修改文件描述符限制
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
关闭Swap(生产环境建议禁用)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. 安装 Elasticsearch
2.1 安装 Java
所有节点安装 OpenJDK 11
sudo yum install -y java-11-openjdk
2.2 安装 Elasticsearch
所有节点执行以下操作:
导入 Elasticsearch GPG 密钥
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
创建 Elasticsearch 仓库文件
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
安装 Elasticsearch 7.x
sudo yum install -y elasticsearch
3. 配置 Elasticsearch 集群
3.1 修改配置文件
编辑 /etc/elasticsearch/elasticsearch.yml,每台服务器需修改以下内容:
(注意:IP和节点名称需按实际修改)
节点1配置(192.168.30.100)
cluster.name: my-es-cluster
node.name: es-node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.30.100", "192.168.30.101", "192.168.30.102"]
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
节点2配置(192.168.30.101)
cluster.name: my-es-cluster
node.name: es-node2
network.host: 0.0.0.0
discovery.seed_hosts: ["192.168.30.100", "192.168.30.101", "192.168.30.102"]
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
节点3配置(192.168.30.102)
cluster.name: my-es-cluster
node.name: es-node3
network.host: 0.0.0.0
discovery.seed_hosts: ["192.168.30.100", "192.168.30.101", "192.168.30.102"]
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
3.2 启动服务
所有节点执行:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
4. 验证集群状态
任意节点执行以下命令检查集群健康状态:
curl -X GET "http://192.168.30.101:9200/_cluster/health?pretty"
预期输出:
{
"cluster_name" : "my-es-cluster",
"status" : "green",
"number_of_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
...
}