暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss DCF使用示例

李二果 2022-09-29
777

使用示例

假设集群三个节点,ip分别为,192.168.0.11,192.168.0.12,192.168.0.13。node id分别为1,2,3;节点角色分别为LEADER,FOLLOWER,FOLLOWER。

使用DCF组件能力需要在使用OM安装部署阶段,在配置文件中,开启开关enable_dcf的值为on(默认是关闭的),并配置DCF config配置信息。

在script/gspylib/etc/conf/centralized/cluster_config_template_HA.xml获取XML文件模板。

每行信息均有注释进行说明。加粗字体内容为DCF相关内容。示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
  <!-- 整体信息 -->
  <CLUSTER>
  <!-- 数据库名称 -->
    <PARAM name="clusterName" value="Sample1" />
  <!-- 数据库节点名称(hostname) -->
    <PARAM name="nodeNames" value="node1,node2,node3" />
  <!-- 节点IP,与nodeNames一一对应 -->
    <PARAM name="backIp1s" value="192.168.0.11,192.168.0.12,192.168.0.13"/>
  <!-- 数据库安装目录-->
    <PARAM name="gaussdbAppPath" value="/opt/huawei/newsql/app" />
  <!-- 日志目录-->
    <PARAM name="gaussdbLogPath" value="/opt/huawei/logs/gaussdb" />
  <!-- 临时文件目录-->
    <PARAM name="tmpMppdbPath" value="/opt/huawei/logs/temp" />
  <!--数据库工具目录-->
    <PARAM name="gaussdbToolPath" value="/opt/huawei/tools" />
  <!-- 集群数据库类型,此处示例为非分布式,即集中式类型-->
    <PARAM name="clusterType" value="single-inst"/>
  <!-- 是否开启DCF模式, 开启:on,关闭:off -->
    <PARAM name="enable_dcf" value="on/off"/>
  <!-- DCF config配置信息 -->
    <PARAM name="dcf_config" value="[{&quot;stream_id&quot;:1,&quot;node_id&quot;:1,&quot;ip&quot;:&quot;192.168.0.11&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;LEADER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:2,&quot;ip&quot;:&quot;192.168.0.12&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;FOLLOWER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:3,&quot;ip&quot;:&quot;192.168.0.13&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;FOLLOWER&quot;}]"/> 
  </CLUSTER>
...
  1. 安装完成后查询集群状态。

    使用gs_ctl查询集群状态。

    # gs_ctl query –D <data_dir>
    # gs_ctl query -D /nvme0/gaussdb/cluster/nvme0/dn1
    HA state:
           local role                     : Primary   
           static connections             : 2   
           db state                       : Normal 
           detail information             : Normal 
    Paxos replication info:
           paxos write location           : 964/87134528  
           paxos commit location          : 964/87134528  
           local write location           : 964/87134528  
           local flush location           : 964/87134528  
           local replay location          : 964/87134528  
           dcf replication info           : {"stream_id":1,"local_node_id":1,"role":"LEADER","term":3,"run_mode":0,"work_mode":0,"hb_interval":1000,"elc_timeout":3000,"applied_index":14300633605."commit_index":14300633605,"first_index":14300625186,"last_index":14300633605,"cluster_min_apply_idx'14300633605,"leader_id":1,"leader_ip":"172.16.137.38","leader_port":17783,"nodes":[{"node_id":1,"id":"172.16.137.38","port":17783,"role":"LEADER","next_index":14300633606,"match_index":14300633605,"apply_index":14300633605},{"node_id":2,"ip":"172.16.137.40","port":17783,"role":"FOLLOWER","next_index":14300633606,"match_index":14300633605,"apply_index":14300633605},{"node_id":3,"ip":"172.16.137.42","port":17783,"role":"FOLLOWER","next_index":14300633606,"match_index":14300633605,"apply_index":14300633605}}}
    

    其中:

    • dcf_replication_info:表示当前节点dcf信息。
    • role:表示当前节点角色,角色一共有如下几种,LEADER、FOLLOWER、LOGGER、PASSIVE、PRE_CANDICATE、CANDIDATE、UNKNOW。从上图可以看出当前节点是LEADER节点。
    • term:选举任期。
    • run_mode:DCF运行模式,当前0表示自动选举模式,2表示关闭自动选举模式。
    • work_mode:DCF工作模式。0表示多数派模式;1表示少数派模式。
    • hb_interval:DCF节点间心跳间隔时间,单位ms。
    • elc_timeout:DCF选举超时时间,单位ms。
    • applied_index:被应用到状态机的日志位置。
    • commit_index:已被大多数DCF节点保存的日志位置,此commit_index之前日志均已持久化。
    • first_index:DCF节点保存的首条日志位置,此位置会随着DN调用dcf_truncate而向后推进,之前的日志会被清理。
    • last_index:DCF节点保存的最后一条日志位置,此日志位置包含DCF节点存储在内存里但是没有持久化的日志,故而last_index >= commit_index。
    • cluster_min_apply_idx:集群最小已应用的日志位置。
    • leader_id:leader节点ID。
    • leader_ip:leader节点IP。
    • leader_port:leader节点端口,DCF内部使用 。
    • nodes:集群其他节点信息。
  2. 集群规模在线调整。

    若在线增加副本,执行以下一条命令即可。

     # gs_ctl member --operation=add --nodeid=<node_id> --ip=<ip> --port=<port> -D <data_dir>
    

    若需在线降副本,执行下面命令:

     # gs_ctl member --operation=remove --nodeid=<node_id> -D <data_dir>
    

    在集群状态正常的情况下,5分钟就可以完成删除单个副本的任务。

  3. 集群支持少数派强起功能。

    在多数派故障场景下,按正常的Paxos协议无法达成一致,系统无法继续提供服务。为了提供紧急服务能力,需在少数派情况下紧急启动提供服务。

    使用命令如下:

     # cm_ctl setrunmode -n <node_id> -D <data_dir> --xmode=minority --votenum=<num>
    

    在集群3副本的情况下,2副本故障,只需1副本达成一致即可提交。

    加回命令为:

     # cm_ctl setrunmode -n <node_id> -D <data_dir> --xmode=normal --votenum=<num>
    
  4. 主动switchover操作。

    支持一主多备部署模式下切换数据库主备实例,实现AZ间的相互切换。switchover为维护操作,需确保数据库实例状态正常,所有业务结束并无主备追赶后,再进行switchover操作。

    例如节点备升主操作命令:

     # cm_ctl switchover –n <node_id> -D <data_dir>
    
  5. 备机重建功能。

    支持主备模式下全量build能力。实现过程是当主DN收到全量build的请求后,阻塞主DN回收DCF日志,备DN从主DN复制xlog日志和数据文件,在备DN拉起后设置DCF开始复制日志点。

    命令示例如下:

    gs_ctl build -b full -D <new_node_data_dir>
    
  6. 支持手动模式。

    DCF支持手动模式,在手动模式下不自动仲裁,此模式下对接上层CM等管理组件做仲裁适配,DCF进行日志复制功能。

    命令示例如下:

    cm_ctl set --param --server -k dn_arbitrate_mode=quorum
    cm_ctl reload --param --server
    gs_guc reload -Z datanode -I all -N all  -c "dcf_run_mode=1"
    

    须知:

    • GUC参数设置和cm_ctl设置的DCF工作模式需要保持一致,即两者需要同步设置为DCF手动或自动模式。
    • 集群在正常状态下进行工作模式切换才能保证切换后工作正常。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论