5

インスタンス化された Amazon EC2 仮想 Ubuntu 12.04 サーバーを単一の Riak ノードとして使用しています。芭蕉の Web サイトのガイドを使用して、インスタンスに Riak をセットアップするための適切な段階をすべて実行しまし。インスタンスx.x.x.x のプライベート IP アドレスは次のとおりです。

インストール

  • root 権限を取得するために使用sudo su -します (EC2 は「Ubuntu」としてログインします)。

  • 以下を使用して SSL ライブラリをインストールします。

    sudo apt-get install libssl0.9.8

  • 12.04 の 64 ビット パッケージのダウンロード:

    wget http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/CURRENT/ubuntu/precise/riak_1.2.1-1_amd64.deb

  • 次に、次の方法で解凍します。

    sudo dpkg -i riak_1.2.1-1_amd64.deb

芭蕉ガイドの指示に従って、次の 2 つのファイルを更新しました (vi を使用)。

vm.args

  • -name riak@x.x.x.xインスタンスのプライベート IP に変更します。

app.config

  • {http, [ {"x.x.x.x", 8098 } ]}インスタンスのプライベート IP に変更します。

  • {pb_ip, "x.x.x.x"}インスタンスのプライベート IP に変更します。

サーバーを最初にセットアップして上記を実行したとき、Riakノードは正常に機能していました。ノードに接続でき、使用すると次のように正常riak startriak-admin test返されました。

>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@x.x.x.x'

翌日、私はインスタンスを起動し、インスタンスの新しい IP アドレスy.y.y.y(インスタンスのプライベート IP は停止/開始するたびに変更されます) を使用して上記のプロセス (インストールを無視) を繰り返しriak start、ターミナルに入力しました。

>Attempting to restart script through sudo -H -u riak
>Riak failed to start within 15 seconds,
>see the output of 'riak console' for more information.
>If you want to wait longer, set the environment variable
>WAIT_FOR_ERLANG to the number of seconds to wait

riak コンソールに表示されるエラーは次のとおりです。

>gen_server riak_core_capability terminated with reason: no function clause matching orddict:fetch('riak@y.y.y.y', [{'riak@x.x.x.x',[{{riak_core,staged_joins},[true,false]},{{riak_core,vnode_routing},[proxy,...]},...]}])

は新しいインスタンスy.y.y.yの IP アドレスでx.x.x.x、古いものでした。

私はしばらくこれについて頭を悩ませてきましたが、このトピックについて何も見つけることができません.私が考えることができる唯一の解決策は、PATHディレクトリが間違っている可能性がない場合にRiakを再インストールすることです. それが失敗した場合、私の最後の手段は、インスタンスを終了し、新しいインスタンスで Riak を再構成することです。ですから、銃を飛ばす前に、私が聞きたいことは次のとおりです。

  • のフィールドを新しいインスタンスの IP アドレスで更新した後app.configvm.argsコマンドriak startが成功しなくなったのはなぜですか?

  • Ubuntu EC2 インスタンスに静的プライベート IP を割り当てる方法はありますか? これは問題の解決に役立つだけでなく、インスタンスを開始/停止するたびapp.configに更新する時間を節約できます。vm.args

4

3 に答える 3

6

それで、もう少し掘り下げて熱心に読んだ後、私は解決策を見つけました:

riak_coreをリセットするには、Riakリングを取り外し、Riakを再起動する必要があります。

これを行うには、ターミナルで次のコマンドを使用します。

rm -rf /var/lib/riak/ring/*

  • 注: これは、更新後に実行する必要がありますapp.configvm.args新しいサーバーIPを使用すると、厄介な副作用が発生する可能性があります。

それで

riak start

「接続に失敗しました」というエラーがスローされなくなり、riak-admin testコマンドを発行した後、快適に受信しました(y.y.y.yインスタンスのプライベートIPはどこにありますか)。

>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@y.y.y.y'

このソリューションは、物理サーバーだけでなく仮想サーバーにも適用されることに注意してください。IPの再割り当ては、物理サーバーでは非常にまれにしか発生しないと思いますが。

これで問題は解決しますが、インスタンスを再起動する必要があるときはいつでもapp.configvm.argsファイルを編集してプライベートIPアドレスを変更する必要があります(Ubuntuインスタンスが起動/停止するたびにプライベートIPが変更されることを忘れないでください)。上記のコマンドを使用してRiakリングをクリアするので、それは正確にエレガントな解決策ではありません。

静的プライベートIPをEC2インスタンス(または両方のハードルに取り組む別のソリューション)に設定する方法を誰かが知っている場合、この問題は完全に解決されます。

編集:14/12/12

EC2インスタンスに静的IPを割り当てるための限定的なソリューション:

アマゾンウェブサービスでは、Elastic IPをEC2インスタンス(あらゆる種類)に関連付けることができます。したがって、インスタンスにエラスティックIPが関連付けられている場合、再起動しても、そのIPはそのインスタンスに関連付けられたままになります。ElasticIPに関するドキュメントはここにあります

Amazonの無料使用枠の下にいる場合、Elastic IPを作成しても、実行中のインスタンスに関連付けられている限り、料金は発生しません。Elastic IPの関連付けが解除された場合、Amazonは、Elastic IPの関連付けが解除されたままである限り、未使用のElasticIPの実行時間ごとに料金が発生します。たとえば、インスタンスを終了すると、エラスティックIPの関連付けが解除されます。ただし、そのエラスティックIPが再関連付けまたは解放されない限り、上記が適用されます。インスタンスを完全に停止してから後で開始すると、エラスティックIPの関連付けも解除されます。

インスタンスごとに最大1つのエラスティックIPを持つことができ、それ以上は料金が発生します。

興味のある方は、 ElasticIPの価格についてElasticIPAddressesをご覧ください。

于 2012-12-13T16:02:37.520 に答える
0

app.configのPBとHTTPIP、およびvm.args IPを変更するだけでなく、次のコマンドも実行する必要がありました。

http://docs.basho.com/riak/1.2.0/references/Command-Line-Tools --- riak-admin /#reip

これを行わずに、riak consoleを実行して出力を確認しても、古いIPはエラーログに残っています。

于 2013-01-25T16:11:51.847 に答える