1. ホーム
  2. ubuntu

[解決済み] Redis - リモートサーバへの接続

2022-08-06 04:28:48

質問

のクイックスタートガイドの指示に従い、Redisをインストールしたところ、うまくいきました。 http://redis.io/topics/quickstart のクイック・スタート・ガイドの指示に従い、Ubuntu 10.10サーバーにインストールしました。私はサービスをdameonとして実行しています(init.dで実行できるように)。

サーバーはRackspace Clusterの一部で、内部と外部のIPを使用しています。ホストはポート 6379 (Redis の標準) で実行されています。

以下のようにiptablesに6379番ポートからの着信接続を許可する行を追加しています。

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

別のサーバーにある私のPHPコードでは、ここで新しいRedisサーバーに接続しようとしています。

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

これを実行すると、いつも接続が拒否されます。redis.confファイルでは、ローカルバインドコマンドがコメントアウトされているので、localhostのIP以上の上でリッスンされているはずです。ローカルマシンのデータベースには接続できるのですが、他のサーバーには接続できません。外部と内部のIPを試しましたが、うまくいきませんでした。

これを動作させるために何か提案はありますか?

どのように解決するのですか?

まず、想定しているIPでリッスンしていることを確認します。

netstat -nlpt | grep 6379

起動/停止の方法によっては、インスタンスを再起動したつもりが、実際には再起動していなかったということもありえます。netstat は、あなたが考えている場所でリッスンしているかどうかを教えてくれます。そうでない場合、再起動し、再起動したことを確認します。 再起動しても期待した場所でリスニングしていない場合は、念のため設定ファイルを確認してください。

期待する場所で待機していることを確認した後、アクセス権を持つリモート ノードから試してみてください。

redis-cli -h REMOTE.HOST ping

ホスト名やローカルホストの代わりに、リッスンしていると思われる IP を使って、ローカルホストから試してみることもできます。どちらの場合でも、PONGが応答するのがわかるはずです。

そうでない場合、ファイアウォールがブロックしています。これは、ローカルの IPTables またはノード間のファイアウォールの可能性があります。IPtables 設定にログ ステートメントを追加して、6379 を超える接続をログに記録して、何が起こっているかを確認することができます。また、ローカルと非ローカルから同じIPにredis pingを試してみると、よくわかります。ローカルで応答があり、リモートで応答がない場合、私は、オンノードIPテーブルルールの複雑さに応じて、介在するファイアウォールに傾くでしょう。