[ Redis](https://cloud.tencent.com/product/crs?from=10680)は、永続性を実現するためにメモリストレージモデルとオプションのディスク書き込みを使用するオープンソースのキー値データストアです。トランザクション、公開/サブスクライブ、自動フェイルオーバーなどの機能があります。実稼働環境では、RedisをLinuxと一緒に使用することをお勧めしますが、開発者は開発およびテストプラットフォームとしてOSXも使用します。 Redisの顧客はほとんどの言語で書いていますが、そのうちのいくつかはWebサイトで推奨されています。
実稼働環境では、少なくとも2つのノードでデータを複製することがベストプラクティスと見なされます。冗長性により、環境障害が発生した場合の回復が可能になります。これは、アプリケーションのユーザーベースが拡大した場合に特に重要です。
このガイドの最後に、DigitalOceanに次のように2つのRedisドロップレットを設定します。
また、スレーブサーバーに切り替えて一時的なマスターサーバーとして設定する方法についても説明します。
複数のスレーブサーバーを自由にセットアップします。
このチュートリアルを完了するには、 sudo
コマンドで使用できるroot以外のアカウントを持つUbuntu ** server が必要であり、ファイアウォールがオンになっています。サーバーをお持ちでない学生は[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には無料**のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。
これは以前のバージョンや他のLinuxディストリビューションに適用される可能性がありますが、Ubuntu14.04をお勧めします。
テストの目的で、処理する実際のワークロードがないため、小さなインスタンスを使用しますが、実稼働環境では、より大きなサーバーが必要になる場合があります。
メインサーバーをホストするDropletから始めて、最初のステップはRedisをインストールすることです。まず、Chris LeaのRedisリポジトリを追加する必要があります(サードパーティのリポジトリを追加するときは、いつものように特に注意してください。メンテナは信頼できる人物であるため、このリポジトリを使用しています)。
sudo add-apt-repository ppa:chris-lea/redis-server
ENTER
を押してリポジトリを受け入れます。
次のコマンドを実行して、パッケージを更新します。
sudo apt-get update
Redisサーバーをインストールします。
sudo apt-get install redis-server
Redisが稼働しているかどうかを確認します。
redis-benchmark -q -n 1000-c 10-P 5
上記のコマンドは、 redis-benchmark
をクワイエットモードで実行し、合計1000リクエスト、10並列接続、5パイプラインリクエストを実行することを示しています。 Redisのベンチマークの実行の詳細については、ターミナルで「redis-benchmark --help」と入力すると、役立つ情報と例が出力されます。
ベンチマークテストを実行します。完了すると、次のような出力が表示されます。
Output
PING_INLINE:166666.67 requests per second
PING_BULK:249999.98 requests per second
SET:249999.98 requests per second
GET:499999.97 requests per second
INCR:333333.34 requests per second
LPUSH:499999.97 requests per second
LPOP:499999.97 requests per second
SADD:499999.97 requests per second
SPOP:499999.97 requests per second
LPUSH(needed to benchmark LRANGE):499999.97 requests per second
LRANGE_100(first 100 elements):111111.12 requests per second
LRANGE_300(first 300 elements):27777.78 requests per second
LRANGE_500(first 450 elements):8333.33 requests per second
LRANGE_600(first 600 elements):6369.43 requests per second
MSET(10 keys):142857.14 requests per second
ここで、Redis スレーブサーバーに対してこの部分を繰り返します。より多くのドロップレットを構成する場合は、必要な数のスレーブサーバーをセットアップできます。
この時点で、Redisは2つのノードにインストールされ、実行されています。いずれかのノードの出力が上記の出力と類似していない場合は、セットアッププロセスを慎重に繰り返し、すべての前提条件が満たされていることを確認してください。
RedisはすでにデュアルDropletクラスターで実行されているので、構成ファイルを編集する必要があります。後で説明するように、マスターサーバーとスレーブサーバーの構成には微妙な違いがあります。
メインサーバーから始めましょう。
お気に入りのテキストエディタで / etc / redis / redis.conf
を開きます。
sudo nano /etc/redis/redis.conf
次の行を編集します。
TCPのキープアライブタイマーに適切な値を設定します。
tcp-keepalive 60
この行をコメントアウトすることにより、ネットワーク上の誰でもサーバーにアクセスできます。
# bind 127.0.0.1
Redisの性質とその非常に高速性を考えると、攻撃者はあまり問題なくパスワードを強制的に解読する可能性があります。これが、 requirepass
行のコメントを解除し、複雑なパスワード(またはできれば複雑なパスワード)を追加することをお勧めする理由です。
requirepass your_redis_master_password
使用シナリオに応じて、次の行を変更するかどうかを選択できます。このチュートリアルでは、キーの削除は不要であると想定しています。行のコメントを解除し、次のように設定します。
maxmemory-policy noeviction
最後に、データをバックアップするために次の変更を加えます。これらの行のコメントを外すか、次のように設定します。
appendonly yes
appendfilename redis-staging-ao.aof
変更内容を保存。
Redisサービスを再起動して、構成の変更を再読み込みします。
sudo service redis-server restart
マスターサーバーの準備ができたので、スレーブを続行します。
スレーブがマスターインスタンスに接続できるように、いくつかの変更を加える必要があります。
お気に入りのテキストエディタで / etc / redis / redis.conf
を開きます。
sudo nano /etc/redis/redis.conf
次の行を編集します。一部の設定はメインサーバーの設定と同様になります。
この行をコメントアウトすることにより、ネットワーク上の誰でもサーバーにアクセスできます。
# bind 127.0.0.1
スレーブサーバーにもパスワードが必要なので、コマンド( INFO
など)を与えることができます。この行のコメントを解除し、サーバーパスワードを設定します。
requirepass your_redis_slave_password
行のコメントを解除し、メインサーバーのIPアドレスに到達できることを示してから、コンピューターに設定されているポートを指定します。デフォルトでは、ポートは6379です。
slaveof your_redis_master_ip 6379
masterauth
行のコメントを解除し、マスターサーバーで以前に設定したパスワード/パスワードを入力します。
masterauth your_redis_master_password
これらの変更を保存して、ファイルを終了します。次に、メインサーバーで行ったのと同じように、サービスを再起動します。
sudo service redis-server restart
これにより、Redisが再初期化され、変更されたファイルが読み込まれます。
Redisに接続します。
redis-cli -h 127.0.0.1-p 6379
スレーブサーバーのパスワードを承認に使用します。
AUTH your_redis_slave_password
この時点で、機能的なマスタースレーブRedisクラスターを実行しており、両方のマシンが適切に構成されています。
フェイルオーバー動作のスクリプトを開始したい場合は、セットアップをテストすることで、Redisドロップレットの動作をよりよく理解できます。ここで行う必要があるのは、構成が正しく機能し、マスターがスレーブRedisインスタンスと通信していることを確認することです。
まず、メインサーバーのターミナルを介してRedisに接続します。
最初に、デフォルトでポート6379で実行されるローカルインスタンスに接続します。ポートを変更する場合は、それに応じてコマンドを変更してください。
redis-cli -h 127.0.0.1-p 6379
ここで、Redisを認証するようにメインサーバーを構成するときに設定したパスワードを使用します。
AUTH your_redis_master_password
「OK」応答が返されるはずです。今、あなたはただ実行する必要があります:
INFO
Redisマスターサーバーに関するすべての情報が表示されます。特に、次のような「#Replication」セクションに関心があります。
Output
...
# Replication
role:master
connected_slaves:1
slave0:ip=111.111.111.222,port=6379,state=online,offset=407,lag=1
master_repl_offset:407
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:406
...
connected_slaves:1
行に注意してください。これは、別のインスタンスがメインのドロップレットと通信していることを意味します。また、スレーブIPアドレス、ポート、ステータス、その他の情報を取得していることもわかります。
それでは、スレーブの「#Replication」の部分を見てみましょう。プロセスはメインサーバーと同じです。 Redisインスタンスにログインし、 INFO
コマンドを発行して、出力を表示します。
Output
...
# Replication
role:slave
master_host:111.111.111.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1401
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
...
このマシンはスレーブとして機能し、Redisマスターサーバーと通信しており、独自のスレーブを持っていないことがわかります。
このアーキテクチャを構築するということは、データの整合性を確保し、アプリケーションのダウンタイムを最小限に抑えるような方法で障害を処理することも意味します。どのスレーブもマスターに昇格できます。まず、スイッチを手動でテストしてみましょう。
スレーブで、Redisインスタンスに接続する必要があります。
redis-cli -h 127.0.0.1-p 6379
次に、スレーブの構成時に設定したパスワードを使用してRedisを認証します
AUTH your_redis_slave_password
従属動作をオフにします。
SLAVEOF NO ONE
フィードバックは「OK」になります。ここで入力します:
INFO
#Replication
セクションを探して、次の出力を見つけます。
Output
...
# Replication
role:master
connected_slaves:0
master_repl_offset:1737
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
...
予想どおり、スレーブはマスターになり、他のマシン(存在する場合)からの接続を受け入れる準備ができました。メインマスターサーバーをデバッグするときの一時的なバックアップとして使用できます。
元のマスターサーバーに依存する複数のスレーブサーバーがある場合は、それらすべてを新しくアップグレードされたマスターサーバーにポイントする必要があります。
これは簡単にスクリプト化できます。障害が検出されたら、次の手順を実行する必要があります。
SLAVEOF NOONE
コマンドを実行します。 Redisバージョン1.0.0以降、このコマンドはスレーブサーバーにデータのコピーを停止し、マスターサーバーとしての機能を開始するように指示します。SLAVEOF hostnameport
を実行すると、古いマスターからのコピーを停止し、現在廃止されているデータを完全に破棄して、新しいマスターからのコピーを開始するように指示されます。 hostname
と port
を新しくアップグレードされたホストからの正しい値に置き換えてください上記の手順を完了する方法はたくさんあります。ただし、環境に適したソリューションを実装し、実際の障害が発生する前に徹底的にテストすることができます。
元のマスターサーバーに再接続しましょう。 スレーブサーバーで、Redisにログインし、次のコマンドを実行します。
SLAVEOF your_redis_master_ip 6379
もう一度 INFO
コマンドを実行すると、元の設定に戻ったことがわかります。
2つのサーバーで構成される環境を正しくセットアップしました。一方のサーバーはRedisマスターサーバーとして機能し、もう一方のサーバーはデータをスレーブサーバーとして複製します。このようにして、マスターサーバーがオフラインになったり、データが失われたりした場合、問題が解決するまで、回復のためにスレーブサーバーの1つに切り替える方法がわかります。
次のステップには、自動フェイルオーバープロセスのスクリプトを作成することや、OpenV **やTincなどのV **ソリューションを使用してすべてのドロップレット間の安全な通信を確保することが含まれる場合があります。さらに、構成を検証するには、テスト手順とスクリプトが不可欠です。
さらに、このような設定を実稼働環境に展開する場合は、注意が必要です。学習する必要のあるRedisドキュメントページでは、アプリケーションに十分なセキュリティモデルの種類を明確に理解している必要があります。私たちはRedisをセッションストアとして使用することが多く、そこに含まれる情報は攻撃者にとって貴重です。通常は、プライベートネットワークを介してのみこれらのマシンにアクセスし、セキュリティの複数のレイヤーの背後に配置します。
これは、データストアを構築するための簡単な出発点です。マスタースレーブアーキテクチャを使用するようにRedisを設定するための完全なガイドではありません。
Redisクラスター関連のチュートリアルの構成の詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でRedisクラスターを構成する方法」
Recommended Posts