更新时间:2024-11-29 GMT+08:00

同步索引属组信息

操作场景

  • 该操作指导工程师在安全模式的MRS集群下,为非安全模式或安全模式下基于Ranger鉴权的Elasticsearch集群中创建过的索引添加属主信息,以保证Elasticsearch集群由非安全模式切换为安全模式基于用户和角色的鉴权,或安全模式下基于Ranger的鉴权切换为基于用户和角色的鉴权后,鉴权功能可以正常执行。
  • 该操作可以在安全模式的MRS集群下,检测安全模式Elasticsearch集群中的索引与Zookeeper上存在的索引信息是否保持一致,并支持新增、更新、删除Zookeeper上保存的索引与属主的对应关系。

    如果只需要操作安全模式的Elasticsearch集群,进行检查、新增、更新和删除Zookeeper上保存的索引与属主关系,可以直接执行11

前提条件

  • 如果需要把MRS集群由非安全模式切换为安全模式,或者在安全的MRS集群下,Elasticsearch集群需要由非安全模式切换为安全模式,请提前获取非安全的Elasticsearch集群中创建过的索引列表信息,然后再进行转换。
  • 已安装Elasticsearch客户端,例如安装目录为“/opt/client”。

操作步骤

在非安全模式的Elasticsearch集群中,获取对应信息

  1. 登录已安装Elasticsearch客户端的节点,执行以下命令配置环境信息并进入Elasticsearch客户端工具所在路径的conf目录。

    source /opt/client/bigdta_env

    cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf

  2. 执行以下命令,打开待修改配置文件“es-example.properties”

    vi es-example.properties

  3. “EsServerHost”参数配置为连接Elasticsearch集群的实例。

    EsServerHost=ip1:port1,ip2:port2...

    参数获取方式请参考表1

  4. “IsSecureMode”的值,配置为“false”

    IsSecureMode=false

  5. 执行以下命令,回到工具目录。

    cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool

  6. 执行以下操作,获取当前Elasticsearch集群下的索引信息。

    java -Dlog4j.configuration=file:/opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf/log4j.properties -cp /opt/client/Elasticsearch/tools/elasticsearch-synindextool/lib/*:/opt/client/Elasicsearch/tools/elasticsearch-synindextool/conf/ com.*.fusioninsight.elasticsearch.synindex.SynIndex

  7. 执行结束后,会在工具路径下生成output目录,检查是否生成了indexesInES.txt文件,并写入了Elasticsearch集群的全部索引名称。

    • 是,执行9
    • 否,执行8

  8. 查看工具所在路径的logs目录下的日志文件synIndexTool.log,查找原因清除相关问题后,执行9

将Elasticsearch集群由非安全模式转为安全模式

  1. 登录Manager,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置,单击“全部配置”
  2. 将“ELASTICSEARCH_SECURITY_ENABLE”参数配置为“true”。保存配置成功后,重启Elasticsearch服务。

Elasticsearch集群转为安全模式后,获取相关属主对应信息

  1. 登录已安装Elasticsearch客户端和Elasticsearch实例的任意一台机器,进入Elasticsearch工具所在路径的conf目录。

    cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf

  2. 添加认证需要的证书文件。

    1. 拷贝节点上任意一个实例目录下的elasticsearch.keytab文件,例EsMaster。

      cp ${BIGDATA_HOME}/FusionInsight_Elasticsearch_8.3.1/install/FusionInsight-Elasticsearch-7.10.2/keytabs/EsMaster/elasticsearch.keytab ./

    2. 拷贝KerberosClient实例下的krb5.conf文件。

      cp ${BIGDATA_HOME}/FusionInsight_BASE_8.3.1/*_*_KerberosClient/etc/krb5.conf ./

  3. 执行以下操作,打开配置文件jaas.conf。

    vi jaas.conf

  4. 修改keyTab的值为elasticsearch.keytab文件所在的绝对路径。

    keyTab="/opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf/elasticsearch.keytab"

  5. 修改principal的值为“elasticsearch/hadoop.<系统域名>@<系统域名>

    • 用户可登录Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。
    • “elasticsearch/hadoop.<系统域名>为用户名,用户的用户名所包含的系统域名所有字母为小写。例如“本端域”参数为“9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”,用户名为“elasticsearch/hadoop.9427068f-6efa-4833-b43e-60cb641e5b6c.com”。

  6. 执行以下命令,打开待修改配置文件es-example.properties。

    vi es-example.properties

    修改如下参数,其中各配置项及获取方法请参考表1

    IsSecureMode=true
    EsServerHost=ip1:port1,ip2:port2...
    ZkHostList=ip1:2181,ip2:2181,ip3:2181
    MutiServiceName=elasticsearch
    表1 es-example.properties文件参数

    配置名称

    默认值

    含义

    获取方式

    IsSecureMode

    false

    客户端是否开启安全模式,true为开启安全模式,false为未开启

    -

    EsServerHost

    ip1:port1,ip2:port2,ip3:port3...

    Elasticsearch集群中任意节点IP与该IP节点上已安装的Elasticsearch实例的HTTP端口组合的列表,EsMaster实例除外

    登录Manager,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch> 配置”,单击“全部配置”,选择非EsMater的其他任意一个实例,选择“实例列表”属性,“INSTANCE_SERVER_PORT_LIST”参数值。

    maxRetryTimeoutMillis

    60000

    给Elasticsearch集群发送同一请求重试多次的超时时间,以毫秒为单位

    connectTimeout

    5000

    Elasticsearch客户端和Elasticsearch服务端建立连接的超时时间,以毫秒为单位

    socketTimeout

    60000

    Elasticsearch客户端获取Elasticsearch服务器响应的超时时间,以毫秒为单位

    ZkHostList

    ip1:2181,ip2:2181,ip3:2181

    ZooKeeper实例所在的节点ip与其端口号的组合列表

    登录Manager,选择“集群 > 待操作集群的名称 > 服务 > ZooKeeper > 实例 ”,查看安装了quorumpeer实例的主机IP地址。

    IndexOwner

    -

    为填写在AddIndexOwnerListToZK中的所有索引赋予同一个属主名,请保证属主信息的正确性。此时AddIndexOwnerListToZK的值为索引的列表,形如index1,index2......

    AddIndexOwnerListToZK

    index1#owner1,index2#owner2...

    在不填写IndexOwner的情况下,赋值形如index1#owner1的列表,以#分隔索引和属主信息,即为index1添加属主owner1

    DeleteExtraIndexInZK

    false

    当output目录下的indexesExtraInZK.txt文件中输出了索引信息时,可通过赋值DeleteExtraIndexInZK为true,自动删除Zookeeper上多余的索引信息

    MutiServiceName

    elasticsearch

    Elasticsearch集群的服务名

    登录Manager,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置”,单击“全部配置”,选择任意一个实例,选择“默认”属性,将“muti.cluster.service.name”参数的值赋予“MutiServiceName”

  7. 是否为生成的IndexesInES.txt文件中的所有索引添加一个相同的属主。

    • 是,把IndexesInES.txt文件中的所有索引名称赋值给参数AddIndexOwnerListToZK,以逗号分隔,然后给IndexOwner参数赋值属主名称。
    • 否,请以index1#owner1,index2#owner2,index3#owner3...的格式赋值给参数AddIndexOwnerListToZK,索引名和属主名以#分隔,同时清除参数IndexOwner的值。

  8. 执行以下命令,回到工具目录。

    cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/

  9. 执行以下命令,获取当前Elasticsearch集群下的索引信息。

    java -Dlog4j.configuration=file:/opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf/log4j.properties -cp /opt/client/Elasticsearch/tools/elasticsearch-synindextool/lib/*:/opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf/ com.*.fusioninsight.elasticsearch.synindex.SynIndex

检查配置结果

  1. 检查工具所在路径的logs目录下的synIndexTool.log日志文件,是否存在ERROR或者异常报错,如果有请根据报错排查原因。
  2. 检查工具所在路径的output目录下的errorInput.txt文件,将errorInput.txt文件中的错误格式信息重新按照正确格式再次赋值给相应参数,重复执行1619
  3. 检查工具所在路径的output目录下的indexesMissInZK.txt文件,如果存在索引信息,即代表当前ZooKeeper上缺少了一部分Elasticsearch集群中存在的索引信息,即还有索引没有被添加属主信息,重复执行1619,为遗漏的索引添加属主信息。
  4. 检查工具所在路径的output目录下的indexesExtraInZK.txt文件,如果存在索引信息,即代表当前ZooKeeper上保存了Elasticsearch集群中不存在的索引信息。如果想保持Elasticsearch和ZooKeeper上索引信息的一致性,请修改配置文件es-example.properties,清空参数IndexOwner,AddIndexOwnerListToZK,并给DeleteExtraIndexInZK赋值为true,重复执行1619

    如果DeleteExtraIndexInZK赋值为true,但是ZooKeeper上不存在多余的索引,则不会进行处理。

  5. 执行完工具后,当synIndexTool.log日志文件不存在错误信息,errorInput.txt,indexesMissInZK.txt,indexesExtraInZK.txt文件为空,则代表Elasticsearch集群切换为安全模式后的同步索引操作成功。