sql >> データベース >  >> NoSQL >> Redis

WebfactionでのRedisの設定

    はじめに

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

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

    インストール

    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ビットを参照してください。インストールスクリプトは、少なくともWebfactionのCentOS 5マシンでは、32ビット環境を適切に処理しません。ビットのコマンドはuname -mです。 。 Linuxが32ビットの場合、結果はi686になり、64ビットの場合はx86_64になります。詳細については、この回答を参照してください。

    > 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-cliが含まれます 、redis-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コントロールパネル(カスタムアプリ(ポートでリッスン))を使用してカスタムアプリケーションを作成します。たとえば、 fooredisという名前を付けます。 。 Redisがローカルでのみ使用されている場合、つまり同じホストから使用されている場合は、アプリのドメインやWebサイトを作成する必要がないことに注意してください。

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

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

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

    > 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を作成することです。 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つのcronジョブを作成する必要があります。

    > 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が開始されるようにします。

    このためのいくつかのより繊細な方法を、たとえば永久に使用することができます。このトピックの詳細については、このWebfactionコミュニティスレッドも参照してください。

    結論

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

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

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



    1. 流星コレクションのクエリでグループ化

    2. マングース文字列からObjectIDへ

    3. evalなしでredisからオブジェクトを取得しますか?

    4. 文字列をmongodbで日付に変換する