配置 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 |