🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
RAID

RAIDは、複数のハードディスクにデータを分散して冗長性を向上させる技術。ディスク障害時のユーザデータの再生を可能にするディスクアレイの代表的な実装形態です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

1827閲覧

Raidサーバー環境でCMSを使った画像アップロードが安定しない

happy_girl

総合スコア7

RAID

RAIDは、複数のハードディスクにデータを分散して冗長性を向上させる技術。ディスク障害時のユーザデータの再生を可能にするディスクアレイの代表的な実装形態です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/11/01 03:07

Raidサーバー環境でCMSを使った画像アップロードが安定しない

問題点

Raidサーバーのため、server-01かserver-02どちらのサーバーに接続されるか不明のため、アップロードが安定しない

■server-01でアップロードされた画像
正しく表示

■server-02でアップロードされた画像
server-01と同期されるため画像削除される

環境

・AWSで構築されたRaidサーバー(server-01+server-02)
┗server-02にはserver-01のドキュメントルート配下を5分毎に同期

・phpを利用した独自CMS

CMSからアップロードした際の挙動の流れ

server-01:
server-02:server-01のドキュメントルート配下を5分毎に同期

CMSでアップロード
server-01:
server-02:画像アップロード

server-01:
server-02:server-01のドキュメントルート配下を5分毎に同期するため画像削除

DBには画像データが登録されているが、実際サーバーには上がっておらずエラーが発生

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/11/01 03:31 編集

環境の確認ですが、ロードバランサーではなく Raid ですか? Server-1 と Server-2 は、どのように振り分けているのでしょうか? データベースには、登録されているそうですが、データベースは、どのような構成ですか?
happy_girl

2019/11/01 03:34

ありがとうございます。 ロードバランサーではなく Raidです。 Server-1とServer-2の振り分けは不明の状況です。
yoorwm

2019/11/01 03:41

使い方を間違えている気がしますが、server-1が外部からアクセスされるCMSとして使用していて、server-2がバックアップ用にある、という構成とは違うのですか?
CHERRY

2019/11/01 03:52

データベースについての回答がないのですが、Server1やServer2 とは、別サーバーですか?
happy_girl

2019/11/01 03:53

ありがとうございます。 バックアップという構成ではなく、高負荷に耐えるためパフォーマンス向上を目的とした構成です。 変更箇所が5分程度、更新の度に先祖帰りを繰り返す点 ログイン後、セッションが頻繁に切れる事からserver-1とserver-2がランダムに振り分けられている様に感じます。 セッションについての問題はセッション情報をデータベース側に持たせる事で解決しました。
yoorwm

2019/11/01 03:56

単純に、構成間違えていますね。 構成図を書いてみて、相談してみると良いです。
CHERRY

2019/11/01 03:56

振り分け方法が分からないということは、構築した人は別にいると思うのですが、サーバー環境を構築した人に聞くことはできないのですか?
guest

回答2

0

Raidサーバーという用語は一般的では無いので正確な構成がわからないと何とも言えませんが、
DNSラウンドロビンとかで単純に分散配置されたサーバなのかなと推測しての回答になります。

どれもメリット/デメリット/制約事項はあるので、導入が可能かどうか検討/検証してみてください。

簡単な方法(アプリケーションの改修を伴わない方法)

画像をアップロードするページについては全てserver-01にアクセスするように振り分け方法を変更する。
例えばCMS管理画面からしか画像をアップロードできないのであれば、
別ドメイン(やサブドメイン)を用意して管理画面へはその別ドメインからしかアクセスしないようにする。
別ドメインのAレコードにはserver-01のIPアドレスのみ登録することで、server-01にしかファイルがアップロードされなくなる

簡単な方法その2(ファイルの削除は諦める)

  1. server-01→server-02のファイル同期のうち、画像アップロードディレクトリに関してはファイル削除を行わないようにする
  2. server-02→server-01のファイル同期(画像削除は行わない)を追加する

古典的によくある方法1

  1. server-01の画像アップロードディレクトリを共有ディレクトリにして、server-02からマウント出来るようにする
  2. ディレクトリはリアルタイムに同期されるようになるので、5分ごとの同期は廃止する

古典的によくある方法2

Lsyncd+Rsyncで双方向リアルタイム同期を行う
参考

AWSならではの方法。割と簡単(アプリケーションの改修は不要で、OS側の設定変更が必要)

EFSをserver-01とserver-02からマウントする

AWSならではの方法。アプリケーションの改修は必要

(CHERRYさんの回答にもある通り)S3を使う

投稿2019/11/01 03:57

編集2019/11/01 04:22
tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

現在の内容からヤマカンで。

高負荷対策ということであれば、Server1 と Server2 が、ロードバランサーで振り分けられているのでしょうね。

Server1 と Server2 と データベースの関係が分からないと具体的な回答は難しいと思いますが、ファイルのアップロードの問題だけであれば、ファイルのアップロード先や参照先に S3 を使いましょう。

投稿2019/11/01 04:01

CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

happy_girl

2019/12/02 02:19

まさにこちらのパターンでした! たすかりました!! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問