المقدمة
يصف هذا المستند إجراء إستعادة جدول البيانات المرجعية المخصصة (CRD) لمجموعة سياسات Cisco (CPS) من الحالة السيئة.
المتطلبات الأساسية
المتطلبات
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
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 سيئ، فعندئذ:
- تم حظر التلاعب في CRD. يمكنك عرض البيانات فقط.
- تم حظر واجهات برمجة تطبيقات CRD، باستثناء _import_all، _list، _query.
- إعادة تشغيل QNS يلتقط بيانات CRD من موقع Golden-CRD.
- إعادة تشغيل QNS/UDC لا يعمل على إصلاح حالة عدم إستجابة النظام أو عمليات إسقاط الاستدعاء، بل يعمل فقط على إنشاء ذاكرة تخزين مؤقت ل CRD من Golden-CRD.
- ذاكرة تخزين مؤقت طراز 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 الآن.