من هو هذا المقال ل؟
قد تكون هذه المقالة ذات أهمية لمسؤولي النظام الذين واجهوا مهمة إنشاء خدمة وظائف "لمرة واحدة".
فاتحة
طُلب من قسم دعم تكنولوجيا المعلومات بشركة نامية تتطور ديناميكياً ولديها شبكة إقليمية صغيرة تنظيم "محطات خدمة ذاتية" لاستخدامها من قبل عملائها الخارجيين. كان من المفترض أن يتم استخدام بيانات المحطة للتسجيل على بوابات الشركة الخارجية وتنزيل البيانات من الأجهزة الخارجية والعمل مع البوابات الحكومية.
كان الجانب المهم هو حقيقة أن معظم البرامج يتم "شحذها" لنظام MS Windows (على سبيل المثال ، "الإعلان") ، وعلى الرغم من التحرك نحو التنسيقات المفتوحة ، يظل MS Office هو المعيار المهيمن في تبادل المستندات الإلكترونية. وبالتالي ، لم نتمكن من رفض MS Windows عند حل هذه المشكلة.
كانت المشكلة الرئيسية هي إمكانية تجميع البيانات المختلفة من جلسات المستخدم ، مما قد يؤدي إلى تسربها إلى جهات خارجية.
هذا الموقف بالفعل السماح MFC لأسفل . ولكن على عكس مؤسسة التمويل الأصغر شبه القضائية (مؤسسة الحكم الذاتي) ، سيتم معاقبة المنظمات غير الحكومية أكثر من هذا النوع من أوجه القصور. كانت المشكلة الحرجة التالية هي الحاجة إلى العمل مع وسائط التخزين الخارجية ، والتي سيكون عليها ، بكل الوسائل ، مجموعة من البرامج الضارة. تم اعتبار احتمال دخول البرامج الضارة من الإنترنت أقل ترجيحًا بسبب تقييد الوصول إلى الإنترنت عبر قائمة بيضاء من العناوين ، وانضم موظفو الإدارات الأخرى إلى وضع المتطلبات ، وجعل متطلباتهم ورغباتهم ، وكانت المتطلبات النهائية تبدو كما يلي:
هو متطلبات- بعد الاستخدام ، يجب حذف جميع بيانات المستخدم (بما في ذلك الملفات المؤقتة ومفاتيح التسجيل).
- يجب الانتهاء من جميع العمليات التي أطلقها المستخدم في نهاية العمل.
- الوصول إلى الإنترنت من خلال قائمة بيضاء من العناوين.
- قيود على القدرة على تشغيل كود الطرف الثالث.
- إذا كانت الجلسة في وضع الخمول لأكثر من 5 دقائق ، فيجب أن تنتهي الجلسة تلقائيًا ، ويجب أن تجري المحطة عملية تنظيف.
متطلبات العملاء- عدد محطات العميل لكل فرع لا يزيد عن 4.
- الحد الأدنى لوقت الانتظار لاستعداد النظام ، من اللحظة التي جلست فيها على الكرسي إلى بداية العمل مع برنامج العميل.
- القدرة على توصيل الأجهزة الطرفية (الماسحات الضوئية ، محركات أقراص فلاش) مباشرة من موقع التثبيت لـ "محطة الخدمة الذاتية".
- رغبات العملاء
- مظاهرة مواد إعلانية (صور) في وقت إغلاق المجمع.
دقيق الإبداع
بعد لعبنا بما فيه الكفاية مع Windows livecd ، توصلنا إلى نتيجة بالإجماع بأن الحل الناتج لا يفي بثلاث نقاط مهمة على الأقل. يتم تحميلها إما لفترة طويلة ، أو غير حية تمامًا ، أو يرتبط تخصيصها بالألم البري. ربما بحثنا بشكل سيئ ، ويمكنك تقديم المشورة لمجموعة من بعض الأدوات ، وسأكون ممتنا.
علاوة على ذلك ، بدأنا نتطلع إلى VDI ، ولكن بالنسبة لهذه المهمة ، فإن معظم الحلول إما مكلفة للغاية أو تتطلب عناية وثيقة. وأردت أداة بسيطة بأدنى قدر من السحر ، يمكن حل معظم المشكلات الخاصة بها بمجرد إعادة تشغيل / إعادة تشغيل الخدمة. لحسن الحظ ، كان لدينا أجهزة الخادم ، فئة منخفضة النهاية في الفروع ، من الخدمة التي توقفت عن العمل ، والتي يمكننا استخدامها للقاعدة التكنولوجية.
ما هي النتيجة؟ لكنني لن أكون قادرًا على إخبارك بما حدث في النهاية ، لأن التجمع الوطني الديمقراطي ، ولكن في عملية البحث ، قمنا بتطوير مخطط مثير للاهتمام أظهر نفسه جيدًا في الاختبارات المعملية ، رغم أنه لم يدخل في سلسلة.
بعض إخلاء المسئولية: لا يدعي المؤلف أن الحل المقترح يحل جميع المهام تمامًا ويفعلها طوعًا ومع الأغنية. يوافق المؤلف مقدمًا على التصريح الذي مفاده أن سين إنجليش برش هي زهرة شليخت. نظرًا لأن الحل لم يعد قيد التطوير ، لا يمكنك الاعتماد على إصلاح الخلل أو التغيير في الوظيفة ، فكل شيء في يديك. يفترض المؤلف أنك على الأقل على دراية بـ KVM وقرأت مقالة مراجعة على بروتوكول Spice ، وأنك عملت قليلاً مع Centos أو توزيع GNU Linux آخر.
في هذه المقالة ، أود تحليل العمود الفقري للحل الناتج ، أي تفاعل العميل والخادم وجوهر العمليات على دورة حياة الأجهزة الافتراضية ضمن إطار الحل المعني. إذا كانت المقالة مثيرة للاهتمام للجمهور ، فسوف أصف تفاصيل تنفيذ الصور الحية لإنشاء عملاء رفيعين على أساس Fedora وأخبرهم عن تفاصيل ضبط الأجهزة الافتراضية وخوادم KVM لتحسين الأداء والأمان.
إذا كنت تأخذ ورقة ملونة ،
الدهانات والفرش والغراء ،
وأكثر من ذلك ببراعة ...
يمكنك جعل مائة روبل!
مخطط ووصف اختبار مقاعد البدلاء

تقع جميع المعدات داخل الشبكة الفرعية ، فقط قناة الإنترنت تنطفئ. تاريخياً ، كان هناك بالفعل خادم وكيل ، إنه شيء غير عادي. ولكن من بين الأشياء الأخرى ، سيتم تصفية حركة المرور من الأجهزة الظاهرية (abbr. VM لاحقًا في النص). لا شيء يمنع وضع هذه الخدمة على خادم KVM ، الشيء الوحيد الذي تحتاج إلى مشاهدته هو كيف يتغير الحمل منه على النظام الفرعي للقرص.
محطة العميل - في الواقع ، "محطات الخدمة الذاتية" ، "الواجهة الأمامية" لخدمتنا. هي صافرة لينوفو IdeaCentre. ما هي هذه الوحدة جيدة ل؟ نعم ، الجميع تقريبا ، سعداء بشكل خاص بالعدد الكبير من موصلات USB وقارئات البطاقات على اللوحة الأمامية. في مخططنا ، يتم إدخال بطاقة SD مع حماية ضد كتابة الأجهزة في قارئ البطاقات ، حيث يتم تسجيل الصورة الحية المعدلة لـ Fedora 28. بالطبع ، يتم توصيل الشاشة ولوحة المفاتيح والماوس بالشبكة.
Switch - مفتاح تبديل غير ملحوم بالأجهزة من المستوى الثاني ، يوجد في غرفة الخادم ويومض بالأضواء. إنه غير متصل بأي شبكات باستثناء شبكة "محطات الخدمة الذاتية".
KVM_Server هو جوهر الدائرة ، ففي اختبارات مقاعد البدلاء ، قام Core 2 Quad Q9650 بسعة 8 جيجابايت من ذاكرة الوصول العشوائي بسحب 3 من الأجهزة الظاهرية بنظام Windows 10 بثقة. النظام الفرعي للقرص - adaptec 3405 2 محركات Raid 1 + SSD. في التجارب الميدانية لجهاز Xeon 1220 ، تمكنت محركات LSI 9260 + SSD الأكثر خطورة من سحب 5-6 VMs بسهولة. سوف نحصل على الخادم من الخدمة المتقاعدة ، لن يكون هناك الكثير من التكاليف الرأسمالية. يتم نشر نظام المحاكاة الافتراضية KVM مع pool_Vm pool machine الظاهري على هذا الخادم (الخوادم).
Vm هو الجهاز الظاهري ، الخلفية من خدمتنا. هذا هو عمل المستخدم.
Enp5s0 هي واجهة شبكة تتطلع إلى شبكة "محطات الخدمة الذاتية" و dhcpd و ntpd و httpd مباشرة على ذلك ، وتستمع xinetd إلى منفذ "الإشارة".
Lo0 هو واجهة الاسترجاع الزائفة. المعيار.
Spice_console - شيء مثير للاهتمام للغاية ، والحقيقة هي أنه ، على عكس RDP الكلاسيكية ، عند تشغيل حزمة بروتوكول KVM + Spice ، يظهر كيان إضافي - منفذ وحدة التحكم في الجهاز الظاهري. في الواقع ، عند الاتصال بمنفذ TCP هذا ، نحصل على وحدة Vm ، دون الحاجة للاتصال بـ Vm من خلال واجهة شبكتها. كل التفاعل مع Vm لنقل الإشارات ، الخادم يأخذ. أقرب التناظرية في وظيفة هو IPKVM. أي يتم نقل صورة لشاشة VM إلى هذا المنفذ ، ويتم إرسال البيانات المتعلقة بحركة الماوس إليها ، ويسمح لك التفاعل (الأهم من ذلك) عبر بروتوكول Spice بإعادة توجيه أجهزة USB بسلاسة إلى جهاز افتراضي ، كما لو كان هذا الجهاز متصلاً بـ Vm نفسه. تم اختباره لمحركات الأقراص المحمولة والماسحات الضوئية وكاميرات الويب.
Vnet0 ، virbr0 وبطاقات الشبكة الافتراضية Vm تشكل شبكة من الأجهزة الافتراضية.
كيف يعمل؟
من محطة العميل
يتم تحميل محطة العميل في الوضع الرسومي من صورة حية معدلة من فيدورا 28 ، يتلقى عنوان IP عن طريق dhcp من مساحة عنوان الشبكة 169.254.24.0/24. أثناء عملية التمهيد ، يتم إنشاء قواعد جدار الحماية التي تسمح بالاتصال بمنافذ خادم "الإشارة" و "التوابل". بعد اكتمال التنزيل ، تنتظر المحطة إذن مستخدم العميل. بعد إذن المستخدم ، يتم تشغيل مدير سطح المكتب "openbox" ويتم تنفيذ البرنامج النصي لبدء التشغيل التلقائي نيابة عن المستخدم المعتمد. من بين أشياء أخرى ، يقوم برنامج التشغيل التلقائي بتشغيل البرنامج النصي remote.sh.
$ HOME / .config / openbox / scripts / remote.sh /etc/client.conf server_ip=169.254.24.1 vdi_signal_port=5905 vdi_spice_port=5906 animation_folder=/usr/share/backgrounds/animation background_folder=/usr/share/backgrounds2/fedora-workstation
وصف متغيرات ملف client.conf
server_ip - عنوان KVM_Server
vdi_signal_port - منفذ KVM_Server الذي xinetd "يجلس"
vdi_spice_port - منفذ الشبكة KVM_Server ، حيث سيتم إعادة توجيه طلب الاتصال من عميل المشاهد عن بعد إلى منفذ التوابل الخاص بـ Vm المحدد (التفاصيل أدناه)
animation_folder - المجلد حيث يتم التقاط الصور من الرسوم المتحركة للرسوم المتحركة الهراء
background_folder - المجلد حيث يتم التقاط الصور من أجل العروض الاحتياطية. المزيد عن الرسوم المتحركة في الجزء التالي من المقالة.
يأخذ البرنامج النصي remote.sh الإعدادات من ملف التكوين /etc/client.conf ويستخدم nc للاتصال بمنفذ "vdi_signal_port" لخادم KVM ويتلقى دفق بيانات من الخادم ، ومن بينها يتوقع سلسلة "RULE ADDED ، CONNECT NOW". عند استلام الخط المرغوب ، تبدأ عملية العارض عن بُعد في وضع الكشك ، مما يؤدي إلى إنشاء اتصال بمنفذ الخادم "vdi_spice_port". يتم تعليق تنفيذ البرنامج النصي حتى نهاية تنفيذ العارض عن بعد.
يقوم المشاهد عن بعد الذي يتصل بمنفذ "vdi_spice_port" ، نظرًا لإعادة التوجيه من جانب الخادم ، بالوصول إلى منفذ "spice_console" في الواجهة lo0 ، أي إلى وحدة تحكم الجهاز الظاهري وعمل المستخدم يتم مباشرة. أثناء انتظار الاتصال ، يتم عرض رسوم متحركة هزلية للمستخدم ، في شكل عرض شرائح لملفات jpeg ، يتم تحديد المسار إلى الدليل مع الصور بواسطة قيمة متغير animation_folder من ملف التكوين.
في حالة فقد الاتصال بمنفذ "spice_console" الخاص بالجهاز الظاهري ، مما يشير إلى إيقاف تشغيل / إعادة تشغيل الجهاز الظاهري (أي النهاية الفعلية لجلسة المستخدم) ، يتم إنهاء جميع العمليات التي تعمل نيابة عن المستخدم المصرح به ، مما يؤدي إلى إعادة تشغيل lightdm والعودة إلى شاشة التفويض .
من جانب خادم KVM
على منفذ "الإشارة" في بطاقة الشبكة ، ينتظر enp5s0 اتصال xinetd. بعد الاتصال بمنفذ "الإشارة" ، يقوم xinetd بتشغيل البرنامج النصي vm_manager.sh دون تمرير أي معلمات إدخال إليه وإعادة توجيه نتيجة البرنامج النصي إلى جلسة nc لمحطة العميل.
/etc/xinetd.d/test-server service vdi_signal { port = 5905 socket_type = stream protocol = tcp wait = no user = root server = /home/admin/scripts_vdi_new/vm_manager.sh }
/home/admin/scripts_vdi_new/vm_manager.sh /etc/vm_manager.confsrv_scripts_dir = / home / admin / scripts_vdi_new
srv_pool_size = 4
srv_start_port_pool = 5920
srv_tmp_dir = / tmp / vm_state
base_host = win10_2
input_iface = enp5s0
vdi_spice_port = 5906
count_conn_tryes = 10
وصف متغيرات ملف التكوين vm_manager.conf
srv_scripts_dir - مجلد موقع البرنامج النصي vm_manager.sh ، vm_connect.sh ، vm_delete.sh ، vm_create.sh ، vm_clear.sh
srv_pool_size - حجم تجمع Vm
srv_start_port_pool - المنفذ الأولي ، وبعد ذلك ستبدأ منافذ التوابل الخاصة بوحدات التحكم في الجهاز الظاهري
srv_tmp_dir - مجلد للملفات المؤقتة
base_host - base Vm (صورة ذهبية) يتم من خلالها استنساخ Vm في التجمع
input_iface - واجهة شبكة الخادم ، تتطلع نحو محطات العميل
vdi_spice_port - منفذ شبكة الخادم الذي سيتم منه إعادة توجيه طلب الاتصال من عميل العارض البعيد إلى منفذ التوابل الخاص بـ Vm المحدد
count_conn_tryes - مؤقت انتظار ، وبعد ذلك يعتبر أن اتصال Vm لم يحدث (للحصول على التفاصيل ، راجع vm_connect.sh)
يقرأ البرنامج النصي vm_manager.sh ملف التكوين من ملف vm_manager.conf ، ويقيم حالة الأجهزة الظاهرية في التجمع وفقًا لعدة معلمات ، وهي: كم عدد أجهزة VM التي يتم نشرها ، ما إذا كانت هناك VMs نظيفة مجانية. للقيام بذلك ، يقوم بقراءة ملف clear.list الذي يحتوي على أرقام منافذ "spice_console" الخاصة بالأجهزة الظاهرية "التي تم إنشاؤها حديثًا" (انظر دورة إنشاء VM أدناه) ويتحقق من وجود اتصال ثابت بها. إذا تم الكشف عن منفذ به اتصال شبكة مؤسس (والذي يجب ألا يكون مطلقًا) ، يتم عرض تحذير ويتم نقل المنفذ إلى النفايات. قائمة عند العثور على المنفذ الأول من ملف clear.list الذي لا يوجد به اتصال حاليًا ، يقوم vm_manager.sh باستدعاء البرنامج النصي vm_connect.sh ويمر له كمعلمة عدد هذا المنفذ.
/home/admin/scripts_vdi_new/vm_connect.sh يقدم البرنامج النصي vm_connect.sh قواعد جدار الحماية التي تنشئ إعادة توجيه "vdi_spice_port" لمنفذ الخادم بواجهة enp5s0 إلى "منفذ وحدة التحكم في spice" من VM الموجود على واجهة خادم lo0 ، وتمريرها كمعلمة بدء التشغيل. يتم نقل المنفذ إلى conn_wait.list ، ويعتبر VM في انتظار الاتصال. يتم إرسال خط RULE ADDED ، CONNECT NOW إلى جلسة محطة العميل على منفذ "الإشارة" الخاص بالخادم ، والذي يتوقعه البرنامج النصي البعيد. تبدأ دورة انتظار الاتصال بعدد المحاولات التي تحددها قيمة المتغير "count_conn_tryes" من ملف التكوين. كل ثانية في جلسة nc ، سيتم إعطاء السلسلة "RULE ADDED ، CONNECT NOW" وسيتم التحقق من الاتصال الذي تم تأسيسه على منفذ "spice_console".
إذا فشل الاتصال لعدد معين من المحاولات ، فسيتم نقل منفذ spice_console مرة أخرى لمسح. قائمة اكتمال تنفيذ vm_connect.sh ، يتم استئناف تنفيذ vm_manager.sh ، والذي يبدأ دورة التنظيف.
إذا كانت "محطة العميل" تتصل بمنفذ spice_console على الواجهة lo0 ، فسيتم حذف قواعد جدار الحماية التي تنشئ إعادة توجيه بين منفذ خادم spice ومنفذ spice_console ويتم الحفاظ على الاتصال بشكل أكبر من خلال آلية لتحديد حالة جدار الحماية. في حالة وجود اتصال غير متصل ، ستفشل إعادة الاتصال بمنفذ spice_console. يتم نقل منفذ spice_console إلى قائمة النفايات. تعتبر VM متسخة ولا يمكنها العودة إلى مجموعة الأجهزة الظاهرية النظيفة دون المرور عبر التنظيف. اكتمال تنفيذ vm_connect.sh ، واستئناف تنفيذ vm_manager.sh ، والذي يبدأ دورة التنظيف.
تبدأ دورة التنظيف من خلال النظر إلى ملف قائمة النفايات ، حيث يتم نقل أرقام وحدة التحكم في spice من منافذ الجهاز الظاهري التي تم تأسيس الاتصال بها. يتم تحديد وجود اتصال نشط على كل منفذ spice_console من القائمة. إذا لم يكن هناك اتصال ، فيُعتبر أن الجهاز الظاهري لم يعد قيد الاستخدام وأنه تم نقل المنفذ إلى قائمة التدوير ، وبدأت عملية حذف الجهاز الظاهري (انظر أدناه) الذي ينتمي إليه هذا المنفذ. إذا تم اكتشاف اتصال شبكة نشط على المنفذ ، فمن المفترض أن الجهاز الظاهري قيد الاستخدام ، ولا يتم اتخاذ أي إجراء بشأنه. إذا لم يتم استغلال المنفذ ، فمن المفترض أن يتم إيقاف تشغيل VM ولم تعد هناك حاجة إليه. يتم نقل المنفذ إلى recycle.list وتبدأ عملية إزالة الجهاز الظاهري. للقيام بذلك ، يتم استدعاء البرنامج النصي vm_delete.sh ، حيث يتم نقل رقم "spice_console" إلى منفذ VM كمعلمة ، والتي يجب حذفها.
/home/admin/scripts_vdi_new/vm_delete.sh تعتبر إزالة الجهاز الظاهري عملية تافهة إلى حد ما ، ويحدد البرنامج النصي vm_delete.sh اسم الجهاز الظاهري الذي يملك المنفذ الذي تم تمريره كمعلمة بدء التشغيل. يتم فرض VM للتوقف ، تتم إزالة VM من برنامج Hypervisor ، ويتم حذف القرص الثابت الظاهري لهذا الجهاز. تتم إزالة منفذ spice_console من قائمة التدوير. ينتهي تنفيذ vm_delete.sh ، يستأنف تنفيذ vm_manager.sh
يبدأ البرنامج النصي vm_manager.sh ، في نهاية العمليات لتنظيف الأجهزة الظاهرية غير الضرورية من قائمة النفايات. قائمة دورة إنشاء أجهزة افتراضية في التجمع.
تبدأ العملية بتحديد منافذ spice_console المتاحة للاستضافة. للقيام بذلك ، استنادًا إلى معلمة ملف التكوين "srv_start_port_pool" الذي يعين منفذ البدء للتجمع "spice_console" من الأجهزة الظاهرية والمعلمة "srv_pool_size" ، التي تحدد الحد الأقصى لعدد الأجهزة الظاهرية ، يتم تعداد كافة متغيرات المنفذ الممكنة بالتسلسل. لكل منفذ محدد ، يتم البحث عنه في clear.list، waste.list، conn_wait.list، recycle.list. إذا تم العثور على منفذ في أي من هذه الملفات ، يعتبر المنفذ مشغولاً ويتم تخطيه. إذا لم يتم العثور على المنفذ في الملفات المحددة ، فسيتم إدخاله في ملف recycle.list وتبدأ عملية إنشاء جهاز افتراضي جديد. للقيام بذلك ، يتم استدعاء البرنامج النصي vm_create.sh الذي يتم من خلاله تمرير رقم spice_console للمنفذ الذي تريد إنشاء VM له كمعلمة.
/home/admin/scripts_vdi_new/vm_create.sh عملية إنشاء جهاز افتراضي جديد
يقرأ البرنامج النصي vm_create.sh من ملف التكوين قيمة المتغير "base_host" الذي يحدد نموذج الجهاز الظاهري الذي سيتم إجراء عملية الاستنساخ عليه. إلغاء تحميل تكوين xml من VM من قاعدة بيانات برنامج Hypervisor ، ويقوم بإجراء سلسلة من الاختبارات qcow لصورة قرص VM ، وعند الانتهاء بنجاح ، يقوم بإنشاء ملف تكوين xml لـ VM الجديد وصورة قرص "clone مرتبط" من VM الجديد. بعد ذلك ، يتم تحميل تكوين xml الخاص بـ VM الجديد في قاعدة بيانات برنامج hypervisor ويبدأ تشغيله. يتم نقل منفذ spice_console من قائمة التدوير إلى قائمة. ينتهي تنفيذ vm_create.sh وينتهي تنفيذ vm_manager.sh.
في المرة التالية التي تتصل فيها ، تبدأ من البداية.
بالنسبة لحالات الطوارئ ، تشتمل المجموعة على برنامج نصي vm_clear.sh والذي يتم تشغيله قسريًا عبر جميع أجهزة VM من التجمع وإزالتها بتصفير قيم القوائم. يتيح لك الاتصال به في مرحلة التحميل بدء (تحت) VDI من نقطة الصفر.
/home/admin/scripts_vdi_new/vm_clear.sh في هذا أود أن أنهي الجزء الأول من قصتي. يجب أن يكون ما سبق كافياً لمسؤولي النظام لمحاولة underVDI في العمل. إذا وجد المجتمع هذا الموضوع مثيرًا للاهتمام ، في الجزء الثاني ، سأتحدث عن تعديل قرص حي Fedora وتحوله إلى كشك.