في لحظة معينة ، ظهرت مهمة - لنقل مشروع موجود ويعمل بنشاط في مشروع إنتاج للعمل في مجموعة خادم. لأن تم تطوير المشروع على أساس 1C-Bitrix ، تقرر بناء مجموعة باستخدام "1C-Bitrix: بيئة الويب". الغرض من هذا الحدث هو أن تكون قادرًا على تحمل الأحمال الثقيلة مع تدفق زوار الموقع ، بالإضافة إلى القدرة على التوسع أفقيًا بشكل أسرع في المستقبل.
في الواقع ، إذا انتقلنا إلى موقع البائع على الويب ، فسوف نرى ما يلي:
"1C-Bitrix: بيئة الويب" - يستخدم Linux للتثبيت السريع والسهل لجميع البرامج اللازمة لتشغيل منتجات وحلول 1C-Bitrix على أنظمة Linux الأساسية CentOS 6 (i386، x86_64) و CentOS 7 (x86_64). من الضروري التثبيت على CentOS "النظيف" ، بدون خادم ويب مثبت بالفعل.
بنية "1C-Bitrix: بيئة الويب" - يتضمن Linux: mysql-server و httpd و php و nginx و nodejs push-server و memcached و stunnel و catdoc و xpdf و munin و nagios و sphinx.
في الواقع ، تحتوي حزمة البرامج هذه على LAMP الذي تم تكوينه ، ولوحة تحكم خادم وحدة التحكم ، بالإضافة إلى الحزم الإضافية اللازمة لتشغيل بعض وحدات 1C-Bitrix. يتم تكوين جميع البرامج مع مراعاة ميزات 1C-Bitrix ، وهي:
- تم تثبيت الملحقات الضرورية (gd ، zip ، socket ، mbstring)
- تمكين دعم العلامات القصيرة
- يتم تعيين القيم الضرورية للمعلمات memory_limit و max_input_vars والوضع الآمن و opcache.validate_timestamps و opcache.revalidate_freq و mbstring.func_overload و default_charset و display_errors وما إلى ذلك.
- تعيين نفس المنطقة الزمنية لقاعدة البيانات ، php وعلى الخادم نفسه
- وغيرهم
هذا يسمح في معظم الحالات بعدم الانخراط في تكوين الخادم وضبطه.
لذلك ، كان لدينا خادمان تطبيق (دعنا نطلق عليهما app01 و app01) ، 2 خوادم ديسيبل (db01 ، db02) ، خادم واحد للتخزين المؤقت (cache01 ، كما تفهم) ، بشكل أكثر دقة ، كانت الفكرة هي تنفيذ بنية الكتلة بطريقة مماثلة. تم استلام خمسة خوادم لهذه الخطة ، مع تثبيت أحدث إصدارات centos7 عليها (للأسف ، ديبيان ، أوبونتو ، فيدورا ، ريل ، وما إلى ذلك ليست مناسبة) ، باستثناء نظام التشغيل ، لم يتم تثبيت أي شيء على الخوادم بعد الآن.
لأن إذا قمنا بتجميع مجموعة ، فمن الضروري تحديد أي من الخوادم سيكون هو الخادم الرئيسي. نظرًا لخصائص موازنة طلبات التطبيق ، فإن أحد الخوادم التي ستعمل فيها httpd سيحتوي أيضًا على nginx. سيقبل أيضًا جميع الطلبات الواردة ، ثم يعيد توجيه الطلب إلى إحدى عقد الويب المتاحة. لقد اخترنا الخادم الرئيسي app01.
ذهب العمل الإضافي وفقا للخطة التالية:
1. تثبيت bitrixenv
التثبيت لا يعني معرفة أو إدارة لينكس خارقة للطبيعة. نذهب إلى كل خادم عبر ssh وننفذ الأوامر التالية:
cd ~ wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh chmod +x bitrix-env.sh ./bitrix-env.sh
يجب تثبيت Bitrixenv على كافة الخوادم التي تم التخطيط لاستخدامها في المجموعة. حتى إذا كان الخادم سيعمل فقط كمثيل memcached ، فإن bitrixenv ضروري ، لأنه يسمح لك بإدارة الكتلة بأكملها من الخادم الرئيسي.
2. تكوين bitrixenv
لأن إذا استخدمنا حديقة الحيوانات بأكملها كمجموعة ، فيمكننا تكوين الخوادم من خلال قائمة البيئة في app01. للقيام بذلك ، انتقل إلى الخادم عبر ssh وقم بتشغيل الملف /root/menu.sh. في البداية ، تحتاج إلى تعيين كلمة مرور لمستخدم bitrix (يجب إجراء عملية مماثلة على جميع الخوادم حيث تتم جدولة تشغيل الموقع):

في الواقع ، هذا هو المستخدم الذي سيعمل التطبيق تحته. بعد ذلك ، نرى شاشة تعرض إنشاء تجمع خادم:

هنا نحتاج إلى تحديد عنصر القائمة الأول. في عملية إنشاء البيئة ، سيطلب اسم الخادم الحالي ، ثم نحدد app01:

بعد إنشاء التجمع ، نعود إلى الشاشة الأولى للبيئة ، ولكن هذه المرة هناك المزيد من النقاط المتاحة:

بشكل عام ، البيئة جاهزة ويمكنك استخدامها. إذا لم نكن بحاجة إلى كتلة ، فقد ننتهي هنا ، ولكننا سنذهب أبعد من ذلك.
نحتاج الآن إلى إضافة جميع الخوادم المتاحة إلى التجمع الذي تم إنشاؤه. للقيام بذلك ، استخدم عنصر القائمة الأول وانظر الخيارات التالية:

مرة أخرى ، حدد عنصر القائمة الأول ، وحدد عنوان IP للخادم الجديد واسمه في المجموعة (نفس app02 و db01 و db02 و cache01) وكلمة المرور الجذر للخادم المتصل. وبالتالي ، نضيف كل خادم متاح واحدًا تلو الآخر. بعد تسجيل جميع الخوادم في المجموعة ، يجب أن نحصل على شيء مثل هذه القائمة على الشاشة الرئيسية للبيئة:

تم تأجيل تعيين أدوار الخادم الآن إلى الخطوة التالية.
3. نقل المشروع
لأن نظرًا لأن تطبيقنا يعمل في البداية على خادم واحد ، يتم تعطيل وحدة إدارة التحجيم والكتلة ، ولا يتم نسخ قاعدة البيانات. النقل نفسه ليس شيئًا خارقًا - فهو يحزم البتريكس ويحمل المجلدات ، ويزيل تفريغ قاعدة البيانات.
بعد أن تصبح المحفوظات والمقالب جاهزة ، انتقل إلى app01 واسحب رمز المشروع من خلال البوابة إلى المجلد الافتراضي للموقع في bitrixenv - / home / bitrix / www ، وقم بتنزيل الأرشيفات وتفريغ قاعدة البيانات باستخدام wget أو curl ، وفك المحفوظات وتحميلها تفريغ لقاعدة البيانات على app01 ، نقل إدخالات كرون.
إذا كان تطبيقك يستخدم برنامجًا إضافيًا ، فقد حان الوقت لتثبيته وتكوينه. في حالتنا ، تم تثبيت وتكوين المشرف و RabbitMQ ، على النحو يعمل التطبيق باستخدام قوائم الانتظار.
هناك فارق بسيط ولكنه مهم. عند نقل موقع إلى كتلة ، فمن الضروري أن يتم تعطيل وحدات القياس والكتلة على الموقع ، ولا تشارك خوادم التجمع في بيئة المجموعة التي يتم التخطيط للنقل إليها. يجب تضمين خوادم نظام المجموعة في العملية فقط بعد نقل الموقع ونشره على الخادم الرئيسي. وإلا ، لن يتمكن الموقع من تحديد خوادم نظام المجموعة بشكل صحيح.
4. تمكين عملية الكتلة
بعد نقل التطبيق إلى app01 ، والتحقق من صحة عمله ، حان الوقت للقيام بأكثر شيء مثير للاهتمام - التحجيم. تحتاج أولاً إلى تثبيت وحدات المقياس والكتلة في لوحة إدارة 1C-Bitrix. أثناء التثبيت ، لا يوجد شيء خاص يجب القيام به ، كل العمل يستمر.
بمجرد تثبيت الوحدات النمطية ، انتقل إلى اتصال ssh مع الخادم الرئيسي ، وهذا هو app01 ، وافتح قائمة bitrixenv (تقع /root/menu.sh هنا). قبل متابعة المزيد من التكوين ، تحتاج إلى معرفة نقطة واحدة مهمة - يستخدم bitrixenv مفهوم "دور الخادم". لا يهم حقا ما يسمى الخادم في التجمع ، لأنه يحتوي كل خادم على جميع البرامج المضمنة في حزمة bitrixenv ، يمكننا دائمًا تعيين دور واحد أو أكثر لها ، ويمكننا إزالتها منه أو استبداله بآخرين. الأدوار الرئيسية هي mgmt (الموازن ، أي nginx) ، الويب (أي httpd / apache) ، mysql_master و mysql_slave (مثيل DB ، يظهر الرقيق عندما نبدأ في إجراء النسخ المتماثل) ، memcached (الخادم مع memcached). الصورة العامة واضحة الآن ، وقررنا أن نبدأ بخادم memcached. للقيام بذلك ، انتقل إلى الفقرة
4. Configure memcahed servers > 1. Configure memcached service
ونرى طلبًا لاسم الخادم الذي سيكون بمثابة خادم memcached. لدينا بالفعل خادم cache01 تم إعداده لذلك ، لذلك نلقي نظرة على قائمة الخوادم المتاحة. إذا كان cache01 في القائمة ، فلا توجد مشاكل في التثبيت ، ويمكننا منح الخادم الدور المحدد.

نقوم بإدخال الاسم cache01 ، ونرى أن مهمة تحديد الدور في قائمة الانتظار. نحن في انتظار الانتهاء من عمل الخلفية ونرى خادمًا جاهزًا للعمل بالدور الذي نحتاجه.

حان الوقت لإضافة خادم تطبيقات ثانٍ. للقيام بذلك ، انتقل على طول المسار
8. Manage web nodes in the pool > 1. Create web role on server,

حيث نحتاج إلى تحديد اسم الخادم وطريقة المزامنة بين عقدة الويب الرئيسية والجديدة. استنادًا إلى وثائق bitrixenv والاختبارات الأولية ، كان كافيًا لمشروعنا أن يختار الخيار الأول (نسخ المشروع وإعداد تكوينات العقدة في خطوة واحدة). بعد انتهاء عمل الخلفية ، يجب أن نرى شيئًا كهذا في القائمة الرئيسية:

لاحظ أنه في عمود الأدوار المقابل لخادم app02 ، يشار إلى دور الويب.
يبقى للتعامل مع قاعدة البيانات ، تكوينها يستغرق معظم الوقت. أولاً ، سأشرح بإيجاز كيفية توزيع أدوار الخلية في سياق bitrixenv. بشكل افتراضي ، الإصدار الرئيسي من قاعدة البيانات موجود على الخادم الرئيسي للكتلة. في حالتنا ، كان من الضروري نقل قاعدة البيانات إلى خادم منفصل وإضافة خادم آخر مع إصدار تابع لقاعدة البيانات. في bitrixenv ، لا يمكنك فقط نقل ونقل رئيسي من خادم إلى آخر)

التسلسل كما يلي:
- نعطي دور mysql_slave إلى الخادم الذي نخطط لنقل قاعدة البيانات إليه
- على الخادم الهدف ، نقوم بتغيير دور mysql_slave إلى دور mysql_master (تلقائيًا ، ينتقل mysql_master القديم إلى وضع mysql_slave)
- حذف دور mysql_slave على الخادم الأصلي الرئيسي السابق
- ...
- الربح !!!
لقد اتبعنا هذا المنطق بهذه الطريقة:
ذهب إلى
3. Configure MySQL servers > 4. Create MySQL slave

أشرنا إلى الخادم الذي نريد منحه الدور mysql_slave - db01. نحن في انتظار انتهاء عمل الخلفية ونرى النتيجة التالية:

حسنا ، الآن نذهب إلى
3. Configure MySQL servers > 5. Change MySQL master

حدد app01 وانتظر. نتيجة لذلك ، يجب أن تشاهد شيئًا مثل هذا:

ببطء وحتمًا ، اقتربنا من تثبيت الدور الأخير - mysql_slave. لهذا ، من الضروري تكرار الخطوات التي حددنا بها هذا الدور لـ db01 ، ولكن حدد db02 بالفعل.
وأخيرًا ، يتم توصيل جميع الخوادم وتكوينها.
5. ضبط الأداء
بعد أن تكون الكتلة جاهزة ، هناك بعض الميزات في تكوين التطبيق التي تسمح بتحسين إضافي:
- نضخ العمل مع الجلسات. موصوفة بالتفصيل هنا . باختصار - تبديل جلسة التخزين في memcached.
- احذف ملفات /bitrix/php_interface/after_connect_d7.php و /bitrix/php_interface/after_connect.php لأن أوامر منهم قطع خط أنابيب الكتلة (إذا لم يتم استخدام bitrixenv ، فمن الأفضل تركها).
- نقوم بزيادة مقدار الذاكرة المخصصة بواسطة memcached وتعيين النسبة المئوية لاستخدام الخوادم ذات دور memcached إلى 100٪.
- تعطيل وحدات php: apcu ، ldap
- قم بتعطيل وحدات الناقل "ضغط" و "تحليلات الويب" (إن أمكن).
- ضع في اعتبارك استخدام ذاكرة التخزين المؤقت المحلية. يتم وصف المزيد من التفاصيل هنا . في حالتنا ، لم تكن هناك زيادة ، لكن الفكرة مثيرة للاهتمام. يحتوي الحل على ميزتين:
- يجب أن يساوي عدد النسخ memcached عدد عقد الويب.
- لإرجاع ذاكرة التخزين المؤقت المركبة بواسطة nginx ، مباشرة من memcached المحلية ، يجب عليك الحفر في تهيئة nginx ، ولا تعمل خارج الصندوق.
- نقل تنفيذ جميع العملاء إلى كرون.
الاستنتاجات
في إطار هذه المقالة ، درسنا تسلسل الخطوات المطلوبة لتكوين مجموعة من الخوادم استنادًا إلى bitrixenv ، بالإضافة إلى بعض العثرات المحتملة. استنادًا إلى نتائج العمل مع bitrixenv والمجموعة عليه ، يمكننا تسليط الضوء على إيجابيات وسلبيات هذا النهج:
الايجابيات bitrixenv
- وقت التثبيت
يستغرق التثبيت والإعداد الأساسي أقل من 30 دقيقة. ليست هناك حاجة لتكوين عناصر LAMP (كل من تكامل هذه الخدمات مع بعضها البعض ، وللعمل الصحيح للمشاريع على 1C-Bitrix). - خدمات لتسريع الموقع
الخدمات المثبتة والمهيأة التي تسمح لك بتنظيم التخزين المؤقت بشكل أسرع عبر memcached بدلاً من الملفات ، والبحث باستخدام محرك أبو الهول ووظائف مكالمات الفيديو والدردشات على بوابة الشركة (nginx push & pull module). بالإضافة إلى ذلك ، يتم تكوين nginx في البيئة بطريقة تتيح لك تمكين الخيارات المقابلة على الموقع وفي قائمة bitrixenv ، يتم إرسال ذاكرة التخزين المؤقت باستخدام nginx مباشرة من memcached (تجاوز httpd و php) - التكتل
القدرة على تمكين النسخ المتماثل لقاعدة البيانات ، دون اختيار إعدادات MySQL. ربط عدد عشوائي من عقد الويب التي ستتم مزامنتها تلقائيًا مع بعضها البعض ، والعقد memcached. إدارة موازنة التحميل على الويب والعقد memcached من قائمة bitrixenv ومن خلال لوحة الإدارة للمشروع على 1C-Bitrix. بالإضافة إلى ذلك ، لا تؤدي إضافة خوادم وأدوار جديدة إليها إلى مشروع بسيط (ربما باستثناء أدوار خوادم قواعد البيانات)
سلبيات bitrixenv
- الموازن يكون دائمًا مع عقدة الويب الرئيسية
لأن كان لدينا بالفعل موازننا الخاص ، واجهنا حقيقة أنه من المستحيل التخلي عن الموازن المدمج في bitrixenv. من المستحيل بما في ذلك ضعه بشكل منفصل عن عقدة الويب الرئيسية. - الكثير من البرامج الإضافية لبعض الأدوار
لأن نظرًا لأن كل خادم في التجمع يحتوي على الإصدار الكامل من البيئة ، فقد تبين أن عقد db هي httpd و memcached و sphinx ، حتى إذا لم يتم استخدامها. وبالمثل ، يمكنك العثور على MySQL على خادم يتعامل فقط مع التخزين المؤقت ، ولكن في هذه الحالة ، يمكن إيقاف MySQL في قائمة البيئة أو لوحة الإدارة الخاصة بالموقع. - يعمل PHP في وضع apache2handler
لا توجد طريقة لتمكين php بأمان في وضع fcgi ، ناهيك عن وضع nginx + php-fpm. أيضا ، لن تعمل على تغيير نسخة php ، دون الرقص مع الدف.
مصادر:
www.1c-bitrix.ru/products/env
dev.1c-bitrix.ru/community/blogs/rns/hidden-features-of-work-with-sessions.php
dev.1c-bitrix.ru/community/blogs/rns/the-use-of-local-caches-in-the-cluster.php
dev.1c-bitrix.ru/learning/course/index.php؟COURSE_ID=32&INDEX=Y
dev.1c-bitrix.ru/learning/course/index.php؟COURSE_ID=37&INDEX=Y