1C-Bitrixを実行するクラスターへの移行:Web環境

ある瞬間、タスクが現れました-既存のアクティブな実動プロジェクトをサーバークラスターで動作するように転送することです。 なぜなら このプロジェクトは1C-Bitrixに基づいて開発されたため、「1C-Bitrix:Web環境」を使用してクラスターを構築することが決定されました。 このイベントの目的は、サイト訪問者の流入による重い負荷に耐えることができるようにすることと、将来的には水平方向により高速にスケーリングできるようにすることです。



実際、ベンダーのウェブサイトにアクセスすると 、次のことがわかります。



「1C-Bitrix:Web環境」-LinuxベースのCentOS 6(i386、x86_64)およびCentOS 7(x86_64)Linuxプラットフォームで1C-Bitrix製品およびソリューションの動作に必要なすべてのソフトウェアを迅速かつ簡単にインストールするためにLinuxが使用されます。 Webサーバーがインストールされていない「クリーンな」CentOSにインストールする必要があります。



「1C-Bitrix:Web環境」の構造-Linuxには、mysql-server、httpd、php、nginx、nodejs push-server、memcached、stunnel、catdoc、xpdf、munin、nagios、sphinxが含まれます。







実際、このソフトウェアパッケージには、構成済みのLAMP、コンソールサーバーコントロールパネル、および一部の1C-Bitrixモジュールの動作に必要な追加パッケージが含まれています。 すべてのソフトウェアは、1C-Bitrixの機能を考慮して構成されています。









これにより、ほとんどの場合、サーバーの構成とチューニングを行わないことができます。



そのため、2台のアプリサーバー(app01とapp01と呼びます)、2台のdbサーバー(db01、db02)、1台のキャッシュ用サーバー(cache01、ご理解のとおり)、より正確には、同様の方法でクラスター構造を実装するというアイデアがありました。 この計画では、最新のcentos7バージョンがインストールされた5つのサーバーが受信されました(残念ながら、debian、ubuntu、fedora、rhelなどは適切ではありません)。ただし、osを除き、サーバーには何もインストールされませんでした。







なぜなら クラスタを構築する場合、どのサーバーがメインサーバーになるかを決定する必要があります。 アプリケーションへのリクエストのバランスをとるという特性のため、httpdが機能するサーバーの1つにもnginxが含まれます。 また、すべての着信要求を受け入れ、利用可能なWebノードの1つに要求をリダイレクトします。 メインサーバーapp01を選択しました。







次の計画に従って、さらに作業を進めました。







1. bitrixenvをインストールします



インストールは、超自然的なLinuxの知識や管理を意味するものではありません。 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)、および接続されたサーバーのルートパスワードを指定します。 したがって、使用可能な各サーバーを1つずつ追加します。 すべてのサーバーがクラスターに登録されると、環境のメイン画面に次のリストのようなものが表示されます。







今のところサーバーの役割を設定することは、次のステップに延期されます。







3.プロジェクトの転送



なぜなら アプリケーションは最初は単一のサーバーで実行されるため、スケーリングおよびクラスター管理モジュールが無効になっているため、データベースは複製されません。 転送自体は超自然的なものではありません。bitrixとアップロードフォルダーは圧縮され、データベースダンプは削除されました。



アーカイブとダンプの準備が整ったら、app01に移動し、プロジェクトコードをgitからbitrixenv-/ home / bitrix / wwwのデフォルトサイトフォルダーにプルし、wgetまたはcurlを使用してアーカイブとデータベースのダンプをダウンロードし、アーカイブをアンパックしてアップロードしますapp01のデータベースにダンプし、cronエントリを転送します。



アプリケーションで追加のソフトウェアを使用している場合は、インストールして構成します。 この例では、supervisordとRabbitMQがインストールされ、構成されています。 アプリケーションはキューを使用して機能しました。



小さいながらも重要なニュアンスがあります。 サイトをクラスターに転送する場合、スケールおよびクラスターモジュールがサイトで無効になっている必要があり、プールサーバーは転送が計画されているクラスターの環境に関与していません。 サイトをメインサーバーに移動して展開した後にのみ、クラスターサーバーを操作に含める必要があります。 そうしないと、サイトはクラスターサーバーを正しく判別できません。







4.クラスターモードの有効化



アプリケーションをapp01に移植し、その作業の正確性を確認したら、最も興味深いことであるスケーリングを行います。 最初に、1C-Bitrix管理パネルにスケールおよびクラスターモジュールをインストールする必要があります。 インストール中、特別な作業は必要ありません。すべての作業が続行されます。



モジュールがインストールされたら、メインサーバー(これはapp01)とのssh接続に移動し、bitrixenvメニューを開きます(ここでは/root/menu.shにあります)。 さらに設定を進める前に、1つの重要なポイントを見つける必要があります。bitrixenvは「サーバーロール」の概念で動作します。 プール内でサーバーが何と呼ばれるかは、実際には問題ではありません。 各サーバーにはbitrixenvパッケージに含まれるすべてのソフトウェアが含まれており、いつでも1つ以上のロールを割り当てることができます。また、サーバーからそれらを削除したり、他のサーバーと交換したりできます。 主な役割は、mgmt(バランサー、つまりnginx)、web(つまりhttpd / apache)、mysql_masterおよびmysql_slave(DBインスタンス、レプリケーションを開始するとスレーブが表示される)、memcached(memcachedを備えたサーバー)です。 これで全体像が明らかになり、memcachedサーバーから始めることにしました。 これを行うには、段落に移動します







 4. Configure memcahed servers > 1. Configure memcached service
      
      





そして、memcachedサーバーとして機能するサーバーの名前のリクエストが表示されます。 このためにcache01サーバーがすでに準備されているため、使用可能なサーバーのリストを確認します。 cache01がリストにある場合、インストールに問題はありません。選択したロールをサーバーに与えることができます。







名前cache01を入力すると、ロールを設定するタスクがキューに入れられていることがわかります。 バックグラウンドの作業が完了するのを待っており、必要な役割で作業できる状態のサーバーが表示されます。







2番目のアプリサーバーを追加します。 これを行うには、パスに沿って移動します

 8. Manage web nodes in the pool > 1. Create web role on server,
      
      









ここで、メインと新しいWebノードの間のサーバー名と同期方法を指定する必要があります。 bitrixenvのドキュメントと予備テストに基づいて、プロジェクトが最初のオプションを選択するだけで十分でした(プロジェクトをコピーし、1ステップでノード構成をセットアップする)。 バックグラウンド作業が終了すると、メインメニューに次のようなものが表示されます。







app02サーバーの反対側の「役割」列に、Web役割が示されていることに注意してください。

データベースを処理するために残り、その構成に最も時間がかかります。 最初に、bitrixenvのコンテキストでmysqlロールがどのように分散されるかを簡単に説明します。 デフォルトでは、データベースのマスターバージョンはクラスターのメインサーバーにあります。 この場合、データベースを別のサーバーに転送し、データベースのスレーブバージョンで別のサーバーを追加する必要がありました。 bitrixenvでは、1つのサーバーから別のサーバーにマスターを取得して転送することはできません)







シーケンスは次のとおりです。



  1. データベースの転送先のサーバーにmysql_slaveの役割を与えます
  2. ターゲットサーバーで、mysql_slaveのロールをmysql_masterのロールに変更します(自動的に、古いmysql_masterはmysql_slaveモードになります)
  3. 元のサーバー、元のマスターでmysql_slaveロールを削除します
  4. ...
  5. 利益!!!


このロジックは次のとおりです。



に行った



 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.パフォーマンスの調整



クラスターの準備が整うと、アプリケーション構成に追加の最適化を可能にする機能がいくつかあります。











結論



この記事のフレームワークでは、bitrixenvに基づいてサーバークラスターを構成するために必要な手順のシーケンスと、考えられるいくつかの落とし穴を調べました。 bitrixenvとそのクラスターの操作の結果に基づいて、このアプローチの長所と短所を強調できます。







長所bitrixenv





短所bitrixenv







ソース:



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








All Articles