LNMP小型分散型プラットフォーム・アーキテクチャ建物
私たちのプロジェクトは、ファンタジーの段階にとどまっているため、いくつかの友人が最近、小規模なプロジェクトのサイトを一緒に取得しようとした、運用、保守エンジニアとして、環境を取る作業は、当然、そのサーバーを借りていない、私の肩の上に落ちました我々は最初のビルドの良い開発環境にコンピュータ上の仮想マシンの5つのまたは6セットを開きます。
未来と私たちの環境一貫ライン(実際には、オンラインで取得したいのように言う)について、巨根はとても達成するために5台の仮想マシンを使用して、このノートブック巨根の限定されたパフォーマンスのために、分散開発環境を構築することを決めました。全体的なアーキテクチャは、nginxの前方に責任のバランスのフロントエンドとフロントエンドの負荷は、2つのバックエンドサーバーは、アプリケーションサーバーとしてPHPをインストールするには、非常に簡単です。データベースサーバおよび設定マスタースレーブ同期として残りの二つのサーバ。また、巨根を設定したいのmemcachedとRedisのnginxのキャッシュされたサーバー上で、アクセス速度向上させるためにできる限り近くにキャッシュをユーザーに許可する(欠陥がある場合はそう従事していないし、知りません)。
次のステップは、LinuxシステムのIの使用はcentos6.5で、カーネルのバージョンは2.3である必要があり、言及することはほとんど必要がある、設定プロセスである(特に覚えていない)、それはヤムヤム方法の方法を使用するようにソフトウェアをインストールするために使用することができ、しません(ソースコードは、私の怠惰なバーを許すので、あまりにも多くの問題)私はなぜ元の道を尋ねました。
次は、正式なビルドプロセスを入力して、私は詳しく記録処理Iが構築されます。
最初のステップは、サーバーのホスト名、IPアドレスは、configureファイアウォール(私はオフ直接)とSELinux(Iも直接オフ)、ゲートウェイ、DNSを設定します。
nginxのホスト:
IPアドレス:10.60.77.200
ホスト名:nginxの
ゲートウェイ:10.60.77.254
DNS:114.114.114.114
PHP-1ホスト:
IPアドレス:10.60.77.201
ホスト名:PHP-1
PHP-2ホスト:
IPアドレス:10.60.77.202
ホスト名:PHP-2
mysqlのマスターホスト:
IPアドレス:10.60.77.203
ホスト名:mysqlのマスター
MySQLのスレーブホスト:
IPアドレス:10.60.77.204
ホスト名:MySQLのスレーブ
すべての設定後Baiduのネットワーク接続が正常であるかを確認するための完全なpingのです。第二段階に入るための問題はありません。
第二段階は、ホストインストール構成nginxの
1、インストールソースEPEL
http://mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
wKiom1Uqcq_TXowcAAXni5rnibY939.jpg
ヤムnginxの公式のソースをインストールします。
http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
wKioL1UqdDPhXKowAAX3qHvs0_E567.jpg
nginxのインストール:
[ルート@ nginxの〜]#yumを-y nginxのインストール
wKiom1Uqcw_D21rbAAdKN3hUZJo612.jpg
nginxの負荷分散構成、要求をバックエンドサーバにPHP PHP-1及びPHP-2に転送されます。PHPは、サーバ9000ポートをリッスンし、すべての利用のphp-FPMをバックエンド。
wKioL1UqdIWjeycbAAJmWBpig2A184.jpg
次のようにfront.confを読み取ります。
サーバー{
80を聞く; //リスニングポート
サーバー名www.zhy.com; //ドメイン
/var/log/nginx/zhy.access.logメインのaccess_log。
位置/ {
root /var/www/html; //网站根目录
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/html; //PHP文件根目录
fastcgi_pass all; //转发池名称,连接将转发到该池中的地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
以下のためのupstream.confコンテンツ:
{すべてのアップストリーム
ip_hash; //采用每按IP生成hash值,按hash分配到固定的后端服务器,解决session同步的问题
server10.60.77.201:9000;
server10.60.77.202:9000;
}
wKiom1Uqc1yB5alNAADsYbGeRWs467.jpg
用fastcgi_params内容:
fastcgi_param QUERY_STRING $ QUERY_STRING。
fastcgi_param REQUEST_METHOD $ REQUEST_METHOD。
fastcgi_param CONTENT_TYPE $ CONTENT_TYPE。
fastcgi_param CONTENT_LENGTH $ CONTENT_LENGTH。
fastcgi_param SCRIPT_NAME $ fastcgi_script_name。
fastcgi_param REQUEST_URI $ REQUEST_URI。
fastcgi_param DOCUMENT_URI $ DOCUMENT_URI。
fastcgi_param DOCUMENT_ROOT $ DOCUMENT_ROOT。
fastcgi_param SERVER_PROTOCOLする$ SERVER_PROTOCOL。
fastcgi_param HTTPS $ HTTPS if_not_empty。
fastcgi_param GATEWAY_INTERFACE CGI / 1.1;
fastcgi_param SERVER_SOFTWARE nginxの/ $ nginx_version。
fastcgi_param REMOTE_ADDR $ REMOTE_ADDR。
fastcgi_param REMOTE_PORT $ REMOTE_PORT。
fastcgi_param SERVER_ADDR $ SERVER_ADDR。
fastcgi_param SERVER_PORTの$ SERVER_PORT。
fastcgi_param SERVER_NAMEする$ SERVER_NAME。
fastcgi_param SCRIPT_FILENAME fastcgi_script_name。
//この行の内容を追加します。
PHPは、PHPが構築された場合に必要と有効-力のcgi-リダイレクトを
fastcgi_param REDIRECT_STATUS 200;
これまでのところ、nginxの設定は基本的に完了し、nginxのを開始し、開始からの起動を設定します。
wKiom1Uqc4LQtvh4AAETj03pneU166.jpg
第三のステップは、アプリケーションサーバPHP-1を展開することであるPHP-2
PHP-1およびPHP-2は、両方のサーバーが両方のサーバーに同じ設定、インストールPHP、PHP-FPM、PHP-MySQLを使用して、両方のまったく同じサーバーです。二つのサーバ、インストール方法nginxの基準部にEPEL同じソースをインストールします。
インストールEPELソースの後、PHP、PHP-FPMをインストールするには、次のコマンドを使用して:
[ルートPHP-1〜@] #yum -yのphpのphp-FPMのPHP-MySQLをインストール
インストールが完了したら、PHP-FPMは、コンフィギュレーション・FPMは、独自のIPアドレスとサーバの設定は、聞く次の2行を構成するための/etc/php-fpm.d/www.confファイルを変更することができるようnginxの監視設定を開始:
聞く= 10.60.77.201:9000
listen.allowed_clients = 10.60.77.200
これは、プラットフォームをテストするためのテストPHPファイルへの準備ができて、アプリケーション・サーバーの基本的な構成は、有効である完了します。Webのルートディレクトリの下に、アプリケーション・サーバー上で次のように読み込み、index.phpファイルを作成するには(nginxのWebルート/ var / www / htmlと設定で設定):
正しく表示されている場合、あなたが設定エラーを表し表示できない場合は、適切に、PHPの機能をファイルの基本的な情報を表示するには、<PHPののphpinfo();?PHPユーザ。この時点でwKioL1UqdPugoJ3NAAXZZ28gUFs980.jpg、ビルドとテスト完全にアプリケーションサーバ:通常表示ページを以下に示します。第四のステップでは、データベース・サーバは、セットアップおよび構成のMySQLのマスタ - スレーブ同期されます。[ルート@ MySQLのマスタ:実装工程において、正確に二つのサーバ、MySQLをインストールする必要は、MySQLサーバソフトウェアは別に設定することがメインのMySQL同期ニーズに配置された2つの、例えば、サーバにインストールプロセス、そうですmysqlのmysqlのサーバーwKioL1UqdSbSLv25AAHmfFZYNeA738.jpgのインストールが完了しインストールした後に〜]#yumを-y、マスター・スレーブはMySQL設定、最初の設定のmysql-マスターサーバー同期:な/etc/my.cnf MySQLのサービスプロファイルを変更するには、ファイルは次のとおりです。[ = 1 // = 203 //セットSERVERID同期バイナリログログSERVER_IDを許すのmysqld] DATADIR =の/ var / libに/ MySQLのソケット=の/ var / libに/ MySQLの/にmysql.sockユーザ= MySQLのlog_bin //オープンバイナリログログsync_binlog、このIDシンボリックリンクを無効にする#は各種セキュリティがシンボリックリンク= 0 [mysqld_safeを]ログインエラー=は/ var / log / mysqld.log PIDファイル=の/ var /実行/ mysqldを/ mysqldのネットワークをリスク防ぐrecommendedtoある内で一意である必要があります。 mysqlのサービスを開始し、ローカルのMySQLデータベースにログオンするには、rootのパスワードを変更PID:wKiom1UqdAWiUkrkAAFVayWybe0959。JPG [ルート@ mysqlmaster〜]#mysqladminの-urootpassword「mysqlmaster」//、「msyqlmaster」パスワード変更のためのルートのMySQLデータベースのパスワードとしてローカルログインを修正し、サーバーからの許可を同期させるために、新しいパスワードデータベースを使用します。wKioL1UqdYGgsjxjAAJLeKSRV-Y568ユーザ名.JPG wKioL1UqdaWzLGkdAACLt6ddIC8287.jpgは、マスターサーバー上のログを同期、およびslaveuserを使用した場合、同期を設定することができ、パスワードはslavepassある10.60.77.204ビンログを承認しました。ビュービンログログファイル名現在使用されているだけでなく、そのビットオフセット:wKioL1UqdcyDFzFTAAGIHYrDKxI774.jpg結果は、mysqldの-bin.000001を使用して、現在のマスタバイナリログファイルサーバを示し、オフセット現在の位置はこれまでのところ、mysqlのマスター、567であります設定が完了し、データベースを終了し、スレーブサーバの設定を開始。第5の構成サーバのMySQLスレーブのステップ次のように、スレーブのMySQLは、構成ファイルを変更:[mysqldを] DATADIR =の/ var / libに/ MySQLのソケット=の/ var / libに/ MySQLの/にmysql.sockユーザ= MySQLのlog_bin //オープンログバイナリログ同期バイナリログ= 1 //許可同期バイナリログSERVER_ID = 204 // SERVERID READ_ONLY = 1 //読み取り専用設定、シンボリックリンクを無効に何ら書き込み動作#は、各種セキュリティを防ぐrecommendedtoしないログ= 0 [mysqld_safeを]シンボリックリンクをリスクログインエラー=は/ var / log / mysqld.log PIDファイル=の/ var /実行/ mysqldを/ mysqldを。セットアップが完了PIDスタートMySQLサービスとwKiom1UqdMWggRBCAAFIs0dsdd8495.jpgは、ログインMySQLサーバの設定マスタサーバのデータベース「mysqlslave」のローカルルートのログインパスワードを使用して変更開始からの起動を設定した後:セットアップ後wKioL1UqdjnDxb6RAALUXArEocY767.jpg wKiom1UqdQvT9OLYAAIv0WhgDlY963.jpgが完了し、同期と同期ビューを開始ステータス:wKiom1UqdTmzX8AvAAcTH9rHzug134.jpg Slave_IO_RunningとSlave_SQL_Running状態は、はい、スレーブが仕事に持っていた指示され、これまでのところ、mysqlのマスター・スレーブ同期構造を完了しました。構成、ログマスターサーバ一旦、許可アプリケーションサーバの権限:wKiom1UqdV_wMrkbAAE7e9qCkWk916.jpg第7のステップは、マスタ - スレーブ同期試験は、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功した、スレーブデータベースかどうかを確認するために、マスターサーバー上のデータベースを作成します同期作成:マスタ:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの点は正しく、マスタ - スレーブ同期作業を決定することができます。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?JPGは、ログインMySQLサーバの設定マスタサーバのデータベース「mysqlslave」のローカルルートのログインパスワードを使用して変更:wKioL1UqdjnDxb6RAALUXArEocY767.jpg wKiom1UqdQvT9OLYAAIv0WhgDlY963.jpgセットアップが完了したら、同期を開始し、同期ステータス表示:Slave_IO_RunningとSlave_SQL_Running状態がYESの場合wKiom1UqdTmzX8AvAAcTH9rHzug134.jpgを、これは、スレーブが、これまでのところ、mysqlのマスター・スレーブ同期完成構造を取り組んできました表します。構成、ログマスターサーバ一旦、許可アプリケーションサーバの権限:wKiom1UqdV_wMrkbAAE7e9qCkWk916.jpg第7のステップは、マスタ - スレーブ同期試験は、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功した、スレーブデータベースかどうかを確認するために、マスターサーバー上のデータベースを作成します同期作成:マスタ:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの点は正しく、マスタ - スレーブ同期作業を決定することができます。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?JPGは、ログインMySQLサーバの設定マスタサーバのデータベース「mysqlslave」のローカルルートのログインパスワードを使用して変更:wKioL1UqdjnDxb6RAALUXArEocY767.jpg wKiom1UqdQvT9OLYAAIv0WhgDlY963.jpgセットアップが完了したら、同期を開始し、同期ステータス表示:Slave_IO_RunningとSlave_SQL_Running状態がYESの場合wKiom1UqdTmzX8AvAAcTH9rHzug134.jpgを、これは、スレーブが、これまでのところ、mysqlのマスター・スレーブ同期完成構造を取り組んできました表します。構成、ログマスターサーバ一旦、許可アプリケーションサーバの権限:wKiom1UqdV_wMrkbAAE7e9qCkWk916.jpg第7のステップは、マスタ - スレーブ同期試験は、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功した、スレーブデータベースかどうかを確認するために、マスターサーバー上のデータベースを作成します同期作成:マスタ:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの点は正しく、マスタ - スレーブ同期作業を決定することができます。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?セットアップ後のJPGが完了し、同期を開始し、同期ステータスを表示:Slave_IO_RunningとSlave_SQL_Running状態がイエスであるときwKiom1UqdTmzX8AvAAcTH9rHzug134.jpgは、これまでのところ、mysqlのマスタースレーブの同期が構造を完成し、スレーブが仕事に持っていた示しています。構成、ログマスターサーバ一旦、許可アプリケーションサーバの権限:wKiom1UqdV_wMrkbAAE7e9qCkWk916.jpg第7のステップは、マスタ - スレーブ同期試験は、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功した、スレーブデータベースかどうかを確認するために、マスターサーバー上のデータベースを作成します同期作成:マスタ:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの点は正しく、マスタ - スレーブ同期作業を決定することができます。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?セットアップ後のJPGが完了し、同期を開始し、同期ステータスを表示:Slave_IO_RunningとSlave_SQL_Running状態がイエスであるときwKiom1UqdTmzX8AvAAcTH9rHzug134.jpgは、これまでのところ、mysqlのマスタースレーブの同期が構造を完成し、スレーブが仕事に持っていた示しています。構成、ログマスターサーバ一旦、許可アプリケーションサーバの権限:wKiom1UqdV_wMrkbAAE7e9qCkWk916.jpg第7のステップは、マスタ - スレーブ同期試験は、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功した、スレーブデータベースかどうかを確認するために、マスターサーバー上のデータベースを作成します同期作成:マスタ:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの点は正しく、マスタ - スレーブ同期作業を決定することができます。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?JPG第7のステップは、マスター・スレーブ同期テストは、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功している。同期がスレーブデータベースに作成されたかどうかを確認するために、マスターサーバー上のデータベースを作成します。マスター:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの時点で、あなたができます仕事にOK、マスター・スレーブ同期。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?JPG第7のステップは、マスター・スレーブ同期テストは、アプリケーションサーバーがデータベースに正常に接続できるかどうかをテストするために、成功している。同期がスレーブデータベースに作成されたかどうかを確認するために、マスターサーバー上のデータベースを作成します。マスター:wKioL1UqdtKC42pNAAEVQRpHySU718.jpgスレーブ:wKioL1UqdwWB2uUoAAIvQV7lTFw070.jpgこの時点で、あなたができます仕事にOK、マスター・スレーブ同期。アプリケーション・サーバーのPHPファイルに、Webのルートディレクトリの下のデータベースへの接続を作成し、データベース接続テストが正常である、PHPは、データベースファイルの内容への接続としては以下の:?ある<PHPの$リンク=にmysql_connect('10 .60.77.203:3306「」PHP」、 'phpmysql'); //データベース場合でも($リンク)エコー "データベース接続成功!"; //プロンプトがにmysql_closeたときに成功(); //シャットデータベース>?ウェブ経由のアクセスファイルは、データベース接続が成功したことを示し、「データベース接続の成功」ページが表示されたとき。
これまでのところ、このアーキテクチャのすべての内容は、すべてのセットアップが完了すると、後者はまた、memcachedのように、いくつかのキャッシュ機構を追加し、いくつかのPHPモジュールを追加することができ、これらの要素は記事の後半に完成されるか、Redisの。