
# 配置切换至ClickHouseKeeper
本章节指导用户将当前ClickHouse集群从使用ZooKeeper更换成使用ClickHouseKeeper。
#### 对系统的影响
该操作过程中需要短暂停止ZooKeeper组件。
**组件停止期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。**
#### 操作步骤
1. 登录ZooKeeper客户节点，进入客户端安装目录，配置环境变量： 
   **cd /opt/client**
   **source bigdata_env**
   
   
2. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户，具体请参见[角色管理](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000148.html)配置拥有对应权限的角色，参考[创建用户](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000137.html)为用户绑定对应角色。如果当前集群未启用Kerberos认证，则无需执行此命令。
   
   **kinit** *MRS 集群用户*
   需要使用具有ZooKeeper服务管理员权限的用户。
   例如，**kinit zookeeperuser**。
   
   
3. 执行如下命令，连接ZooKeeper： 
   **zkCli.sh -server** *\<zookeeper安装节点ip\>* **:** *\<port\>*
   例如：**zkCli.sh -server node-master1DGhZ:2181**
   
   
4. 执行如下命令设置ZooKeeper的"/clickhouse"目录的ACL权限为全体可读写： 
   **setAcl -R /clickhouse world:anyone:cdrwa**
   
   

5. 触发ZooKeeper生成最新的快照文件： 
   1. 查看ZooKeeper服务的Leader实例IP。 登录Manager页面，选择"集群 \> 服务 \> ZooKeeper"，在ZooKeeper概览页面的"基本信息"中记录"Leader所在的主机"后的名称。单击"实例"，查看Leader所在的主机的节点IP。
      
   
   2. 登录Leader实例节点，进入"/srv/BigData/zookeeper/version-2/"目录，并记录该目录下的文件数。
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002486787901.png "点击放大")
      
   
   3. 进入ZooKeeper服务"概览"页面，单击右上角的"停止服务"，根据弹窗提示停止ZooKeeper服务。
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
      组件停止期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
      
   
   4. 在ZooKeeper服务页面，单击"实例"，勾选Leader实例，选择"启动实例"，启动Leader实例。
   
   5. 勾选Leader实例，选择"更多 \> 停止实例"，停止Leader实例。
   
   6. 进入ZooKeeper服务"概览"页面，单击右上角的"启动服务"，重启ZooKeeper服务。
   
   7. 登录Leader实例节点，查看是否生成最新的快照文件： **cd /srv/BigData/zookeeper/version-2/**
      对比[5.b]中记录的文件数，查看是否有生成最新的快照文件，如下图所示：
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002484152025.png "点击放大")
      
   
   
   
   
6. （可选）如果ClickHouse集群中没有安装ClickHouseKeeper实例，需要安装ClickHouseKeeper实例，具体请参考的"添加角色实例"章节。
7. 使用root用户登录到任意一个ClickHouseServer节点，执行如下命令将ZooKeeper元数据转换成ClickHouseKeeper支持的格式： 
   **su - omm**
   **cd /opt/huawei/Bigdata/FusionInsight_ClickHouse_\*/install/FusionInsight-ClickHouse-\*-lts/clickhouse/sbin/**
   **sh clickhouse_transfer_zkmedata_to_keeper.sh**
   
   
8. 重启ClickHouseKeeper实例，加载迁移的元数据。 
   登录Manager页面，选择"集群 \> 服务 \> ClickHouse \> 实例"，勾选所有的ClickHouseKeeper实例，选择"更多 \> 重启实例"，重启所有的ClickHouseKeeper实例。
   
   
9. 在ClickHouseServer节点执行如下命令，进行数据一致性对比： 
   **sh clickhouse_transfer_zk2keeper_metadata_check.sh** *用户名* **'** *密码* **'** *端口*
   - 用户名和密码为ClickHouse服务的业务用户名和密码。
   
   - 端口为ClickHouseServer的"https_port"（普通集群是http_port）端口（安全集群默认是21422，普通集群默认是21421），具体获取方法请参考[ClickHouse客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2345.html)。
   
   
   校验成功返回：
   ```
   ClickHouse meta check successfully.
   ```
   校验失败时，请查看当前目录下的日志文件"clickhouse_metadata_check_xxx.log"进行确认。
   
   
10. 切换ClickHouse使用状态为ClickHouseKeeper。 
    **sh clickhouse_transfer_zk2keeper_metadata_check.sh change_use_keeper_state true**
    
    
11. 登录Manager页面，选择"集群 \> 服务 \> ClickHouse"，进入ClickHouse服务概览页面，在右上角选择"更多 \> 同步配置"，在弹窗中单击"确定"，同步ClickHouse配置。
12. 选择"集群 \> 服务 \> ClickHouse \> 实例"，勾选所有的ClickHouseServer和ClickHouseBalancer实例，选择"更多 \> 重启实例"，重启所有的ClickHouseServer和ClickHouseBalancer实例。
13. 验证已经切换到ClickHouseKeeper。 
    进入ZooKeeper服务"概览"页面，单击右上角的"停止服务"，根据弹窗提示停止ZooKeeper服务。停止ZooKeeper服务完成后查看ClickHouse服务正常，则表示切换到ClickHouseKeeper。
    
    
 
#### 回退方法
如果执行配置切换至ClickHouseKeeper过程中出现了问题且短时间无法解决，可执行如下命令将配置切换回ZooKeeper，ClickHouse服务将继续使用ZooKeeper服务。
1. 使用root用户登录到任意一个ClickHouseServer节点，执行以下语句进行回退： 
   **su - omm**
   **cd /opt/huawei/Bigdata/FusionInsight_ClickHouse_\*/install/FusionInsight-ClickHouse-\*-lts/clickhouse/sbin/**
   **sh clickhouse_transfer_zk2keeper_metadata_check.sh change_use_keeper_state false**
   
   
2. 登录Manager页面，选择"集群 \> 服务 \> ClickHouse"，在右上角选择"更多 \> 同步配置"，在弹窗中单击"确定"，同步ClickHouse配置。
3. 单击"实例"，勾选所有的ClickHouseServer和ClickHouseBalancer实例，选择"更多 \> 重启实例"，重启所有的ClickHouseServer和ClickHouseBalancer实例。
4. 勾选所有的ClickHouseKeeper实例，选择"更多 \> 停止实例"，停止ClickHouseKeeper实例。
5. 检查ClickHouse服务无异常后，选择"更多 \> 删除实例"，删除ClickHouseKeeper实例。
 
