Ubuntu14.04でRedisクラスターを構成する方法

前書き ###

[ 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をお勧めします。

テストの目的で、処理する実際のワークロードがないため、小さなインスタンスを使用しますが、実稼働環境では、より大きなサーバーが必要になる場合があります。

ステップ1-Redisをインストールする

メインサーバーをホストする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つのノードにインストールされ、実行されています。いずれかのノードの出力が上記の出力と類似していない場合は、セットアッププロセスを慎重に繰り返し、すべての前提条件が満たされていることを確認してください。

ステップ2-Redisマスターを構成する

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

マスターサーバーの準備ができたので、スレーブを続行します。

手順3-Redisスレーブを構成する

スレーブがマスターインスタンスに接続できるように、いくつかの変更を加える必要があります。

お気に入りのテキストエディタで / 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クラスターを実行しており、両方のマシンが適切に構成されています。

ステップ4-マスタースレーブレプリケーションを確認する

フェイルオーバー動作のスクリプトを開始したい場合は、セットアップをテストすることで、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マスターサーバーと通信しており、独自のスレーブを持っていないことがわかります。

ステップ5-スレーブに切り替える

このアーキテクチャを構築するということは、データの整合性を確保し、アプリケーションのダウンタイムを最小限に抑えるような方法で障害を処理することも意味します。どのスレーブもマスターに昇格できます。まず、スイッチを手動でテストしてみましょう。

スレーブで、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
​
...

予想どおり、スレーブはマスターになり、他のマシン(存在する場合)からの接続を受け入れる準備ができました。メインマスターサーバーをデバッグするときの一時的なバックアップとして使用できます。

元のマスターサーバーに依存する複数のスレーブサーバーがある場合は、それらすべてを新しくアップグレードされたマスターサーバーにポイントする必要があります。

これは簡単にスクリプト化できます。障害が検出されたら、次の手順を実行する必要があります。

上記の手順を完了する方法はたくさんあります。ただし、環境に適したソリューションを実装し、実際の障害が発生する前に徹底的にテストすることができます。

ステップ6-メインサーバーに再接続します

元のマスターサーバーに再接続しましょう。 スレーブサーバーで、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

Ubuntu14.04でRedisクラスターを構成する方法
Ubuntu16.04でRedisレプリケーションを構成する方法
Ubuntu14.04でRedisのインストールを保護する方法
Ubuntu16.04にNATSをインストールして構成する方法
Ubuntu18.04にGogsをインストールして構成する方法
Ubuntu18.04にCyberpanelをインストールして構成する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu18.04にGitLabをインストールして構成する方法
Ubuntu18.04にAnsibleをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu18.04にVNCをインストールして構成する方法
Ubuntu16.04にSphinxをインストールして構成する方法
Ubuntu14.04にOrientDBをインストールして構成する方法
Ubuntu14.04でApacheコンテンツキャッシングを構成する方法
Ubuntu12.04にAppScaleをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu18.04に基づいて固定IPを構成する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu14.04にDjangoをデプロイする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にRをインストールする方法
Ubuntu16.04にMoodleをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu16.04にTeamviewerをインストールする方法
Ubuntu14.04でNginxを保護する方法
Ubuntu20.04にMariaDBをインストールする方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にMonoをインストールする方法