ホスティング事業者への新年の贈り物:10,000クライアント以上をサーバーに配置する方法

画像



今日、私は新年の贈り物を作りたいです。世界で最も価値のあるものは経験、知識、技術であるので、私はそれをすべてあなたと共有したいと思います。 システムエンジニア/アーキテクトとしての3年間の経験が、一部のホスティング事業者が新しい地平を発見するのに役立つことを願っています。



クライアントは通常のLAMPアカウント(Linux + Apache + Mysql + PHP)であり、1つまたは2つの仮想ホストを持ち、デフォルトですべてのphp.iniオプションを操作することに注意してください。 主なものは16MBのRAMと30秒の実行です。 ほとんどのエンジン-Wordpress、Drupal、Joomlaで十分です。





もちろん、最も重要なことは適切なサーバーを選択することです。 最良の組み合わせは経験的に発見されました-Dell 905 +バスケットMD1000。構成についてもう少し。 もちろん、サーバーは2つの6コアOpteronで動作します。 〜15,000クライアントに十分なメモリがあります。つまり、サーバー上でどれだけ動作したか、128Gで十分でしたが、もちろんクライアントを気の毒に思わない限り、64G +スワップを試すこともできます。



バスケットについて特別なことは何もありません-誰もがサイトの場所を必要とします。 唯一のことは、ストーリーを正しく破る必要があるということですが、それについては後で詳しく説明します。 SASを使用するか、安価なSATAを使用できます。 私の場合、SATAは15kには十分でしたが、さらに計画する場合はSASを使用する必要があります。



ソフトウェア



もちろん、サーバー上で動作するのはWebのみです。 MySQLは別のサーバー上にのみ存在します。 メールは同じで、送信はssmtpのようにやや簡単で、Exim / sendmailのようなモンスターではありません。 しかし、一般的に、これは主なものではありません。 考慮すべきより重要なことがあります。



まず第一に、これはRAMの使用とビット深度の比率です。 64ビットバイナリが職場でより多くのRAMを使用する理由を誰もが知っていると確信しています。 しかし、多くのサイトの作業のボトルネックが何であるかを誰が知っていますか? 正しい答えはログであり、書き込みディスクでの作業はシステムの最も遅い部分であるため、ほとんどのサーバーリソースを消費するログです。 結論は簡単です。ログを使用して、64ビットではなく32ビットソフトウェアを使用する必要があります。



最初に、2番目のApacheでmod_log_spreadを作成するというログのアイデアがありました。 または、最初のログのみを使用してください。 しかし、ここでは静的な調査が役立ちました-ほとんどのクライアントはWebサーバーログを使用せず、デフォルトで単純に無効にされました。 リクエストした人はリクエストに含まれています。 また、ログの記録には、当然別のディスクが使用されました。



最もおいしい



しかし、32ビットソフトウェアはどうでしょうか。 また、仮想ホストが1000を超えると、Apacheの動作はますます悪くなりますか? そして、ここでOpenVZが私たちを助けてくれます! はい、そうです-サーバーを32ビット仮想マシンに分割し、それぞれで独自のApacheを起動します。OpenVZのおかげで、同一の仮想マシンは互いにメモリを共有するのに適しているため、すべてうまくいきます。 また、各仮想マシンの任意のディレクトリとして個別のディスクを接続できることを考えると、ログの問題はすでにこのために解決されています!

さて、技術的な観点からのすべての仕組みについて少し説明します。 私はすぐに言わなければならない-私はApacheを再構築し、sslを含む多くの不必要なものを捨て、MPM Worker-スレッドApacheを選択した。 当然、各仮想マシンは12コアすべてを使用し、Apacheのプロセス数も12でした。Nginxのワーカーと同様です。



Nginxといえば、Apacheに触れずにすべての統計を直接与える必要があるという事実について話しましたか? 言うまでもないことですが、おそらくそうではありません。 そして、PHPがどのように機能したかについて、ここで詳しく説明する価値があります。

もちろん、MPMWorkerではmod_phpを実稼働環境で実行することはできません。自国の「管理者」が言うように、拡張機能の多くはスレッドでの作業方法を知らないため、失敗します。 したがって、残された唯一のオプションはmod_fastcgi + PHP-FPMでした。 そしてもちろん、各仮想マシンで12のPHPプロセスがねじれていました。



したがって、各仮想マシンは32ビットアプリケーションの集まりでした:nginx + apache-worker + php-fpm。 各仮想マシンについて、Raid-1がバスケットに作成され、ログ用に個別の共有ディスクが作成され、ログディレクトリに接続されました。 それから私はそれをすべて見て、考えました-そして、ログのために共通のディスクがあるなら、なぜすべての仮想マシンのために1つの共通nginxを作ってみませんか? 結局のところ、OpenVZはブロックデバイスではなくファイルシステムレベルで仮想マシンと連携するため、ハードウェアノードからすべてのファイルにアクセスできるため、仮想ディレクトリへのパスを置き換えるだけで済みます。

すぐに言ってやった。 10,000個の仮想マシン上の運用サーバーは、次のもので構成されている必要があります。



さて、結論として-ファイラーについてのボーナス。 このような鉄でラックを満たし、バスケットよりも1台多くサーバーを追加すると、非常に耐障害性の高いシステムが実現します。 すべてのデータはごみ箱にあり、サーバーにはOpenVZ +コンテナーとして検出された各ディスクを起動し、選択したディスクを各仮想マシンに接続してログを記録する通常のスクリプトがあります。 サーバーの1つに障害が発生した場合、バックアップをバスケットに接続するだけで、壊れたサーバーは落ち着いて修理のために返却されます。



PS割引を考慮して(米国のデータセンターで購入)〜500,000人の顧客を配置するための鉄のコストは〜9万ドルでした。 または言い換えれば、50人の顧客のコスト-ラック、食料、交通を除くたった9ドルです。



All Articles