Redisの4つのモード

主従モード

Redisの主従モードは、主サーバーと従サーバーの関係を構築するシンプルな方法です。一対一の主従関係や一対多の主従関係を設定可能です。

主従モードの設定は非常に簡単です。従サーバーの設定ファイルに以下を追加します。

slaveof <master-ip> <master-port>
# 例えば
# slaveof 192.168.1.197 6379

メリット:

  • 設定が簡単で、柔軟性があります。
  • データの安全性が高いです。

デメリット:

  • 故障切り替えが自動化されていません。
  • 主サーバーがダウンした場合、従サーバーが自動的に主サーバーとして機能しません。

サentinエルモード

サentinエルモードの設定ファイルは、通常のRedis設定ファイルと同様です。以下の例を参考にして設定します。

// vim sentinel.conf
protected-mode yes  
bind 10.10.10.137
daemonize yes
port 26380
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 1800

Redisサーバーとサentinエルサーバーをそれぞれ起動します。

./redis-server redis.conf
./redis-server sentinel.conf

高可用性クラスタ分片モード

Redisの公式クラスタインストール方法を説明します。

必要なソフトウェア:

  • redis-4.0.9.tar.gzダウンロード
  • ruby-2.5.7.tar.gzダウンロード
  • redis-4.0.0.gemダウンロード
  • zlib-1.2.11.tar.gzダウンロード
  • openssl-1.1.1a.tar.gzダウンロード

使用するポート:7001、7002、7003、7004、7005、7006

設定ファイルの場所:/app/redis/redis-cluster

本記事では、Linux上に6つのRedisノードを構築します(本番環境では、3台のLinuxサーバーに3つのMasterノードを配置します)。

インストール手順

第一步:gcc環境のインストール

[root@localhost ~]# gcc -v
yum -y install gcc gcc-c++

第二步:Redisの展開とコンパイル

cd /app/redis/
tar -xvf redis-4.0.9.tar.gz
cd redis-4.0.9/
make
make install

第三步:Rubyの展開とコンパイル

cd /app/redis
tar -xvf ruby-2.5.1.tar.gz
cd ruby-2.5.1/
./configure --prefix=/usr/local/ruby
make && make install

環境変数の設定:

vi /etc/profile
export PATH=$PATH:/usr/local/ruby/bin
:wq
source /etc/profile

Rubyのバージョン確認:

[root@localhost ~]# ruby -v
ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-linux]

第四步:クラスタ管理ツールの準備

cd /app/redis
mkdir redis-cluster
cp redis-4.0.0.gem redis-cluster/
cp redis-trib.rb /app/redis/redis-cluster/

Gemのインストール:

cd /app/redis/redis-cluster
gem install redis-4.0.0.gem

もしzlibまたはopensslのエラーが発生したら、以下を実行します。

cd /app/redis/ruby-2.5.1/ext/zlib
ruby extconf.rb
vi Makefile
# すべての$(top_srcdir)を../../に置き換えます
make
make install
cd /app/redis/ruby-2.5.1/ext/openssl
ruby extconf.rb
vi Makefile
# すべての$(top_srcdir)を../../に置き換えます
make
make install

クラスタの作成

6つのポート(7001~7006)に対応する6つのディレクトリを作成します。

cd /app/redis/redis-cluster/
mkdir 700{1,2,3,4,5,6}

各ディレクトリに設定ファイルをコピーします。

cp redis.conf /app/redis/redis-cluster/7001/
cp redis.conf /app/redis/redis-cluster/7002/
cp redis.conf /app/redis/redis-cluster/7003/
cp redis.conf /app/redis/redis-cluster/7004/
cp redis.conf /app/redis/redis-cluster/7005/
cp redis.conf /app/redis/redis-cluster/7006/

各ディレクトリの設定ファイルを編集します。

bind 192.168.5.104
port 700X
daemonize yes
pidfile /app/redis/redis-cluster/700X/redis_700X.pid
cluster-enabled yes

クラスタを起動するスクリプトを作成します。

vim start-all.sh
cd 7001
./redis-server redis.conf
cd ..
cd 7002
./redis-server redis.conf
cd ..
cd 7003
./redis-server redis.conf
cd ..
cd 7004
./redis-server redis.conf
cd ..
cd 7005
./redis-server redis.conf
cd ..
cd 7006
./redis-server redis.conf
cd ..

スクリプトの実行許可を設定します。

chmod +x start-all.sh

クラスタを起動します。

./start-all.sh

クラスタの設定を行います。

./redis-trib.rb create --replicas 1 192.168.5.104:7001 192.168.5.104:7002 192.168.5.104:7003 192.168.5.104:7004 192.168.5.104:7005 192.168.5.104:7006

クラスタのテスト

主従高可用性テスト

主サーバーを停止し、従サーバーの状態を確認します。

cd /app/redis/redis-cluster/7001
./redis-cli -c -h 192.168.5.104 -p 7001 shutdown

主サーバーが復帰した場合、従サーバーが自動的に主サーバーとして機能します。

クラスタ分片性テスト

Javaコードを使用してクラスタの分片性をテストします。

Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.5.104", 7001));
nodes.add(new HostAndPort("192.168.5.104", 7002));
nodes.add(new HostAndPort("192.168.5.104", 7003));
nodes.add(new HostAndPort("192.168.5.104", 7004));
nodes.add(new HostAndPort("192.168.5.104", 7005));
nodes.add(new HostAndPort("192.168.5.104", 7006));
JedisCluster cluster = new JedisCluster(nodes, poolConfig);
for(int i=0; i<1000; i++){
    try {
        Thread.sleep(500);
        System.out.println(i+"-------"+cluster.set("wc_"+i, "xinxin"+i));
    } catch (Exception e) {
        e.printStackTrace();
        continue;
    }
}

タグ: redis クラスタリング 主従モード サentinエルモード

5月27日 03:23 投稿