Pada saat tertentu, tugas muncul - untuk mentransfer yang sudah ada dan aktif bekerja di proyek produksi untuk bekerja di server cluster. Karena proyek ini dikembangkan berdasarkan 1C-Bitrix, diputuskan untuk membangun sebuah cluster menggunakan "1C-Bitrix: lingkungan Web." Tujuan dari acara ini adalah untuk dapat menahan beban berat dengan masuknya pengunjung situs, serta kemampuan untuk skala secara horizontal lebih cepat di masa depan.
Sebenarnya, jika kita pergi ke situs web vendor, maka kita akan melihat bahwa:
โ1C-Bitrix: Lingkungan webโ - Linux digunakan untuk pemasangan cepat dan mudah semua perangkat lunak yang diperlukan untuk pengoperasian produk dan solusi 1C-Bitrix pada platform Linux CentOS 6 (i386, x86_64) dan CentOS 7 (x86_64). Penting untuk menginstal pada CentOS "bersih", tanpa server web yang sudah diinstal.
Struktur โ1C-Bitrix: Web environmentโ - Linux meliputi: server mysql, httpd, php, nginx, server push node, memcached, stunnel, catdoc, xpdf, munin, nagios, sphinx.
Bahkan, paket perangkat lunak ini berisi LAMP yang dikonfigurasi, panel kontrol server konsol, ditambah paket tambahan yang diperlukan untuk pengoperasian beberapa modul 1C-Bitrix. Semua perangkat lunak dikonfigurasi dengan mempertimbangkan fitur 1C-Bitrix, yaitu:
- ekstensi yang diperlukan diinstal (gd, zip, socket, mbstring)
- dukungan tag pendek diaktifkan
- nilai yang diperlukan ditetapkan untuk parameter memory_limit, max_input_vars, safe mode, opcache.validate_timestamps, opcache.revalidate_freq, mbstring.func_overload, default_charset, display_error, dll.
- atur zona waktu yang sama untuk database, php dan pada server itu sendiri
- dan lainnya
Dalam banyak kasus hal ini memungkinkan untuk tidak terlibat dalam konfigurasi dan penyetelan server.
Jadi, kami memiliki 2 server aplikasi (sebut saja mereka app01 dan app01), server 2 db (db01, db02), 1 server untuk caching (cache01, Anda mengerti), lebih tepatnya, idenya adalah untuk mengimplementasikan struktur cluster dengan cara yang sama. Di bawah paket ini, 5 server diterima, dengan versi centos7 terbaru diinstal pada mereka (sayangnya, debian, ubuntu, fedora, rhel, dll. Tidak cocok), kecuali untuk os, tidak ada lagi yang diinstal pada server.
Karena Jika kita merakit sebuah cluster, kita perlu menentukan server mana yang akan menjadi yang utama. Karena kekhasan menyeimbangkan permintaan ke aplikasi, salah satu server tempat httpd akan berfungsi juga akan berisi nginx. Ia juga akan menerima semua permintaan yang masuk, dan kemudian mengarahkan kembali permintaan itu ke salah satu web-node yang tersedia. Kami memilih app01 server utama.
Pekerjaan lebih lanjut berjalan sesuai dengan rencana berikut:
1. Instal bitrixenv
Instalasi tidak menyiratkan pengetahuan atau administrasi linux supernatural. Kami pergi ke setiap server melalui ssh dan menjalankan perintah berikut:
cd ~ wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh chmod +x bitrix-env.sh ./bitrix-env.sh
Bitrixenv harus diinstal pada semua server yang direncanakan untuk digunakan dalam cluster. Bahkan jika server hanya akan berfungsi sebagai instance memcached, bitrixenv diperlukan, karena memungkinkan Anda untuk mengelola seluruh cluster dari server utama.
2. Konfigurasikan bitrixenv
Karena Jika kami menggunakan seluruh kebun binatang ini sebagai kluster, kami dapat mengonfigurasi server melalui menu lingkungan di app01. Untuk melakukan ini, buka server melalui ssh dan jalankan file /root/menu.sh. Pada permulaan pertama, Anda perlu menetapkan kata sandi untuk pengguna bitrix (operasi serupa harus dilakukan pada semua server tempat situs dijadwalkan diluncurkan):

Sebenarnya, ini adalah pengguna di mana aplikasi akan bekerja. Setelah itu, kami melihat penawaran layar untuk membuat kumpulan server:

Di sini kita perlu memilih item menu pertama. Dalam proses menciptakan lingkungan, ia akan meminta nama server saat ini, kemudian kami tentukan app01:

Setelah kumpulan dibuat, kami dikembalikan ke layar pertama dari lingkungan, tetapi kali ini ada lebih banyak poin yang tersedia:

Secara umum, lingkungan sudah siap dan Anda dapat menggunakannya. Jika kita tidak membutuhkan cluster, maka kita bisa berakhir di sini, tetapi kita akan melangkah lebih jauh.
Sekarang kita perlu menambahkan semua server yang tersedia ke kumpulan yang dibuat. Untuk melakukan ini, gunakan item menu pertama dan lihat opsi berikut:

Sekali lagi, pilih item menu pertama, dan tentukan ip dari server baru, namanya di cluster (app02 yang sama, db01, db02, cache01) dan kata sandi root dari server yang terhubung. Jadi, kami menambahkan setiap server yang tersedia satu per satu. Setelah semua server terdaftar di cluster, kita akan mendapatkan sesuatu seperti daftar ini di layar utama lingkungan:

Pengaturan peran server untuk saat ini ditangguhkan ke langkah berikutnya.
3. Transfer proyek
Karena Karena aplikasi kita awalnya berjalan pada satu server, modul penskalaan dan manajemen kluster dinonaktifkan, basis data tidak direplikasi. Transfer itu sendiri bukan hal yang supernatural - ia mengemas bitrix dan mengunggah folder, menghapus database dump.
Setelah arsip dan dump siap, buka app01 dan tarik kode proyek melalui git ke folder default situs di bitrixenv - / home / bitrix / www, unduh arsip dan dump database dengan wget atau curl, buka paket arsip dan unggah arsip Buang ke database pada app01, transfer entri cron.
Jika aplikasi Anda menggunakan perangkat lunak tambahan, saatnya untuk menginstal dan mengkonfigurasinya. Dalam kasus kami, supervisord dan RabbitMQ dipasang dan dikonfigurasi, seperti aplikasi bekerja menggunakan antrian.
Ada nuansa kecil tapi penting. Ketika mentransfer situs ke sebuah cluster, perlu bahwa skala dan modul cluster dinonaktifkan di situs, dan server kumpulan tidak terlibat dalam lingkungan cluster yang menjadi tujuan transfer tersebut direncanakan. Server cluster harus dimasukkan dalam operasi hanya setelah situs dipindahkan dan disebarkan ke server utama. Jika tidak, situs tidak akan dapat menentukan server cluster dengan benar.
4. Mengaktifkan operasi kluster
Setelah aplikasi porting ke app01, dan kami memeriksa kebenaran pekerjaannya, sekarang saatnya untuk melakukan hal yang paling menarik - penskalaan. Pertama, Anda perlu menginstal skala dan modul cluster di panel admin 1C-Bitrix. Selama instalasi, tidak ada yang perlu dilakukan, semua pekerjaan berjalan.
Setelah modul diinstal, buka koneksi ssh dengan server utama, dan ini adalah app01, dan buka menu bitrixenv (terletak /root/menu.sh di sini). Sebelum melanjutkan dengan konfigurasi lebih lanjut, Anda perlu mencari tahu satu poin penting - bitrixenv menggunakan konsep "peran server". Tidak masalah apa yang disebut server di kolam renang, karena setiap server berisi semua perangkat lunak yang termasuk dalam paket bitrixenv, kami selalu dapat menetapkan satu atau lebih peran untuk itu, dan kami dapat menghapusnya dari itu atau menukarnya dengan yang lain. Peran utama adalah mgmt (penyeimbang, mis. Nginx), web (mis. Httpd / apache), mysql_master dan mysql_slave (contoh DB, slave muncul ketika kita mulai melakukan replikasi), memcached (server dengan memcached). Gambaran umum sekarang jelas, dan kami memutuskan untuk memulai dengan server memcached. Untuk melakukan ini, pergi ke paragraf
4. Configure memcahed servers > 1. Configure memcached service
dan kami melihat permintaan untuk nama server yang akan bertindak sebagai server memcached. Kami sudah menyiapkan server cache01 untuk ini, jadi kami melihat daftar server yang tersedia. Jika cache01 ada dalam daftar, maka tidak ada masalah instalasi, dan kami dapat memberikan server peran yang dipilih.

Kami memasukkan nama cache01, kami melihat bahwa tugas untuk mengatur peran di-antri. Kami sedang menunggu penyelesaian pekerjaan latar belakang dan kami melihat server siap bekerja dengan peran yang kami butuhkan.

Saatnya menambahkan server aplikasi kedua. Untuk melakukan ini, jalanlah
8. Manage web nodes in the pool > 1. Create web role on server,

di mana kita perlu menentukan nama server dan metode sinkronisasi antara node web utama dan baru. Berdasarkan dokumentasi bitrixenv dan tes pendahuluan, cukup bagi proyek kami untuk memilih opsi pertama (menyalin proyek dan mengatur konfigurasi node dalam satu langkah). Setelah pekerjaan latar belakang selesai, kita akan melihat sesuatu seperti ini di menu utama:

Perhatikan bahwa di kolom Peran di seberang server app02, peran web ditunjukkan.
Masih berurusan dengan database, konfigurasinya membutuhkan waktu paling banyak. Pertama, saya akan menjelaskan secara singkat bagaimana peran mysql didistribusikan dalam konteks bitrixenv. Secara default, versi master database ada di server utama cluster. Dalam kasus kami, perlu untuk mentransfer database ke server terpisah dan menambahkan server lain dengan versi database. Di bitrixenv, Anda tidak bisa hanya mengambil dan mentransfer master dari satu server ke server lain)

Urutannya adalah sebagai berikut:
- Kami memberikan peran mysql_slave ke server yang kami rencanakan untuk mentransfer database
- Di server target, kami mengubah peran mysql_slave menjadi peran mysql_master (secara otomatis, mysql_master lama masuk ke mode mysql_slave)
- Hapus peran mysql_slave di server asli, mantan master
- ...
- KEUNTUNGAN !!!
Kami mengikuti logika ini dengan cara ini:
Pergi ke
3. Configure MySQL servers > 4. Create MySQL slave

Kami menunjukkan server yang ingin kami beri peran mysql_slave - db01. Kami sedang menunggu penyelesaian pekerjaan latar belakang dan kami melihat hasil berikut:

Oke, sekarang kita ke
3. Configure MySQL servers > 5. Change MySQL master

Tentukan aplikasi01 dan tunggu. Akibatnya, Anda akan melihat sesuatu seperti ini:

Perlahan dan pasti kami mendekati pemasangan peran terakhir - mysql_slave. Untuk ini, perlu untuk mengulangi langkah-langkah dimana kita mengatur peran seperti untuk db01, tetapi tentukan db02 sudah.
Akhirnya, semua server terhubung dan dikonfigurasi.
5. Tuning kinerja
Setelah cluster siap, ada beberapa fitur dalam konfigurasi aplikasi yang memungkinkan untuk optimasi tambahan:
- Kami memompa pekerjaan dengan sesi. Dijelaskan secara rinci di sini . Singkatnya, simpan sesi penyimpanan dalam memcached.
- Hapus file /bitrix/php_interface/after_connect_d7.php dan /bitrix/php_interface/after_connect.php, karena perintah dari mereka memutus pipa cluster (jika bitrixenv tidak digunakan, maka lebih baik meninggalkannya).
- Kami meningkatkan jumlah memori yang dialokasikan oleh memcached dan mengatur persentase penggunaan server dengan peran memcached menjadi 100%.
- Nonaktifkan modul php: apcu, ldap
- Nonaktifkan modul bus "Kompresi", dan "Analisis Web" (jika mungkin).
- Pertimbangkan untuk menggunakan cache lokal. Lebih detail dijelaskan di sini . Dalam kasus kami, tidak ada peningkatan, tetapi idenya menarik. Solusinya memiliki beberapa fitur:
- Jumlah instance memcached harus sama dengan jumlah node web.
- Untuk mengembalikan cache komposit dengan nginx, langsung dari memcached lokal, Anda harus menggali konfigurasi nginx, itu tidak berfungsi di luar kotak.
- Pindahkan eksekusi semua agen ke cron.
Kesimpulan
Dalam kerangka kerja artikel ini, kami memeriksa urutan langkah-langkah yang diperlukan untuk mengkonfigurasi sekelompok server berdasarkan bitrixenv, serta beberapa kemungkinan jebakan. Berdasarkan hasil bekerja dengan bitrixenv, dan cluster di atasnya, kita dapat menyoroti pro dan kontra dari pendekatan ini:
Pro bitrixenv
- Waktu instalasi
Instalasi dan pengaturan dasar membutuhkan waktu kurang dari 30 menit. Tidak perlu mengkonfigurasi elemen LAMP (baik integrasi layanan ini satu sama lain, dan untuk pekerjaan proyek yang benar pada 1C-Bitrix). - Layanan untuk mempercepat situs
Layanan terinstal dan terkonfigurasi yang memungkinkan Anda untuk mengatur cache lebih cepat melalui memcached daripada file, mencari menggunakan mesin sphinx dan fungsionalitas panggilan video dan obrolan di portal perusahaan (modul nginx push & pull). Selain itu, nginx di lingkungan dikonfigurasi sedemikian rupa sehingga ketika Anda mengaktifkan opsi yang sesuai di situs dan di menu bitrixenv, cache dikirim menggunakan nginx langsung dari memcached (mem-bypass httpd dan php) - Clustering
Kemampuan untuk mengaktifkan replikasi basis data, tanpa memilih pengaturan MySQL. Menghubungkan sejumlah web node yang sewenang-wenang yang akan secara otomatis disinkronkan satu sama lain, dan memcached node. Manajemen load balancing di web dan node memcached baik dari menu bitrixenv dan melalui panel admin proyek pada 1C-Bitrix. Plus, menambahkan server dan peran baru ke dalamnya tidak menyebabkan proyek sederhana (kecuali mungkin untuk peran server basis data)
Kontra bitrixenv
- Penyeimbang selalu dengan simpul web utama
Karena kami sudah memiliki penyeimbang kami sendiri, kami dihadapkan dengan fakta bahwa tidak mungkin untuk meninggalkan penyeimbang yang dibangun ke dalam bitrixenv. Tidak mungkin termasuk letakkan secara terpisah dari simpul web utama. - Banyak perangkat lunak tambahan untuk beberapa peran
Karena Karena setiap server di kumpulan berisi versi lengkap dari lingkungan, ternyata db-node adalah httpd, memcached, sphinx, bahkan jika mereka tidak digunakan. Demikian pula, Anda dapat menemukan MySQL di server yang hanya berurusan dengan caching, tetapi dalam kasus ini, MySQL dapat dihentikan di menu lingkungan atau panel admin situs. - Php bekerja dalam mode apache2handler
Tidak ada cara untuk mengaktifkan php dengan aman dalam mode fcgi, belum lagi mode nginx + php-fpm. Juga, itu tidak akan berhasil untuk mengubah versi php, tanpa menari dengan rebana.
Sumber:
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