简介
本文档介绍在思科策略套件(CPS)副本集中管理仲裁器节点的过程。
先决条件
要求
Cisco 建议您了解以下主题:
注意:Cisco建议您必须具有对CPS CLI的超级用户访问权限。
使用的组件
本文档中的信息基于以下软件和硬件版本:
- CPS 20.2
- 统一计算系统(UCS)-B
- MongoDB v3.6.17和v3.4.16
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
CPS使用MongoDB构建其基本数据库(DB)结构。它拥有多个副本集,用于各种用途:ADMIN、Subscriber Profile Repository(SPR)、BALANCE、SESSION、REPORTING和AUDIT。
MongoDB中的副本集是一组维护相同数据集的mongod进程。副本集提供冗余和高可用性(HA)。通过在不同的数据库服务器上有多个数据副本,它允许负载共享读取操作。
在某些情况下(例如您有一个主实例和一个辅助实例,但成本限制禁止添加另一个辅助实例),您可以选择向副本集添加一个单实例作为仲裁者在选举中进行投票。仲裁员有1张选举票。默认情况下,仲裁人的优先级为0。
仲裁程序是属于副本集但不保存数据的单实例(这意味着它们不提供数据冗余)。不过,他们也可以参加选举。仲裁员参与主节点的选举,但仲裁员没有数据集的副本,因此无法成为主节点。
仲裁程序具有最低的资源要求,不需要专用硬件。您可以在应用服务器或仅监控网络的主机上部署仲裁程序。
仲裁器不存储数据,但在将仲裁器mongod进程添加到副本集之前,仲裁器的作用类似于任何其他单宿主进程,并使用一组数据文件和完整大小的日志启动。
下面是一个示例副本集,即 set07
.
| SET NAME - PORT : IP ADDRESS - REPLICA STATE - HOST NAME - HEALTH - LAST SYNC -PRIORITY
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set07 |
| Status via arbitervip:27727 sessionmgr01:27727 sessionmgr02:27727 |
| Member-1 - 27727 : - SECONDARY - sessionmgr01 - ON-LINE - 0 sec - 2 |
| Member-2 - 27727 : 192.168.10.146 - ARBITER - arbitervip - ON-LINE - -------- - 0 |
| Member-3 - 27727 : - PRIMARY - sessionmgr02 - ON-LINE - -------- - 3 |
|----------------------------------------------------------------------------------------------------------------------------------------|
问题
假定仲裁程序有问题,或者需要更改复制副本集中的仲裁程序,则必须删除当前仲裁程序并向复制副本集中添加新仲裁程序。
管理副本集中的仲裁器的过程
步骤1:验证CPS和新仲裁程序中的mongo shell版本。从副本集和新仲裁器节点中的主sessionmgr运行此命令。
sessionmgr的输出示例:
[root@sessionmgr02 ~]# mongo --version
MongoDB shell version v3.6.17
如果主sessionmgr和新仲裁程序中的mongo shell版本相同,或者新仲裁程序mongo shell版本更高,则导航到步骤6。
否则,如果新的仲裁程序mongo shell版本较低,则必须设置 featureCompatibilityVersion
作为副本集管理数据库中的较低值,并执行以下步骤。
新仲裁程序的mongo shell版本低于CPS sessionmgr的示例案例:
[root@pcrfclient02 ~]# mongo --version
MongoDB shell version v3.4.16
第二步:登录到复制副本集的主蒙戈实例。
Command template:
#mongo --host <sessionmgrXX> --port <Replica Set port>
Sample command:
#mongo --host sessionmgr02 --port 27727
第三步: 运行此命令可查看当前 featureCompatibilityVersion
在副本集的admin数据库中。
set07:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{
"featureCompatibilityVersion" : {
"version" : "3.6"
},
"ok" : 1,
"operationTime" : Timestamp(1663914140, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1663914140, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
set07:PRIMARY>
第四步:运行此命令以 setfeatureCompatibilityVersion
在副本集的管理数据库中设置为3.4。
set07:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
{ "ok" : 1 }
set07:PRIMARY>
第五步: 运行此命令以验证 featureCompatibilityVersion
在副本集的管理员数据库中已更改为3.4。
set07:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.4" }, "ok" : 1 }
set07:PRIMARY>
第六步:登录到群集管理器并修改 /var/qps/config/deploy/csv/AdditionalHosts.csv
新仲裁员详细信息文件。
#vi /var/qps/config/deploy/csv/AdditionalHosts.csv
Provide new arbiter details in this format:
Host Alias IP Address
new-arbiter new-arbiter xx.xx.xx.xx
步骤 7.导入CSV配置。
#/var/qps/install/current/scripts/import/import_deploy.sh
步骤 8验证 /etc/hosts
更新了新仲裁人的信息。
#cat /etc/hosts | grep arbiter
步骤 9运行此命令进行同步 /etc/hosts
.
#/var/qps/bin/update/synchosts.sh
Syncing to following QNS Servers:
lb01 lb02 sessionmgr01 sessionmgr02 qns01 qns02 pcrfclient01 pcrfclient02
Do you want to Proceed? (y/n):y
lb01
lb02
sessionmgr01
sessionmgr02
qns01
qns02
pcrfclient01
pcrfclient02
步骤 10验证pcrfclient虚拟机上的mon_db脚本已停止。
#monsum | grep mon_db_for
如果停止,则输出如下:
mon_db_for_lb_failover Not monitored Program
mon_db_for_callmodel Not monitored Program
如果未停止,则输出如下:
mon_db_for_lb_failover OK Program
mon_db_for_callmodel OK Program
注意:如果mon_db脚本未停止,请在相应的pcffclient虚拟机上运行这些命令以手动停止。
#monit stop mon_db_for_lb_failover
#monit stop mon_db_for_callmodel
步骤 11从pcrfclient01运行此命令可从副本集中删除当前仲裁器(在此步骤中,set07是一个示例)。
#build_set.sh --session --remove-members --setname set07
Please enter the member details which you going to remove from the replica-set
Member:Port --------> arbitervip:27727
arbitervip:27727
Do you really want to remove [yes(y)/no(n)]: y
步骤 12从集群管理器运行此命令以验证是否已将仲裁程序从删除 set07
,的输出 set07
不能包含当前仲裁者。
#diagnostics.sh --get_replica_status
Expected output:
----------|
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set07 |
| Status via sessionmgr01:27727 sessionmgr02:27727 |
| Member-1 - 27727 : - SECONDARY - sessionmgr01 - ON-LINE - 0 sec -|
| Member-2 - 27727 : - PRIMARY - sessionmgr02 - ON-LINE - -------- -|
|----------------------------------------------------------------------------------------------------------------------------------------|
步骤 13更新 mongoConfig.cfg
文件,以便在修改的副本集中具有正确的仲裁器。使用新的仲裁器(ARBITER=new-arbiter)替换当前仲裁器(ARBITER=arbiter)。从集群管理器运行此命令。
#vi /etc/broadhop/mongoConfig.cfg
当前配置
[SESSION-SET2]
SETNAME=set07
OPLOG_SIZE=5120
ARBITER=arbitervip:27727
ARBITER_DATA_PATH=/var/data/sessions.7
MEMBER1=sessionmgr02:27727
MEMBER2=sessionmgr01:27727
DATA_PATH=/var/data/sessions.1/2
[SESSION-SET2-END]
所需的配置:
[SESSION-SET2]
SETNAME=set07
OPLOG_SIZE=5120
ARBITER=new-arbiter:27727
ARBITER_DATA_PATH=/var/data/sessions.7
MEMBER1=sessionmgr02:27727
MEMBER2=sessionmgr01:27727
DATA_PATH=/var/data/sessions.1/2
[SESSION-SET2-END]
步骤 14复制更新的 mongoConfig.cfg
文件到所有VM。从集群管理器运行此命令。
#copytoall.sh /etc/broadhop/mongoConfig.cfg /etc/broadhop/mongoConfig.cfg
步骤 15将新的仲裁器成员添加到set07。从Cluster Manager,运行 /var/qps/install/current/scripts/build/build_etc.sh
命令,以生成 /etc/directory
.
步骤 16在运行Replica集后,验证是否已将新的仲裁器成员添加到副本集 build_etc.sh
脚本,现在您必须等待AIDO服务器使用新仲裁程序创建/更新副本集。
#diagnostics.sh --get_replica_status
Expected Output:
| SET NAME - PORT : IP ADDRESS - REPLICA STATE - HOST NAME - HEALTH - LAST SYNC -PRIORITY
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set07 |
| Status via arbitervip:27727 sessionmgr01:27727 sessionmgr02:27727 |
| Member-1 - 27727 : - SECONDARY - sessionmgr01 - ON-LINE - 0 sec - 2 |
| Member-2 - 27727 : xx.xx.xx.xx - ARBITER - new-arbiter - ON-LINE - -------- - 0 |
| Member-3 - 27727 : - PRIMARY - sessionmgr02 - ON-LINE - -------- - 3 |
|-------------------------------------------|
注意:如果未添加新的仲裁程序成员,请继续执行后续步骤。否则,请导航至步骤18。
步骤 17从群集管理器运行此命令,以便强制添加新的仲裁器成员。
#build_set.sh --DB_NAME --add-members --setname Setxxx --force
步骤 18.如果仲裁器端口尚未启动,请从新的仲裁器节点运行此命令以启动相同的仲裁器端口。
Command syntax:
#/etc/init.d/sessionmgr-XXXXX start
Sample command:
#/etc/init.d/sessionmgr-27727 start
步骤 19.确认新仲裁程序添加成功。
#diagnostics.sh --get_replica_status
步骤 20.从集群管理器运行此命令可相应地更新数据库优先级。
# cd /var/qps/bin/support/mongo/
# ./set_priority.sh --db session
# ./set_priority.sh --db spr
# ./set_priority.sh --db admin
# ./set_priority.sh --db balance
# ./set_priority.sh --db audit
# ./set_priority.sh --db report
步骤 21.从群集管理器运行此命令以验证复制副本集中的更改。
#diagnostics.sh --get_replica_status
Expected Output:
| SET NAME - PORT : IP ADDRESS - REPLICA STATE - HOST NAME - HEALTH - LAST SYNC -PRIORITY
|----------------------------------------------------------------------------------------------------------------------------------------|
| SESSION:set07 |
| Status via arbitervip:27727 sessionmgr01:27727 sessionmgr02:27727 |
| Member-1 - 27727 : - SECONDARY - sessionmgr01 - ON-LINE - 0 sec - 2 |
| Member-2 - 27727 : xx.xx.xx.xx - ARBITER - new-arbiter - ON-LINE - -------- - 0 |
| Member-3 - 27727 : - PRIMARY - sessionmgr02 - ON-LINE - -------- - 3 |
|-------------------------------------------|
步骤 22.验证mon_db脚本是否已在pcrfclient VM上还原。否则,您必须手动启动它们。
#monsum | grep mon_db_for
要启用mon_db脚本,请登录所有pcrfclient VM并运行以下命令:
# monit start mon_db_for_lb_failover
# monit start mon_db_for_callmodel