• 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
  • 相关阅读:
    fopen
    C++ list的基本操作和使用
    lua调用有返回值的c++
    Duplicate methods named spliterator with the parameters () and () are inherited from the types Colle
    Android手机联网状态、GPS
    c风格字符串的标准库函数
    Filter in Servlet
    Annotation 注解
    container injection——容器技术
    windows上安装Maven与Gradle
  • 原文地址:https://www.cnblogs.com/Dy1an/p/13141059.html
Copyright © 2020-2023  润新知