欢迎光临
我们一直在努力

6-监控:ES8和zookeeper

今日内容预告:

  • ES8集群部署
  • Kibana8版本部署
  • ES8和ES7使用区别说明
  • zookeeper集群部署
  • zookeeper的基本使用

ES8单点部署实战

参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/8.18/deb.html

1. 准备机器

硬件: 2c,4G,50GB+
IP地址及主机名

  • 10.0.0.94 elk94
  • 10.0.0.95 elk95
  • 10.0.0.96 elk96

2. 下载软件包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.18.6-amd64.deb

3. 安装ES8

[root@elk94 ~]# ll elasticsearch-8.18.6-amd64.deb
-rw-r–r– 1 root root 648042706 Sep 3 09:01 elasticsearch-8.18.6-amd64.deb
[root@elk94 ~]#
[root@elk94 ~]# ll -h elasticsearch-8.18.6-amd64.deb
-rw-r–r– 1 root root 619M Sep 3 09:01 elasticsearch-8.18.6-amd64.deb
[root@elk94 ~]#
[root@elk94 ~]# dpkg -i elasticsearch-8.18.6-amd64.deb

安全文件如下请记住好密码

————————— Security autoconfiguration information ——————————

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : nw*OxQBN+y8wdCVXkb82(密码)

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node –enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

————————————————————————————————-
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service

4. 启动ES服务

[root@elk94 ~]# systemctl enable –now elasticsearch.service
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /lib/systemd/system/elasticsearch.service.

[root@elk94 ~]# ss -ntl | egrep "9200|9300"
LISTEN 0 4096 [::ffff:127.0.0.1]:9300 *:*
LISTEN 0 4096 [::1]:9300 [::]:*
LISTEN 0 4096 *:9200 *:*

5. 访问测试 —默认是https协议

[root@elk96 ~]# curl -k https://10.0.0.94:9200 -u "elastic:nw*OxQBN+y8wdCVXkb82"
{
"name" : "elk94",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IU9FZcg1TCGKM-iMSEkRiQ",
"version" : {
"number" : "8.18.6",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "970b6c3ae853753ae66a12c1208c85a3c9728d92",
"build_date" : "2025-08-25T22:05:47.180118464Z",
"build_snapshot" : false,
"lucene_version" : "9.12.1",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:mUzq0DrqkgYCbOFmeLPu"
127.0.0.1 13 97 23 0.54 0.30 0.11 cdfhilmrstw * elk94

ES8集群部署实战

1. 停止ES单点服务

[root@elk94 ~]# systemctl disable –now elasticsearch.service

[root@elk94 ~]# ss -ntl | egrep "9200|9300"

[root@elk94 ~]# rm -rf /var/lib/elasticsearch/*

2. 拷贝软件包到其他节点

[root@elk94 ~]# scp elasticsearch-8.18.6-amd64.deb 10.0.0.95:~
[root@elk94 ~]# scp elasticsearch-8.18.6-amd64.deb 10.0.0.96:~

3. 其他节点安装ES8软件包

[root@elk95 ~]# dpkg -i elasticsearch-8.18.6-amd64.deb

[root@elk96 ~]# dpkg -i elasticsearch-8.18.6-amd64.deb

4. 修改ES集群的配置文件【此处可以尝试将discovery.seed_hosts设置为集群地址列表,可能会省略后续的10-11的步骤。】

[root@elk94 ~]# egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
cat > /etc/elasticsearch/elasticsearch.yml << 'EOF'
cluster.name: oldboyedu-linux99-es8-cluster
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.94"]
cluster.initial_master_nodes: ["10.0.0.94"]
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
EOF

5. 启动ES服务

[root@elk94 ~]# systemctl enable –now elasticsearch.service
[root@elk94 ~]# ss -ntl | egrep "9200|9300"
LISTEN 0 4096 *:9300 *:*
LISTEN 0 4096 *:9200 *:*

6. 测试验证

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:nw*OxQBN+y8wdCVXkb82"
10.0.0.94 58 95 34 0.32 0.17 0.11 cdfhilmrstw * elk94

7. 生成token

[root@elk94 ~]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node # ES8采用该脚本生成令牌
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4wLjk0OjkyMDAiXSwiZmdyIjoiZmI1MTY3MjlmYzEyOWQ3ZTAzYzI0ZjRiOGU0NDM2YmJiZTkxMzdhMTk0MmY0MzU1NjAzMWI5MWMyNjI3YzBhYyIsImtleSI6IkVzcy1ENWtCaFJnRDVSU0NhenN4OkFNa1BpMmJpMlAwTjFoR0ZYdTY2R0EifQ==

8. 新加入节点使用token注册【被加入节点使用令牌加入,目的是为了拷贝配置文件。】

语法格式:

/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node –enrollment-token <TOKEN>

[root@elk95 ~]# /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node –enrollment-token eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4wLjk0OjkyMDAiXSwiZmdyIjoiZmI1MTY3MjlmYzEyOWQ3ZTAzYzI0ZjRiOGU0NDM2YmJiZTkxMzdhMTk0MmY0MzU1NjAzMWI5MWMyNjI3YzBhYyIsImtleSI6IkVzcy1ENWtCaFJnRDVSU0NhenN4OkFNa1BpMmJpMlAwTjFoR0ZYdTY2R0EifQ==

This node will be reconfigured to join an existing cluster, using the enrollment token that you provided.
This operation will overwrite the existing configuration. Specifically:
– Security auto configuration will be removed from elasticsearch.yml
– The [certs] config directory will be removed
– Security auto configuration related secure settings will be removed from the elasticsearch.keystore
Do you want to continue with the reconfiguration process [y/N]y

[root@elk96 ~]# /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node –enrollment-token eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4wLjk0OjkyMDAiXSwiZmdyIjoiYmIyZjUyYTU1ZDNiOTU2ZmQ4NjcwZjNmNTBlNmFjNGJhNzE0MjJlY2YwMGEzNzM2NWYzZDlhMTUzZDUyMzU4NyIsImtleSI6IkhVa2xEWmtCUmsteUt3dldNcUdaOlR4YTNBTDZXYTR2dGZJa1NfVG1iNncifQ==

This node will be reconfigured to join an existing cluster, using the enrollment token that you provided.
This operation will overwrite the existing configuration. Specifically:
– Security auto configuration will be removed from elasticsearch.yml
– The [certs] config directory will be removed
– Security auto configuration related secure settings will be removed from the elasticsearch.keystore
Do you want to continue with the reconfiguration process [y/N]y

9. 经过测试发现集群并没有加入成功

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:nw*OxQBN+y8wdCVXkb82"
10.0.0.94 11 95 3 0.02 0.09 0.08 cdfhilmrstw * elk94

10. 手动修改ES集群配置文件

[root@elk94 ~]# egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
cluster.name: oldboyedu-linux99-es8-cluster
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.94","10.0.0.95","10.0.0.96"]
cluster.initial_master_nodes: ["10.0.0.94","10.0.0.95","10.0.0.96"]
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12

[root@elk94 ~]# scp /etc/elasticsearch/elasticsearch.yml 10.0.0.95:/etc/elasticsearch/

[root@elk94 ~]# scp /etc/elasticsearch/elasticsearch.yml 10.0.0.96:/etc/elasticsearch/

11. 重启ES集群

[root@elk94 ~]# systemctl restart elasticsearch.service

[root@elk95 ~]# systemctl restart elasticsearch.service

[root@elk96 ~]# systemctl restart elasticsearch.service

12. 再次测试验证

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:nw*OxQBN+y8wdCVXkb82"
10.0.0.95 40 97 77 0.61 0.23 0.09 cdfhilmrstw – elk95
10.0.0.96 39 96 79 1.00 0.50 0.20 cdfhilmrstw – elk96
10.0.0.94 44 95 71 0.70 0.22 0.12 cdfhilmrstw * elk94
[root@elk96 ~]#

可能会遇到的错误:

Q1: ERROR: Failed to determine the health of the cluster., with exit code 69
root@elk81:~# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node

ERROR: Failed to determine the health of the cluster., with exit code 69
root@elk81:~#

问题分析:
ES服务没有启动。

解决方案:
先启动服务。

彩蛋: 卸载ES服务

systemctl disable –now elasticsearch.service
dpkg -P elasticsearch
rm -rf /var/lib/elasticsearch/*

ES8重置管理员elatic密码

1. 重置密码

[root@elk94 ~]# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y # 手动输入字母'y'

Password for the [elastic] user successfully reset.
New value: aN7UINMzk1F_Hb-Nx9z2 # 这是新密码
[root@elk94 ~]#

2. 用旧密码将无法访问

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:mUzq0DrqkgYCbOFmeLPu"
{"error":{"root_cause":[{"type":"security_exception","reason":"unable to authenticate user [elastic] for REST request [/_cat/nodes]","header":{"WWW-Authenticate":["Basic realm=\\"security\\", charset=\\"UTF-8\\"","Bearer realm=\\"security\\"","ApiKey"]}}],"type":"security_exception","reason":"unable to authenticate user [elastic] for REST request [/_cat/nodes]","header":{"WWW-Authenticate":["Basic realm=\\"security\\", charset=\\"UTF-8\\"","Bearer realm=\\"security\\"","ApiKey"]}},"status":401}
[root@elk96 ~]#

3. 使用新密码是可以正常访问的

[root@elk96 ~]# curl -k https://10.0.0.94:9200/_cat/nodes -u "elastic:aN7UINMzk1F_Hb-Nx9z2"
10.0.0.95 23 97 0 0.00 0.01 0.00 cdfhilmrstw – elk95
10.0.0.96 20 97 0 0.00 0.00 0.00 cdfhilmrstw – elk96
10.0.0.94 32 95 0 0.20 0.06 0.02 cdfhilmrstw * elk94

部署kibana对接ES8集群

1. 下载kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.18.6-amd64.deb

2. 安装kibana

[root@elk94 ~]# dpkg -i kibana-8.18.6-amd64.deb

3. 修改kibana的配置文件

[root@elk94 ~]# vim /etc/kibana/kibana.yml
...
server.host: "0.0.0.0"
i18n.locale: "zh-CN"

4. 启动kibana

[root@elk94 ~]# systemctl enable –now kibana.service
Created symlink /etc/systemd/system/multi-user.target.wants/kibana.service → /lib/systemd/system/kibana.service.
[root@elk94 ~]#
[root@elk94 ~]# ss -ntl | grep 5601
LISTEN 0 511 0.0.0.0:5601 0.0.0.0:*
[root@elk94 ~]#

5. 生成kiban专用的token

[root@elk94 ~]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4wLjk0OjkyMDAiXSwiZmdyIjoiZmI1MTY3MjlmYzEyOWQ3ZTAzYzI0ZjRiOGU0NDM2YmJiZTkxMzdhMTk0MmY0MzU1NjAzMWI5MWMyNjI3YzBhYyIsImtleSI6ImxTQk1ENWtCTy16Vmd3QTg0ZEdoOm5MMC1BVlh1WHp1V29CMktXOGRDR2cifQ==

6. 访问kibana的webUI

http://10.0.0.94:5601/

基于token进行认证配置即可。

7. kiban服务器获取校验码

[root@elk94 ~]# /usr/share/kibana/bin/kibana-verification-code
Your verification code is: 809 657

8. 基于校验码登录

9. 修改管理员密码

建议修改elastic密码为123456

filebeat对接ES8实战

参考链接:
https://www.elastic.co/guide/en/beats/filebeat/8.18/configuration-ssl.html#server-verification-mode

1. 下载filebeat

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.18.6-amd64.deb

2. 安装filebeat

[root@elk95 ~]# dpkg -i filebeat-8.18.6-amd64.deb

3. 去kibana中创建api-key

比如我创建的是"vCBWD5kBO-zVgwA8f9Gl:wHdagIUCHmYkbDU1liZM_A"

4. 编写filebeat的配置文件

[root@elk95 ~]#
cat > /etc/filebeat/01-tcp-to-es.yaml <<EOF
filebeat.inputs:
– type: tcp
host: "0.0.0.0:9000"

output.elasticsearch:
hosts:
– https://10.0.0.94:9200
– https://10.0.0.95:9200
– https://10.0.0.96:9200
api_key: "vCBWD5kBO-zVgwA8f9Gl:wHdagIUCHmYkbDU1liZM_A"
index: oldboyedu-linux99-es8-apikey-001
# 跳过客户端证书校验。
ssl.verification_mode: none

setup.ilm.enabled: false
setup.template.name: "oldboyedu-es"
setup.template.pattern: "oldboyedu-es-*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 0
EOF

5. 启动filebeat实例

[root@elk95 ~]# filebeat -e -c /etc/filebeat/01-tcp-to-es.yaml

6. 发送测试数据

[root@elk94 ~]# echo www.oldboyedu.com | nc 10.0.0.95 9000

7. kibana查看数据

创建数据视图–就是之前es7的索引模式

logstash对接ES8集群

1. 下载logstash

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.18.6-amd64.deb

2. 安装logstash

[root@elk96 ~]# dpkg -i logstash-8.18.6-amd64.deb

3. 创建符号链接

[root@elk96 ~]# ln -svf /usr/share/logstash/bin/logstash /usr/local/bin/
'/usr/local/bin/logstash'> '/usr/share/logstash/bin/logstash'

4. 创建api-key

略,见视频。
建议基于图形化创建,后期可以考虑使用API创建。
IQh3DZkBKFqGqrK_9KrL:fBhREUq0o9VWYbBf-2hnlg

5. 编写Logstash配置文件

[root@elk96 ~]# cat > /etc/logstash/conf.d/01-tcp-to-es.yaml <<EOF
input {
tcp {
port => 8888
}
}

output {
elasticsearch {
hosts => ["https://10.0.0.94:9200","https://10.0.0.95:9200","https://10.0.0.96:9200"]
index => "oldboyedu-linux99-es-apikey-xixi"
api_key => "vCBWD5kBO-zVgwA8f9Gl:wHdagIUCHmYkbDU1liZM_A"
ssl => true
ssl_certificate_verification => false
}
}
EOF

6. 启动Logstash

[root@elk96 ~]# logstash -f /etc/logstash/conf.d/01-tcp-to-es.yaml

7. 发送测试数据

[root@elk95 ~]# echo "学IT来老男孩,月薪过万不是梦~" | nc 10.0.0.96 8888

8. kibana查看数据

查看数据—创建视图

ES8和ES7对比(面试题)

  • ES8默认启用了https,支持认证等功能;
  • ES8新增’elasticsearch-reset-password’脚本,对于elastic用户重置密码更加简单;
  • ES8新增’elasticsearch-create-enrollment-token’脚本,可以为组件创建token信息,比如kibana,node组件;
  • ES8新增kibana新增’kibana-verification-code’用于生成校验码。
  • kibana支持更多的语言: English (default) “en”, Chinese “zh-CN”, Japanese “ja-JP”, French “fr-FR”
  • kibana的webUI更加丰富, 支持AI助手,手动创建索引等功能;
  • kibana不用创建索引模式就可以直接查看数据, 系统会生成一个临时的视图以供查看;
  • ES8集群部署时, 需要借助’elasticsearch-reconfigure-node’脚本来加入已存在的集群,默认就是单master节点的配置;
  • ELFK架构课堂练习:

    • 使用Filebeat将94-96节点的所有日志文件推送到logstash

      • /var/log/syslog
      • /var/log/auth.log
    • logstash基于api-key的方式写入数据到ES集群,写入索引要求如下

      • oldboyedu-linux99-ketanglianxi-syslog
      • oldboyedu-linux99-ketanglianxi-auth
    • 使用kibana创建2个用户,分别对应的是xixi,haha,要求如下:

      • xixi用户可以看到’oldboyedu-linux99-ketanglianxi-syslog’数据;
      • haha用户可以看到’oldboyedu-linux99-ketanglianxi-auth’数据;

    参考样例:

    1. 编写Logstash配置文件:创建apikey加上权限限制—分别对应不同的索引

    [root@elk96 ~]#
    cat /etc/logstash/conf.d/02-casedemo-elfk.conf
    input {
    beats {
    port => 6666
    type => auth
    }
    beats {
    port => 7777
    type => syslog
    }
    }

    output {
    if [type] == "auth" {
    elasticsearch {
    hosts => ["https://10.0.0.94:9200","https://10.0.0.95:9200","https://10.0.0.96:9200"]
    index => "oldboyedu-linux99-ketanglianxi-auth"
    api_key => "vCBWD5kBO-zVgwA8f9Gl:wHdagIUCHmYkbDU1liZM_A"
    ssl => true
    ssl_certificate_verification => false
    }
    } else {
    elasticsearch {
    hosts => ["https://10.0.0.94:9200","https://10.0.0.95:9200","https://10.0.0.96:9200"]
    index => "oldboyedu-linux99-ketanglianxi-syslog"
    api_key => "vCBWD5kBO-zVgwA8f9Gl:wHdagIUCHmYkbDU1liZM_A"
    ssl => true
    ssl_certificate_verification => false
    }
    }
    }

    2. 启动logstash

    [root@elk96 ~]# logstash -rf /etc/logstash/conf.d/02-casedemo-elfk.conf

    3. 编写Filebeat配置文件

    [root@elk95 ~]# cat /etc/filebeat/02-auth-to-logstash.yaml
    filebeat.inputs:
    – type: filestream
    paths:
    – /var/log/auth.log

    output.logstash:
    hosts: ["10.0.0.96:6666"]

    [root@elk95 ~]# cat /etc/filebeat/03-syslog-to-logstash.yaml
    filebeat.inputs:
    – type: filestream
    paths:
    – /var/log/syslog

    output.logstash:
    hosts: ["10.0.0.96:7777"]

    4. 启动Filebeat多实例

    [root@elk95 ~]# filebeat -e -c /etc/filebeat/02-auth-to-logstash.yaml
    [root@elk95 ~]# filebeat -e -c /etc/filebeat/03-syslog-to-logstash.yaml –path.data=/tmp/syslog

    5. kibana查看数据

    略,见视频。

    6: 使用kibana创建2个用户,分别对应的是xixi,haha,要求如下:(昨天数据)

    • xixi用户可以看到’oldboyedu-linux99-ketanglianxi-syslog’数据;
    • haha用户可以看到’oldboyedu-linux99-ketanglianxi-auth’数据;

    zookeeper单点部署

    1. 什么是zookeeper

    ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。
    所有这些类型的服务都以某种形式被分布式应用程序使用。(理解小型数据库,存储配置信息)
    主要的应用场景: Kafka,HDFS HA,YARN HA,HBase,Solr,…
    官网地址:
    https://zookeeper.apache.org/

    2. 下载zookeeper

    wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz

    3. 解压软件包

    [root@elk91 ~]# tar xf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local/

    4. 配置环境变量

    [root@elk91 ~]# cat /etc/profile.d/zk.sh
    #!/bin/bash
    export ZK_HOME=/usr/local/apache-zookeeper-3.8.4-bin
    export JAVA_HOME=/usr/share/elasticsearch/jdk
    export PATH=$PATH:${ZK_HOME}/bin:${JAVA_HOME}/bin

    [root@elk91 ~]# source /etc/profile.d/zk.sh

    [root@elk91 ~]# java –version
    openjdk 22.0.2 2024-07-16
    OpenJDK Runtime Environment (build 22.0.2+9-70)
    OpenJDK 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)

    5. 准备配置文件

    [root@elk91 ~]# cp /usr/local/apache-zookeeper-3.8.4-bin/conf/zoo{_sample,}.cfg

    [root@elk91 ~]# ll /usr/local/apache-zookeeper-3.8.4-bin/conf/zoo*
    -rw-r–r– 1 root root 1183 Jun 26 09:07 /usr/local/apache-zookeeper-3.8.4-bin/conf/zoo.cfg
    -rw-r–r– 1 yinzhengjie yinzhengjie 1183 Feb 13 2024 /usr/local/apache-zookeeper-3.8.4-bin/conf/zoo_sample.cfg

    6. 启动zookeeper服务

    [root@elk91 ~]# zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED

    7. 查看zookeeper状态

    [root@elk91 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: standalone

    8. 登录测试

    [root@elk91 ~]# zkCli.sh -server 10.0.0.91:2181
    ...
    [zk: 10.0.0.91:2181(CONNECTED) 0] ls /
    [zookeeper]
    [zk: 10.0.0.91:2181(CONNECTED) 1]

    zookeeper的基本使用

    1. 创建zookeeper node

    [zk: 10.0.0.91:2181(CONNECTED) 1] create /school oldboyedu
    Created /school 创建一个节点,节点下的数据是oldboyedu
    [zk: 10.0.0.91:2181(CONNECTED) 2]

    2. 查看zookeeper node列表

    [zk: 10.0.0.91:2181(CONNECTED) 2] ls /
    [school, zookeeper]
    [zk: 10.0.0.91:2181(CONNECTED) 3]

    3. 查看zookeeper node数据

    [zk: 10.0.0.91:2181(CONNECTED) 3] get /school
    oldboyedu 获取节点下的数据
    [zk: 10.0.0.91:2181(CONNECTED) 4]

    4. 修改zookeeper node数据

    [zk: 10.0.0.91:2181(CONNECTED) 4] set /school laonanhai 将节点school下的数据修改
    [zk: 10.0.0.91:2181(CONNECTED) 5]
    [zk: 10.0.0.91:2181(CONNECTED) 5] get /school
    laonanhai
    [zk: 10.0.0.91:2181(CONNECTED) 6]

    5. 删除zookeeper node

    [zk: 10.0.0.91:2181(CONNECTED) 6] delete /school
    [zk: 10.0.0.91:2181(CONNECTED) 7]
    [zk: 10.0.0.91:2181(CONNECTED) 7] ls /
    [zookeeper]
    [zk: 10.0.0.91:2181(CONNECTED) 8]

    6. 创建层级的zookeeper node

    [zk: 10.0.0.91:2181(CONNECTED) 10] create /school oldboyedu
    Created /school

    [zk: 10.0.0.91:2181(CONNECTED) 11] create /school/class linux99
    Created /school/class 创建层级节点 class节点下的数据是Linux99

    [zk: 10.0.0.91:2181(CONNECTED) 12] create /school/address https://www.oldboyedu.com
    Created /school/address

    [zk: 10.0.0.91:2181(CONNECTED) 13] ls /
    [school, zookeeper]
    ]
    [zk: 10.0.0.91:2181(CONNECTED) 14] ls /school
    [address, class]

    [zk: 10.0.0.91:2181(CONNECTED) 15] get /school/address
    https://www.oldboyedu.com

    [zk: 10.0.0.91:2181(CONNECTED) 16] get /school/class
    linux99

    7. 递归删除zookeeper node

    [zk: 10.0.0.91:2181(CONNECTED) 19] ls /school
    [address, class]

    [zk: 10.0.0.91:2181(CONNECTED) 20] delete /school/class

    [zk: 10.0.0.91:2181(CONNECTED) 21] ls /school
    [address]

    [zk: 10.0.0.91:2181(CONNECTED) 22] delete /school
    Node not empty: /school

    [zk: 10.0.0.91:2181(CONNECTED) 23] ls /school
    [address]

    [zk: 10.0.0.91:2181(CONNECTED) 24] deleteall /school

    [zk: 10.0.0.91:2181(CONNECTED) 25] ls /school
    Node does not exist: /school

    [zk: 10.0.0.91:2181(CONNECTED) 26] ls /
    [zookeeper]

    课堂练习:

    • 创建一个省,省下有市,市下有区县。
      区县里面要有景点及票价相关信息。

    参考示例:

    [zk: 10.0.0.91:2181(CONNECTED) 29] ls /
    [zookeeper]
    [zk: 10.0.0.91:2181(CONNECTED) 30] create /ShanDong 济南
    Created /ShanDong
    [zk: 10.0.0.91:2181(CONNECTED) 31]
    [zk: 10.0.0.91:2181(CONNECTED) 31] create /ShanDong/WeiFang 风筝节
    Created /ShanDong/WeiFang
    [zk: 10.0.0.91:2181(CONNECTED) 32]
    [zk: 10.0.0.91:2181(CONNECTED) 32] create /ShanDong/TanAn 泰山
    Created /ShanDong/TanAn
    [zk: 10.0.0.91:2181(CONNECTED) 33]
    [zk: 10.0.0.91:2181(CONNECTED) 33]
    [zk: 10.0.0.91:2181(CONNECTED) 33] ls /ShanDong
    [TanAn, WeiFang]
    [zk: 10.0.0.91:2181(CONNECTED) 34]
    [zk: 10.0.0.91:2181(CONNECTED) 34]
    [zk: 10.0.0.91:2181(CONNECTED) 35] create /ShanXi 西安
    Created /ShanXi
    [zk: 10.0.0.91:2181(CONNECTED) 36]
    [zk: 10.0.0.91:2181(CONNECTED) 36] create /ShanXi/HanZhong 凉皮
    Created /ShanXi/HanZhong
    [zk: 10.0.0.91:2181(CONNECTED) 37]
    [zk: 10.0.0.91:2181(CONNECTED) 37] create /ShanXi/WeiNan 华山
    Created /ShanXi/WeiNan
    [zk: 10.0.0.91:2181(CONNECTED) 38]
    [zk: 10.0.0.91:2181(CONNECTED) 38] ls /ShanXi
    [HanZhong, WeiNan]
    [zk: 10.0.0.91:2181(CONNECTED) 39]
    [zk: 10.0.0.91:2181(CONNECTED) 39]
    [zk: 10.0.0.91:2181(CONNECTED) 39] ls /
    [ShanDong, ShanXi, zookeeper]
    [zk: 10.0.0.91:2181(CONNECTED) 40]
    [zk: 10.0.0.91:2181(CONNECTED) 40]

    语法:就是创建节点,节点下的数据是什么(只能单个数据)

    zookeeper的集群部署

    1. 集群模式节点数量选择:

    参考链接: 搭建三节点
    https://zookeeper.apache.org/doc/current/zookeeperOver.html

    2. 实战案例

    2.1 停止单点服务

    [root@elk91 ~]# zkServer.sh stop
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED

    [root@elk91 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Error contacting service. It is probably not running.

    2.2 修改zookeeper的配置文件

    [root@elk91 ~]# egrep -v "^#|^$" /usr/local/apache-zookeeper-3.8.4-bin/conf/zoo.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/var/lib/zookeeper
    clientPort=2181
    server.11=10.0.0.91:2888:3888
    server.22=10.0.0.92:2888:3888
    server.33=10.0.0.93:2888:3888

    2.3. 将程序和环境变量文件同步到集群的其他节点

    [root@elk91 ~]# scp -r /usr/local/apache-zookeeper-3.8.4-bin/ 10.0.0.92:/usr/local
    [root@elk91 ~]# scp -r /usr/local/apache-zookeeper-3.8.4-bin/ 10.0.0.93:/usr/local
    [root@elk91 ~]# scp /etc/profile.d/zk.sh 10.0.0.92:/etc/profile.d/
    [root@elk91 ~]# scp /etc/profile.d/zk.sh 10.0.0.93:/etc/profile.d/

    2.4. 所有节点准备数据目录【此处的myid要和zk集群的配置文件要匹配!!!】

    [root@elk91 ~]# mkdir /var/lib/zookeeper && echo 11 > /var/lib/zookeeper/myid
    [root@elk92 ~]# mkdir /var/lib/zookeeper && echo 22 > /var/lib/zookeeper/myid
    [root@elk93 ~]# mkdir /var/lib/zookeeper && echo 33 > /var/lib/zookeeper/myid

    2.5. 启动zookeeper集群

    [root@elk91 ~]# source /etc/profile.d/zk.sh && zkServer.sh start
    [root@elk92 ~]# source /etc/profile.d/zk.sh && zkServer.sh start
    [root@elk93 ~]# source /etc/profile.d/zk.sh && zkServer.sh start

    2.6. 检查集群的状态

    [root@elk91 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

    [root@elk91 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 *:2181 *:*
    LISTEN 0 50 [::ffff:10.0.0.91]:3888 *:*

    [root@elk92 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader

    [root@elk92 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 [::ffff:10.0.0.92]:3888 *:*
    LISTEN 0 50 *:2181 *:*

    [root@elk93 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

    [root@elk93 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 [::ffff:10.0.0.93]:2888 *:*
    LISTEN 0 50 [::ffff:10.0.0.93]:3888 *:*
    LISTEN 0 50 *:2181 *:*

    2.7 客户端链接测试

    [root@elk91 ~]# zkCli.sh -server 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181
    ...
    [zk: 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181(CONNECTED) 0] ls /
    [zookeeper]

    [zk: 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181(CONNECTED) 1] create /school oldboyedu
    Created /school

    [zk: 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181(CONNECTED) 2] ls /
    [school, zookeeper]

    3. 验证zookeeper集群高可用

    3.1 开启两个终端指向不同的节点分别写入数据测试

    [root@elk91 ~]# zkCli.sh -server 10.0.0.92:2181

    [root@elk92 ~]# zkCli.sh -server 10.0.0.93:2181

    3.2 停止leader节点观察是否可用

    [root@elk91 ~]# zkCli.sh -server 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181

    3.3 停止服务观察终端是否可用

    [root@elk93 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader

    [root@elk93 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 [::ffff:10.0.0.93]:2888 *:*
    LISTEN 0 50 [::ffff:10.0.0.93]:3888 *:*
    LISTEN 0 50 *:2181 *:*

    [root@elk93 ~]# zkServer.sh stop
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED
    [root@elk93 ~]#
    [root@elk93 ~]# ss -ntl | egrep "2181|2888|3888"
    [root@elk93 ~]#

    [root@elk92 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    [root@elk92 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 [::ffff:10.0.0.92]:3888 *:*
    LISTEN 0 50 *:2181 *:*
    LISTEN 0 50 [::ffff:10.0.0.92]:2888 *:*

    [root@elk91 ~]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

    [root@elk91 ~]# ss -ntl | egrep "2181|2888|3888"
    LISTEN 0 50 *:2181 *:*
    LISTEN 0 50 [::ffff:10.0.0.91]:3888 *:*

    4. zookeeper集群要保证半数以上存活机制

    一个集群如果想要容忍N台故障,则要求有2N+1台服务器,说白了,是奇数台服务器。
    举例子

    • 如果集群容忍挂掉1个节点,则至少要准备2*1 + 1 = 3台服务器。
    • 如果集群容忍挂掉2个节点,则至少要准备2*2 + 1 = 5台服务器。

    5. 测试验证故障容忍节点数量

    面试题: zookeeper的leader选举流程

    启动集群是默认都认为自己是leader,进行leader选举。
    选举时各节点要暴露出自己的: myid(11,22,33),zxid
    先比较zxid事务ID,越大就优先被选举为leader
    如果zxid比不出来,则比较myid,myid越大则优先成为leader。
    当zookeeper集群半数以上节点参与选举完成,则leader就确认下来了。

    zookeeper的watch机制及znode类型(了解)

    1. 终端1监听事件

    [root@elk92 ~]# zkCli.sh -server 10.0.0.93:2181
    ...
    [zk: 10.0.0.93:2181(CONNECTED) 1] ls /school
    [haha, xixi]
    [zk: 10.0.0.93:2181(CONNECTED) 2]
    [zk: 10.0.0.93:2181(CONNECTED) 2] ls -w /school # 此处的w选项就会监听/school节点是否有子节点变化。
    [haha, xixi]
    [zk: 10.0.0.93:2181(CONNECTED) 3]
    [zk: 10.0.0.93:2181(CONNECTED) 3]

    2. 终端2触发事件

    [root@elk93 ~]# zkCli.sh -server 10.0.0.91:2181
    ...
    [zk: 10.0.0.91:2181(CONNECTED) 4] ls /school
    [haha, xixi]
    [zk: 10.0.0.91:2181(CONNECTED) 5]
    [zk: 10.0.0.91:2181(CONNECTED) 5] create /school/hehe
    Created /school/hehe
    [zk: 10.0.0.91:2181(CONNECTED) 6]
    [zk: 10.0.0.91:2181(CONNECTED) 6] ls /school
    [haha, hehe, xixi]
    [zk: 10.0.0.91:2181(CONNECTED) 7]

    3. 观察终端1出现结果

    WATCHER::
    WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/school

    4. 类似watch还支持监控数据变化

    [zk: 10.0.0.93:2181(CONNECTED) 4] get -w /school
    laonanhai
    [zk: 10.0.0.93:2181(CONNECTED) 5]
    [zk: 10.0.0.93:2181(CONNECTED) 5]
    WATCHER::
    WatchedEvent state:SyncConnected type:NodeDataChanged path:/school

    5. zookeeper的类型

    • 临时的zookeeper node: 加个 -e选项就是临时的
      当链接断开,zookeeper node在一定时间范围(30s)内自动删除。
    • 永久的zookeeper node:
      当链接断开后,zookeeper node数据并不丢失。
      默认情况下,我们创建的 都是永久的zookeeper node。
    赞(0)
    未经允许不得转载:171主机测评 » 6-监控:ES8和zookeeper
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址