同步索引属组信息
操作场景
- 该操作指导工程师在安全模式的MRS集群下,为非安全模式或安全模式下基于Ranger鉴权的Elasticsearch集群中创建过的索引添加属主信息,以保证Elasticsearch集群由非安全模式切换为安全模式基于用户和角色的鉴权,或安全模式下基于Ranger的鉴权切换为基于用户和角色的鉴权后,鉴权功能可以正常执行。
- 该操作可以在安全模式的MRS集群下,检测安全模式Elasticsearch集群中的索引与Zookeeper上存在的索引信息是否保持一致,并支持新增、更新、删除Zookeeper上保存的索引与属主的对应关系。
如果只需要操作安全模式的Elasticsearch集群,进行检查、新增、更新和删除Zookeeper上保存的索引与属主关系,可以直接执行11。
前提条件
- 如果需要把MRS集群由非安全模式切换为安全模式,或者在安全的MRS集群下,Elasticsearch集群需要由非安全模式切换为安全模式,请提前获取非安全的Elasticsearch集群中创建过的索引列表信息,然后再进行转换。
- 已安装Elasticsearch客户端,例如安装目录为“/opt/client”。
操作步骤
在非安全模式的Elasticsearch集群中,获取对应信息
- 登录已安装Elasticsearch客户端的节点,执行以下命令配置环境信息并进入Elasticsearch客户端工具所在路径的conf目录。
source /opt/client/bigdta_env
cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf
- 执行以下命令,打开待修改配置文件“es-example.properties”。
vi es-example.properties
- 将“EsServerHost”参数配置为连接Elasticsearch集群的实例。
EsServerHost=ip1:port1,ip2:port2...
参数获取方式请参考表1。
- 将“IsSecureMode”的值,配置为“false”。
IsSecureMode=false
- 执行以下命令,回到工具目录。
cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool
- 执行以下操作,获取当前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
- 执行结束后,会在工具路径下生成output目录,检查是否生成了indexesInES.txt文件,并写入了Elasticsearch集群的全部索引名称。
- 查看工具所在路径的logs目录下的日志文件synIndexTool.log,查找原因清除相关问题后,执行9。
将Elasticsearch集群由非安全模式转为安全模式
- 登录Manager,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置”,单击“全部配置”。
- 将“ELASTICSEARCH_SECURITY_ENABLE”参数配置为“true”。保存配置成功后,重启Elasticsearch服务。
Elasticsearch集群转为安全模式后,获取相关属主对应信息
- 登录已安装Elasticsearch客户端和Elasticsearch实例的任意一台机器,进入Elasticsearch工具所在路径的conf目录。
cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf
- 添加认证需要的证书文件。
- 执行以下操作,打开配置文件jaas.conf。
vi jaas.conf
- 修改keyTab的值为elasticsearch.keytab文件所在的绝对路径。
keyTab="/opt/client/Elasticsearch/tools/elasticsearch-synindextool/conf/elasticsearch.keytab"
- 修改principal的值为“elasticsearch/hadoop.<系统域名>@<系统域名>”。
- 用户可登录Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。
- “elasticsearch/hadoop.<系统域名>”为用户名,用户的用户名所包含的系统域名所有字母为小写。例如“本端域”参数为“9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”,用户名为“elasticsearch/hadoop.9427068f-6efa-4833-b43e-60cb641e5b6c.com”。
- 执行以下命令,打开待修改配置文件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”
- 是否为生成的IndexesInES.txt文件中的所有索引添加一个相同的属主。
- 是,把IndexesInES.txt文件中的所有索引名称赋值给参数AddIndexOwnerListToZK,以逗号分隔,然后给IndexOwner参数赋值属主名称。
- 否,请以index1#owner1,index2#owner2,index3#owner3...的格式赋值给参数AddIndexOwnerListToZK,索引名和属主名以#分隔,同时清除参数IndexOwner的值。
- 执行以下命令,回到工具目录。
cd /opt/client/Elasticsearch/tools/elasticsearch-synindextool/
- 执行以下命令,获取当前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
检查配置结果
- 检查工具所在路径的logs目录下的synIndexTool.log日志文件,是否存在ERROR或者异常报错,如果有请根据报错排查原因。
- 检查工具所在路径的output目录下的errorInput.txt文件,将errorInput.txt文件中的错误格式信息重新按照正确格式再次赋值给相应参数,重复执行16~19。
- 检查工具所在路径的output目录下的indexesMissInZK.txt文件,如果存在索引信息,即代表当前ZooKeeper上缺少了一部分Elasticsearch集群中存在的索引信息,即还有索引没有被添加属主信息,重复执行16~19,为遗漏的索引添加属主信息。
- 检查工具所在路径的output目录下的indexesExtraInZK.txt文件,如果存在索引信息,即代表当前ZooKeeper上保存了Elasticsearch集群中不存在的索引信息。如果想保持Elasticsearch和ZooKeeper上索引信息的一致性,请修改配置文件es-example.properties,清空参数IndexOwner,AddIndexOwnerListToZK,并给DeleteExtraIndexInZK赋值为true,重复执行16~19。
如果DeleteExtraIndexInZK赋值为true,但是ZooKeeper上不存在多余的索引,则不会进行处理。
- 执行完工具后,当synIndexTool.log日志文件不存在错误信息,errorInput.txt,indexesMissInZK.txt,indexesExtraInZK.txt文件为空,则代表Elasticsearch集群切换为安全模式后的同步索引操作成功。