المحتويات

المقدمة

المتطلبات الأساسية

المتطلبات

المكونات المستخدمة

معلومات أساسية

المشكلة

إجراء إستعادة CRD من الحالة السيئة

الاقتراب 1.

الاقتراب 2.

المقدمة

يصف هذا المستند إجراء إستعادة جدول البيانات المرجعية المخصصة (CRD) لمجموعة سياسات Cisco (CPS) من الحالة السيئة.

المتطلبات الأساسية

المتطلبات

توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:

- لينكس

- CPS

- مونغو دي بي

cisco يوصي أن أنت ينبغي يتلقى امتياز منفذ:

- الوصول الجذري إلى واجهة سطر الأوامر (CLI) ل CPS

- وصول المستخدم "QNS-SVN" إلى واجهة المستخدم الرسومية (GUIs) عبر بروتوكول CPS (أداة إنشاء السياسة و CPS Central)

المكونات المستخدمة

تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:

- CPS 20.2

- MongoDB الإصدار 3.6.17

- UCS-B

تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.

معلومات أساسية

في CPS، يتم إستخدام جدول CRD لتخزين معلومات تكوين السياسة المخصصة التي يتم نشرها من Policy Builder وترتبط ب CRD DB الموجودة في مثيل MongoDB المستضاف في جلسة العمل. يتم إجراء عمليات التصدير والاستيراد في جدول CRD من خلال واجهة المستخدم الرسومية (GUI) المركزية ل CPS من أجل معالجة بيانات جدول CRD.

المشكلة

إذا كان هناك أي نوع من الخطأ عند تنفيذ إستيراد كل العمليات، يقوم CPS بإيقاف العملية، ويعين النظام في حالة سيئة ويحظر تنفيذ واجهات برمجة تطبيقات CRD. يرسل CPS إستجابة خطأ إلى العميل الذي يفيد بأن النظام في حالة سيئة. إذا كان النظام في حالة سيئة وقمت بإعادة تشغيل خادم Quantum Network Suite (QNS)/User Data Channel (UDC)، فإن ذاكرة التخزين المؤقت ل CRD يتم بناؤها باستخدام بيانات Gold-crd. إذا كانت حالة خطأ النظام FALSE، فسيتم بناء ذاكرة التخزين المؤقت ل CRD باستخدام MongoDB.

فيما يلي صور الخطأ المركزي ل CPS للمرجع.

إذا كان نظام CRD سيئ، فعندئذ:

1. تم حظر التلاعب في CRD. يمكنك عرض البيانات فقط.

2. تم حظر واجهات برمجة تطبيقات CRD، باستثناء _import_all، _list، _query.

3. إعادة تشغيل QNS يلتقط بيانات CRD من موقع Golden-CRD.

4. إعادة تشغيل QNS/UDC لا يعمل على إصلاح حالة عدم إستجابة النظام أو عمليات إسقاط الاستدعاء، بل يعمل فقط على إنشاء ذاكرة تخزين مؤقت ل CRD من Golden-CRD.

5. ذاكرة تخزين مؤقت طراز CRD تم تصميمها باستخدام بيانات قائمة على بطاقات Gold-crd. إذا كانت حالة BAD الخاصة بالنظام هي FALSE، فسيتم بناء ذاكرة تخزين مؤقت ل CRD باستخدام MongoDB.

فيما يلي الرسائل المقترنة في CPS QNS.log:

qns02 qns02 2021-07-29 11:16:50,820 [pool-50847-thread-1]

INFO c.b.c.i.e.ApplicationInterceptor - System -

CRD is in bad state. All CRD APIs (except import all, list and query),

are blocked and user is not allowed to use.

Please verify your crd schema/crd data and try again!

qns02 qns02 2021-07-28 11:33:59,788 [pool-50847-thread-1]

WARN c.b.c.i.CustomerReferenceDataManager -

System is in BAD state. Data will be fetched from svn golden-crd repository.

qns01 qns01 2021-07-28 11:55:24,256 [pool-50847-thread-1]

WARN c.b.c.i.e.ApplicationInterceptor - ApplicationInterceptor: Is system bad: true

إجراء إستعادة CRD من الحالة السيئة

الاقتراب 1.

لمسح حالة النظام، تحتاج إلى إستيراد مخطط CRD صحيح وصحح من Policy Builder الذي يتضمن إستيراد بيانات CRD صالحة من CPS Central، إذا نجح إستيراد الكل، فيقوم بمسح حالة النظام ويتم إلغاء حظر جميع واجهات برمجة التطبيقات والعمليات الخاصة ب CRD.

فيما يلي الخطوات التفصيلية:

الخطوة 1. قم بتشغيل هذا الأمر لإجراء نسخ إحتياطي لقاعدة بيانات CRD.

Command template:

#mongodump --host <session_manager> --port <cust_ref_data_port>

--db cust_ref_data -o cust_ref_data_backup

Sample command:

#mongodump --host sessionmgr01 --port 27717 --db cust_ref_data -o cust_ref_data_backup

ملاحظة: بالنسبة لمضيف ومنفذ CRD DB، ارجع إلى تكوين البيانات المرجعية المخصصة في PB كما هو موضح في هذه الصورة.

الخطوة 2. قم بإسقاط جدول CRD (DB بالكامل) باستخدام هذا الإجراء.

الخطوة 2.1. قم بتسجيل الدخول إلى مثيل أحادي حيث يوجد CRD DB.

Command template:

#mongo --host <sessionmgrXX> --port <cust_ref_data_port>

Sample command:

#mongo --host sessionmgr01 --port 27717

الخطوة 2.2. قم بتشغيل هذا الأمر لعرض جميع قواعد البيانات (DB) الموجودة في مثيل مونغو.

set01:PRIMARY> show dbs

admin 0.031GB

config 0.031GB

cust_ref_data 0.125GB

local 5.029GB

session_cache 0.031GB

sk_cache 0.031GB

set01:PRIMARY>

الخطوة 2.3. قم بتشغيل هذا الأمر للتبديل إلى قاعدة بيانات CRD.

set01:PRIMARY> use cust_ref_data

switched to db cust_ref_data

set01:PRIMARY

الخطوة 2.4. قم بتشغيل هذا الأمر لإسقاط قاعدة بيانات CRD.

set01:PRIMARY> db.dropDatabase()

{

"dropped" : "cust_ref_data",

"ok" : 1,

"operationTime" : Timestamp(1631074286, 13),

"$clusterTime" : {

"clusterTime" : Timestamp(1631074286, 13),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}}}

set01:PRIMARY>

الخطوة 3. تحقق من عدم وجود db بالاسم cust_ref_data مع الأمر show dbs.

set01:PRIMARY> show dbs

admin 0.031GB

config 0.031GB

local 5.029GB

session_cache 0.031GB

sk_cache 0.031GB

set01:PRIMARY>

الخطوة 4. قم بتسجيل الدخول إلى منشئ النهج باستخدام مستخدم "qns-svn" ونشر مخطط CRD صالح.

الخطوة 5. قم بإعادة تشغيل عملية QNS على كافة العقد باستخدام restarlong.sh من مدير نظام المجموعة.

الخطوة 6. تحقق من أن التشخيصات جيدة ومن عدم وجود إدخال في جدول CRD. يجب أن يكون هناك مخطط موجود فقط في جداول CRD، أي بدون أية بيانات.

الخطوة 7. قم بتسجيل الدخول إلى CPS Central مع مستخدم "qns-svn" واستيراد بيانات CRD صالحة.

الخطوة 8. تحقق من ذلك، إستيراد كافة المرتجعات الناجحة ورسالة الخطأ "system - CRD BAD" غير المعروضة في CPS Central.

الخطوة 9. تحقق من ذلك، تم الآن إلغاء حظر جميع واجهات برمجة تطبيقات CRD، يمكنك معالجة بيانات CRD الآن.

إذا لم ينجح الاقتراب الاول، فابحثوا عن الاقتراب الثاني.

الاقتراب 2.

الخطوة 1. حدد المضيف والمنفذ الذي تتم فيه إستضافة مثيل Admin DB Mongo باستخدام الأمر diagnostics.sh — get_r.

[root@installer ~]# diagnostics.sh --get_r

CPS Diagnostics HA Multi-Node Environment

---------------------------

Checking replica sets...

|----------------------------------------------------------------------------------------------------------------------------------------|

| Mongo:v3.6.17 MONGODB REPLICA-SETS STATUS INFORMATION Date : 2021-09-14 02:56:23 |

|----------------------------------------------------------------------------------------------------------------------------------------|

| SET NAME - PORT : IP ADDRESS - REPLICA STATE - HOST NAME - HEALTH - LAST SYNC - PRIORITY |

|----------------------------------------------------------------------------------------------------------------------------------------|

| ADMIN:set06 |

| Status via arbitervip:27721 sessionmgr01:27721 sessionmgr02:27721 |

| Member-1 - 27721 : - PRIMARY - sessionmgr01 - ON-LINE - -------- - 3 |

| Member-2 - 27721 : - SECONDARY - sessionmgr02 - ON-LINE - 1 sec - 2 |

| Member-3 - 27721 : 192.168.10.146 - ARBITER - arbitervip - ON-LINE - -------- - 0 |

|----------------------------------------------------------------------------------------------------------------------------------------|

الخطوة 2. قم بتسجيل الدخول إلى مثيل mongo حيث يكون DB الخاص بالمسؤول موجودا.

Command template:

#mongo --host <sessionmgrXX> --port <Admin_DB__port>

Sample Command:

#mongo --host sessionmgr01 --port 27721

الخطوة 3. قم بتشغيل هذا الأمر لعرض كافة قواعد البيانات (DB) الموجودة في مثيل مونغو.

set06:PRIMARY> show dbs

admin 0.078GB

config 0.078GB

diameter 0.078GB

keystore 0.078GB

local 4.076GB

policy_trace 2.078GB

queueing 0.078GB

scheduler 0.078GB

sharding 0.078GB

set06:PRIMARY>

الخطوة 4. قم بتشغيل هذا الأمر للتبديل إلى قاعدة بيانات المسؤول.

set06:PRIMARY> use admin

switched to db admin

set06:PRIMARY>

الخطوة 5. قم بتشغيل هذا الأمر لعرض كافة الجداول الموجودة في قاعدة بيانات المسؤول.

set06:PRIMARY> show tables

state

system.indexes

system.keys

system.version

set06:PRIMARY>

الخطوة 6. قم بتشغيل هذا الأمر للتحقق من الحالة الحالية للنظام.

set06:PRIMARY> db.state.find()

{ "_id" : "state", "isSystemBad" : true, "lastUpdatedDate" : ISODate("2021-08-11T15:01:13.313Z") }

set06:PRIMARY>

هنا، يمكنك أن ترى أن هو SystemBad" صحيح. لذلك، يجب تحديث هذا الحقل إلى false" من أجل مسح حالة CRD BAD، باستخدام الأمر المتوفر في الخطوة التالية.

الخطوة 7. قم بتحديث الحقل "isSystemBAD" باستخدام الأمر db.state.updateOne({_id:"state"}}،{$set:{isSystemBad:false}}).

set06:PRIMARY> db.state.updateOne({_id:"state"},{$set:{isSystemBad:false}})

{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }

set06:PRIMARY>

الخطوة 8. قم بتشغيل الأمر db.state.find() للتحقق مما إذا كانت قيمة حقل isSystemBad قد تغيرت إلى false.

set06:PRIMARY> db.state.find()

{ "_id" : "state", "isSystemBad" : false, "lastUpdatedDate" : ISODate("2021-08-11T15:01:13.313Z") }

set06:PRIMARY>

الخطوة 9. تحقق من إلغاء حظر جميع واجهات برمجة تطبيقات CRD الآن، يمكنك معالجة بيانات CRD الآن.