ELK-03:Elasticsearch 集群

配置 ES 集群

ES 可以横向扩展到数百甚至数千个服务器节点,处理 PB 级数据。以分布式设计,减少了后期人工配置成本。

新准备三台虚拟机:192.168.200.101-103,系统:CentOS Linux release 7.7,并创建基础目录:

mkdir -p /data/{logs,packages,services,env-tools}

具体安装方法和单节点一样,事先将以下安装包上传到服务器的目录 /data/packages:

jdk-8u45-linux-x64.tar.gz
elasticsearch-7.7.0-linux-x86_64.tar.gz

所有节点开始安装:

# 系统配置
echo 'vm.max_map_count=655360' > /etc/sysctl.conf
echo 'DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity' >> /etc/systemd/system.conf
sysctl -p

# JDK 环境配置
cd /data/packages
tar -zxf jdk-8u45-linux-x64.tar.gz
mv jdk1.8.0_45/ /data/env-tools/jdk8
echo '# JDK8 ENV
export JAVA_HOME=/data/env-tools/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
java -version

# ES 安装
cd /data/packages
tar -zxf elasticsearch-7.7.0-linux-x86_64.tar.gz 
mv elasticsearch-7.7.0 /data/services/elasticsearch
mkdir /data/services/elasticsearch/data
cd /data/services/elasticsearch/config
ls -l

生成 CA 证书,由于需要集群添加验证,所以需要加入证书,在任意一个节点执行:

# 创建证书目录
mkdir /data/services/elasticsearch/config/certs

# 生成证书
cd /data/services/elasticsearch/bin/
./elasticsearch-certutil ca
./elasticsearch-certutil cert --ca elastic-stack-ca.p12 

# 移动证书
cd /data/services/elasticsearch/
mv *p12 /data/services/elasticsearch/config/certs/

将整个 certs 目录再分发到其它节点上面去,让其它节点也有这个文件!

重启所有节点服务器,然后所有节点配置 ES:/data/services/elasticsearch/config/elasticsearch.yml

# 集群名称,唯一
cluster.name: TEST-ELK-CLUSTER
# 节点名称,唯一
node.name: TEST-ELK-NODE-101
# 数据目录
path.data: /data/services/elasticsearch/data
# 日志目录
path.logs: /data/services/elasticsearch/logs
# 内存锁定
bootstrap.memory_lock: true
# 绑定IP
network.host: 0.0.0.0
# 绑定端口
http.port: 9200
# 集群主机发现
discovery.seed_hosts: ["192.168.200.101", "192.168.200.102", "192.168.200.103"]
# 集群初始化主节点
cluster.initial_master_nodes: ["TEST-ELK-NODE-101", "TEST-ELK-NODE-102", "TEST-ELK-NODE-103"]
# 集群至少有多少个节点才就行数据恢复同步
gateway.recover_after_nodes: 2
# 允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "*"
# 允许用户认证
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

注意不同的节点红色部分配置的不同!这里由于测试,jvm 就不配置了!

所有节点添加 systemd 管理配置和管理用户:

# 添加用户
useradd elk
chown -R elk.elk /data/services/elasticsearch

# 配置 systemd
echo '[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=elk
Group=elk
LimitNOFILE=100000
LimitNPROC=100000
Restart=no
ExecStart=/data/services/elasticsearch/bin/elasticsearch
PrivateTmp=true

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/elasticsearch.service

启动服务:

systemctl daemon-reload
systemctl start elasticsearch.service
systemctl status elasticsearch.service

设置密码:

cd /data/services/elasticsearch/bin
./elasticsearch-setup-passwords interactive

我这里都设置的 123456:

此时访问 3 个节点:

发现都需要刚刚设置的密码,说明集群数据已经同步,可以查看:

curl -u elastic:123456 127.0.0.1:9200/_cat/nodes

结果如图:

也可以安装 head 插件:

# 安装npm
yum -y install nodejs bzip2
npm install -g cnpm

# 下载解压
cd /data/packages/
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip 
mv elasticsearch-head-master/ /data/services/elasticsearch-head

# 安装依赖
cd /data/services/elasticsearch-head/
cnpm install

修改配置:Gruntfile.js,添加红色配置。

options: {
    hostname: '*',
    port: 9100,
    base: '.',
    keepalive: true
}

修改配置:_site/app.js,修改红色配置

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://127.0.0.1:9200";

启动:

npm run start &

访问:

http://192.168.200.101:9100/?auth_user=elastic&auth_password=123456

结果如图:

此时新建测试索引:

可以发现 5 个分片落在了不同节点上面,且每个分片都有一个副本,这也的好处在于,当某个节点断开的时候,能保证数据不丢失。

当集群有两个节点断开的时候:

发现集群已经挂掉了,这个时候查看正常节点的日志发现:

[TEST-ELK-NODE-102] master not discovered or elected yet, an election requires at least 2 nodes

提示我们集群至少需要两个节点,而当前只有一个节点,所以集群异常。

7.0 以前的版本和之后的版本对比:

在 7.0 以前的版本,可以通过:Zen discovery 模块配置 discovery.zen.minimum_master_nodes 来限制集群最小可用的节点数量。

在 7.0 以后的版本,该配置被移除,目的是为了避免错误配置导致数据丢失的问题。

在 7.0 以前的版本,部署在同一台主机上面的多个 ES 能够自动识别并加入集群。

在 7.0 以后的版本,需要在配置文件中配置第一次参加选举的主节点:cluster.initial_master_nodes,这个配置只会在集群第一次启动时需要,配置会被保存到数据文件中。在新增候选主节点时候,也不需要用户手动配置,系统会默认加上,当然也可以在集群一下子断掉很多节点而无法选取主机点的时候手动通过 API 加上。

原名 新名
discovery.zen.ping.unicast.hosts discovery.seed_hosts
discovery.zen.hosts_provider discovery.seed_providers
discovery.zen.no_master_block cluster.no_master_block
原文地址:https://www.cnblogs.com/Dy1an/p/13141059.html