5

インスタンスの数は、Amazon Elastic Beanstalk で随時変更されます。アプリケーションが PHP で構築されている場合、セッションは複数のインスタンス間でどのように維持されますか? 親インスタンス (アプリが開始された最初のインスタンス) を削除しないようにするにはどうすればよいですか?

4

7 に答える 7

9

AWS ブログのこの投稿では、DynamoDB を使用して、AWS SDK for PHP を使用してセッション状態の処理を行う方法について説明しています。

http://aws.typepad.com/aws/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

于 2013-09-07T18:36:20.243 に答える
2

DynamoDB と Tomcat を使用して永続セッションを構成する方法のチュートリアルを次に示します。 https://packageprogrammer.wordpress.com/2014/01/13/aws-elastic-beanstalk-and-dynamodb-session-manager-for-tomcat/

AWS プロジェクト: https://github.com/aws/aws-dynamodb-session-tomcat

DynamoDB で Tomcat セッション状態を管理する: http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-tomcat-session-manager.html

上記のリンクからの重要な抜粋。チュートリアルでは Tomcat 7 と aws-dynamodb-session-tomcat の 1.0.1 を使用しているため、バージョン番号が変更されている可能性があることに注意してください。

Tomcat の構成

AmazonDynamoDBSessionManagerForTomcat-2.0.4.jar をaws-dynamodb-session-tomcatからダウンロードし、Tomcat インストールの lib ディレクトリにコピーします。 context.xml を編集して、コードで .jar を使用します。

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
             createIfNotExist="true" />
</Context>

Elastic Beanstalk の設定

aws-dynamodb-session-tomcatから AmazonDynamoDBSessionManagerForTomcat-2.0.4.jar をダウンロードし、WAR の .ebextensions ディレクトリにコピーします。以下のコードで context.xml を編集し、WAR の .ebextensions ディレクトリにコピーします。 /WEB-INF ディレクトリ内、grails アプリケーションの場合は /web-app 内にある必要があることに注意してください)、.config ファイルを作成して、context.xml の置換を実行するコマンドを記述し、jar を Beanstalk インスタンス内にコピーします。

container_commands:
  01-copy-aws-library:
    command: "cp WEB-INF/.ebextensions/AmazonDynamoDBSessionManagerForTomcat-2.0.4.jar.jar /usr/share/tomcat8/lib/"
  02-replace-tomcat-context:
    command: "cp WEB-INF/.ebextensions/context.xml /etc/tomcat8/context.xml"

次に、変更を加えた戦争をアップロードして展開します。ログインして AWS コンソール -> サービス -> DynamoDB に移動し、Tomcat_SessionState という名前のテーブルを探してください。あなたには親しみやすさと粘り強さがあります!

于 2016-12-05T19:20:40.220 に答える
1

個人的な経験から、セッションをデータベース (RDS|DynamoDB|SimpleDB) またはキャッシュ サーバー (AWS は最近 Redis のサポートを開始しました) に移動することをお勧めします。アプリケーションがスケーリングを開始したり、ヘルスチェックの失敗によって終了したりすると、頭の痛い問題が発生します。

于 2013-09-15T08:39:55.600 に答える
0

これを管理する唯一の方法は、セッションを DynamoDB などに保存することだと思います。Elastic Bean 環境の Tomcat に Java ベースのアプリをデプロイしたときに、まったく同じ問題が発生しました。ロード バランサーがインスタンスのスケール ダウンに使用されると、そのインスタンスにアタッチされたユーザーは自動的にログアウトされます。セッションを DynamoDB に移動することで、この問題は解決しました。

于 2013-10-31T11:15:17.197 に答える
0

通常の Java Web アプリケーションで Elastic Beanstalk を使用する場合、必ずセッション スティッキを有効にしたいと思うでしょう。そうしないと、ユーザーのブラウザーからの各 HTTP 要求が別のサーバーにルーティングされる可能性があります。

ユーザーが「立ち往生」しているサーバーがシャットダウンされたときにユーザーのセッションが破棄されるという問題を回避するには、Tomcat セッションのレプリケーションを調べる必要があります。残念ながら、これは Elastic Beanstalk に標準で付属しているものではないため、セッション レプリケーションをセットアップするには、アプリケーションで使用するカスタム Elastic Beanstalk AMI を作成する必要があります。また、マルチキャストは AWS や私が知っている他のクラウド環境では利用できないため、マルチキャストに依存しない Tomcat セッション レプリケーションの実装を使用する必要があります。マルチキャストに依存しない実装の例は、データベース (Amazon RDS など) または memcached サーバー (Amazon Elastic Cache など) を使用して、複数の Tomcat インスタンスでセッションを利用できるようにする実装です。

また、Elastic Beanstalk UI では、ロード バランサーによって生成された HTTP Cookie のみを有効にできることに注意してください。ただし、Elastic Beanstalk がロード バランサーを作成した後、EC2 コンソールに移動し、ロード バランサーの設定を変更してアプリケーション生成の HTTP Cookie に切り替え、「JSESSIONID」Cookie を使用するように指示できます。

于 2013-10-31T11:44:48.450 に答える