web-dev-qa-db-ja.com

WebfactionでのRedisの設定

Redis データベースを Webfaction 共有ホスティングアカウントに設定するために必要な手順は何ですか?

30
Akseli Palén

前書き

Webfactionサーバーの特別な環境制限のため、インストール手順はそれほど単純ではありません。それでも、最終的には、再起動後も稼働し続ける完全に機能するRedisサーバーができます。私は約半年前に次の手順でRedisを個人的にインストールしましたが、それ以来問題なく動作しています。ただし、警告の言葉ですが、特にサーバーが頻繁に使用されていないため、半年は長くはありません。

手順は、インストール、テスト、サーバーの起動、サーバーの管理、サーバーの実行の維持の5つの部分で構成されています。

Installation

Webfactionシェルにログインします

ssh [email protected]

最新のRedisを Redisダウンロードサイト からダウンロードします。

> mkdir -p ~/src/
> cd ~/src/
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz
> tar -xzf redis-2.6.16.tar.gz
> cd redis-2.6.16/

作成する前に、サーバーのLinux32ビットまたは64ビットを参照してください。インストールスクリプトは32ビット環境をうまく処理しません 少なくともWebfactionのCentOS 5マシンでは 。ビットのコマンドはuname -mです。 Linuxが32ビットの場合、結果はi686になり、64ビットの場合はx86_64になります。詳細はこちら answer をご覧ください。

> uname -m
i686

サーバーが64ビット(x86_64)の場合は、単純に作成します。

> make

ただし、サーバーが32ビット(i686)の場合は、少し余分なことをする必要があります。コマンドmake 32bitがありますが、エラーが発生します。インストールスクリプトの行を編集して、make 32bitが機能するようにします。

> nano ~/src/redis-2.6.16/src/Makefile

これから行214を変更します

$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"

これに

$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"

と保存します。次に、32ビットフラグを使用してmakeを実行します。

> cd ~/src/redis-2.6.16/  ## Note the dir, no trailing src/
> make 32bit

実行可能ファイルはディレクトリ~/src/redis-2.6.16/src/に作成されました。実行可能ファイルには、redis-cliredis-serverredis-benchmark、およびredis-sentinelが含まれます。

テスト(オプション)

インストールの出力が示すように、テストを実行してすべてが期待どおりに機能することを確認するとよいでしょう。

Hint: To run 'make test' is a good idea ;)

残念ながら、テストではtlc8.6.0をインストールする必要がありますが、これは少なくともマシンweb223ではデフォルトではありません。したがって、最初にソースからインストールする必要があります。 Tcl/Tkインストールノート および コンパイルノート を参照してください。

> cd ~/src/
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
> tar -xzf tcl8.6.0-src.tar.gz
> cd tcl8.6.0-src/unix/
> ./configure --prefix=$HOME
> make
> make test # Optional, see notes below
> make install

make testを使用したTclのテストには時間がかかり、WebFactionの環境制限のために失敗します。これをスキップすることをお勧めします。

Tlcがインストールされたので、Redisテストを実行できます。テストには時間がかかり、一時的にかなりの量のメモリを使用します。

> cd ~/src/redis-2.6.16/
> make test

テストが終了したら、続行する準備が整います。

サーバーの起動

まず、 Webfaction Control Panel (カスタムアプリ(ポートでリッスン))を使用してカスタムアプリケーションを作成します。たとえば、fooredisという名前を付けます。 Redisをローカルでのみ、つまり同じホストから使用する場合は、アプリのドメインやウェブサイトを作成する必要がないことに注意してください。

次に、アプリに指定されたソケットポート番号についてメモします。例を23015とします。

以前にコンパイルされた実行可能ファイルをアプリのディレクトリにコピーします。必要なものをすべてコピーするか、1つだけコピーするかを選択できます。

> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .

サンプル構成ファイルもコピーします。すぐに変更します。

> cp ~/src/redis-2.6.16/redis.conf .

これで、Redisはすでに実行可能になりました。ただし、いくつかの問題があります。まず、デフォルトのRedisポート6379がすでに使用されている可能性があります。次に、ポートが空いている場合でも、はい、サーバーを起動できますが、シェルを終了すると同時にサーバーの実行が停止します。最初の場合はredis.confを編集する必要があり、2番目の場合は、redis.confを編集することで解決されるデーモンが必要です。

Redisは デーモンモード で実行できます。そのためには、デーモンがプロセスID、PIDを格納する場所を設定する必要があります。通常、pidfileは/ var/run /に保存されますが、環境上の制限があるため、ホームディレクトリでそれらの場所を選択する必要があります。サーバーの管理の部分で後述する理由から、pidfileを実行可能ファイルと同じディレクトリに配置することをお勧めします。自分でファイルを作成する必要はありません。Redisが自動的にファイルを作成します。

次に、編集のためにredis.confを開きます。

> cd ~/webapps/fooredis/
> nano redis.conf

次のように構成を変更します。

  • daemonize no-> daemonize yes
  • pidfile /var/run/redis.pid-> pidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379-> port 23015

最後に、Redisサーバーを起動します。 Redisが適切なポートをリッスンし、デーモンとして実行されるように、confファイルを指定します。

> cd ~/webapps/fooredis/
> ./redis-server redis.conf
> 

それが実行されているのを見てください。

> cd ~/webapps/fooredis/
> ./redis-cli -p 23015
redis 127.0.0.1:23015> SET myfeeling Phew.
OK
redis 127.0.0.1:23015> GET myfeeling
"Phew."
redis 127.0.0.1:23015> (ctrl-d)
>

必要に応じてサーバーを停止します。

> ps -u $USER -o pid,command | grep redis
  718 grep redis
10735 ./redis-server redis.conf
> kill 10735

または

> cat redis.pid | xargs kill

サーバーの管理

使いやすさと次のパートの準備作業として、クライアントを開き、サーバーを起動、再起動、停止するのに役立つスクリプトを作成します。簡単な解決策は、メイクファイルを作成することです。 makefileを作成するときは、スペースの代わりにタブを使用することを忘れないでください。

> cd ~/webapps/fooredis/
> nano Makefile

# Redis Makefile
client cli:
    ./redis-cli -p 23015

start restart:
    ./redis-server redis.conf

stop:
    cat redis.pid | xargs kill

ルールは非常に自明です。 2番目のルールの特別な点は、デーモンモードで、。/ redis-serverを呼び出しても、すでに実行されているプロセスがある場合、新しいプロセスは作成されないことです。

3番目のルールには、静かな知恵が含まれています。 redis.pidがfooredisのディレクトリではなく、たとえば/var/run/redis.pidに保存されている場合、サーバーを停止するのはそれほど簡単ではありません。これは、複数のRedisインスタンスを同時に実行する場合に特に当てはまります。

ルールを実行するには:

> make start

サーバーの稼働を維持する

これで、デーモンモードで実行されているRedisのインスタンスができました。これにより、シェルを停止せずに終了できます。これはまだ十分ではありません。プロセスがクラッシュした場合はどうなりますか?サーバーマシンが再起動された場合はどうなりますか?これらをカバーするには、2つの cronjobs を作成する必要があります。

> export EDITOR=nano
> crontab -e

次の2行を追加して保存します。

*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start

最初のものは、fooredisが実行されていることを5分ごとに保証します。上で述べたように、すでに実行されている場合、これは新しいプロセスを開始しません。 2つ目は、サーバーマシンの再起動直後で、最初のルールが開始されるずっと前にfooredisが開始されるようにします。

これには、さらに繊細な方法を使用できます。たとえば、 forever です。このトピックの詳細については、こちらも参照してください Webfaction Community thread

結論

今、あなたはそれを持っています。多くのことが行われましたが、おそらくもっと多くのことが来るでしょう。ここで取り上げなかった将来のやりたいことには、次のようなものがあります。

  • パスワードを設定し、他のユーザーがデータベースをフラッシュしないようにします。 (redis.confを参照)
  • メモリ使用量の制限(redis.confを参照)
  • 使用状況とエラーのログ(redis.confを参照)
  • たまにデータをバックアップします。

アイデア、コメント、修正はありますか?

107
Akseli Palén

Akseliの優れた答えを要約すると:

assume your user is named "magic_r_user"

cd ~
wget "http://download.redis.io/releases/redis-3.0.0.tar.gz"
tar -xzf redis-3.0.0.tar.gz
mv redis-3.0.0 redis
cd redis
make
make test
create a custom app "listening on port" through the Webfaction management website
    assume we named it magic_r_app
    assume it was assigned port 18932
cp ~/redis/redis.conf ~/webapps/magic_r_app/
vi ~/webapps/magic_r_app/redis.conf
    daemonize yes   
    pidfile ~/webapps/magic_r_app/redis.pid
    port 18932
test it
    ~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf
    ~/redis/src/redis-cli -p 18932
    ctrl-d
    cat ~/webapps/magic_r_app/redis.pid | xargs kill
crontab -e
    */1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log
don't forget to set a password!
5

参考までに、redis 2.8.8+をインストールしている場合、コンパイル時にエラー、__sync_add_and_fetch_4への未定義の参照が発生する可能性があります。詳細については、 http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/ を参照してください。

ページがオフラインになった場合に備えて、以下のページの関連部分を貼り付けました。基本的に、CFLAGS変数をエクスポートして、ビルドプロセスを再開する必要があります。

[root@devvm1 redis-2.6.7]# export CFLAGS=-march=i686
[root@devvm1 redis-2.6.7]# make distclean
[root@devvm1 redis-2.6.7]# make
1
Brad