redisクラスタ構成

8848 ワード

redisクラスタインストール構成
1.redisクラスタは3.0からサポートされ、クラスタを正常に動作させるには少なくとも3つのプライマリノードが必要です.クラスタ内の任意のインスタンスはデータの読み書きが可能であり、クラスタ内のノードの半数以上が失敗するとクラスタ全体が使用できなくなり、haproxyまたはlvsを使用して負荷の等化とバックエンドの健康診断を実現します.
2.インストール
tar xf redis-3.0.2.tar.gz
cd redis-3.0.2
make
make PREFIX=/usr/local/redis install
mkdir /usr/local/redis/etc
mkdir /usr/local/redis/var
cp redis.conf /usr/local/redis/etc
cp src/redis-trib.rb /usr/local/redis/bin/

3.クラスタの構成(3台のマシンで2つのインスタンスを起動)(パスワード認証の設定はサポートされていません)
mv /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.ori
cat >>/usr/local/redis/etc/redis_6379.conf<<EOF
daemonize yes
bind 192.168.1.221
port 6379
timeout 300
loglevel notice
logfile "/usr/local/redis/var/redis.log"
databases 16
dbfilename dump.rdb
dir "/usr/local/redis/var"
maxclients 10000 
maxmemory 1024MB

#MySQLのbinlogに相当するログを開く
appendonly yes 
appendfilename "appendonly.aof" 
appendfsync everysec

#クラスタ構成
cluster-enabled yes

#クラスタ自動更新の作成は不要
cluster-config-file nodes_6379.conf
cluster-node-timeout 5000
EOF
cat >>/usr/local/redis/etc/redis_6380.conf<<EOF
daemonize yes
bind 192.168.1.221
port 6380
timeout 300
loglevel notice
logfile "/usr/local/redis/var2/redis.log"
databases 16
dbfilename dump.rdb
dir "/usr/local/redis/var2"
#requirepass 123456
#masterauth 123456
maxclients 10000 
maxmemory 1024MB
#      ,   MySQL binlog
appendonly yes 
appendfilename "appendonly.aof" 
appendfsync everysec

#クラスタ構成
cluster-enabled yes

#クラスタ自動更新の作成は不要
cluster-config-file nodes_6380.conf
cluster-node-timeout 5000
EOF

4.クラスタ内のインスタンスの起動
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6380.conf

#起動状況の表示
ps -ef|grep redis

#接続テスト
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 quit

#サービスの停止
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 shutdown

5.クラスタ#インストールruby環境の作成
yum install -y ruby rubygems
gem install redis

#クラスタの作成
/usr/local/redis/bin/redis-trib.rb create --replicas 1 192.168.1.221:6379 192.168.1.221:6380 192.168.1.222:6379 192.168.1.222:6380 192.168.1.223:6379 192.168.1.223:6380

#yesを入力すると、作成に成功し、ホストとスレーブが自動的に一致します.
#--replicas 1手動でノード#からプライマリノードごとに1つのスレーブノードを作成することができます.ビジネス環境では、30台のマシンなど、3つのスレーブノードを構成することができます.各プライマリノードには3つのスレーブノードがあります.
6.クラスタ管理1.クラスタ内のマシンID、マスター、hashスロットの状況を表示し、クラスタ内のマシンの状況を表示できます.
/usr/local/redis/bin/redis-trib.rb check 192.168.1.221:6379 

2.データの再分割:
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6379 

3.クラスタ内のすべてのマスターノードを一覧表示
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 cluster nodes | grep master

4.プライマリノードをクラッシュさせ、フェイルオーバをテストする
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 debug segfault

5.マスターノードをクラスタに追加
/usr/local/redis/bin/redis-trib.rb add-node 192.168.1.221:6381 192.168.1.221:6379

#192.168.1.222:6381は新しいノードであり、192.168.1.221:6379はクラスタにすでに存在するノードである.この場合、新しいノードは本当のプライマリノードにはならず、再スライスが必要であることに注意しなければならない.
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6381

1).自動スライスプログラムはいくつかのhashスロットの移動を尋ねるが、データの均一性を保証するには16384/Nであるべきであり、
Nは、現在のホストを含むすべてのマスターノードの数を表します.2).次に、どのノードに移動するかを尋ね、新しいプライマリノードのidを入力すればよい.3).どのノードからデータを移動するかを尋ねられます.このとき、あるノードのIDを選択したり、allを直接選択したりして、すべてのプライマリノードからデータを均等に分けることができます.
6.ノードからクラスタへの追加
/usr/local/redis/bin/redis-trib.rb add-node --slave 192.168.1.222:6381 192.168.1.221:6379

#この時点でスレーブノードのプライマリノードは指定されていません.通常、自動的に1つ選択されます.また、次のようにプライマリノードを指定できます.
/usr/local/redis/bin/redis-trib.rb add-node --slave --master-id 6b45acde96e4225856c8652070e8c8edeec00c79 192.168.1.223:6381 192.168.1.221:6379

#192.168.1.222:6381新しく追加されたノード#192.168.1.221:6379クラスタ内のノード
7.ノードを削除する(削除するとredisインスタンスが閉じる).ノードから削除:d 598 f 4 cf 29 cc 4 fea 3616 a 00 a 0 e 707 f 71 a 7777 cf 1は削除されたredisのIDを指す
/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 56cfd4a0d4631fdf046c20caac7e5f1a0fce3b39

2).プライマリノードを削除する場合は、プライマリノードのデータが空であることを確認し、空でない場合は、そのノードのデータを他のノードに再分割する必要があります.
/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.223:6381 

(削除されたプライマリノードは、まずデータ移行を行い、他のプライマリノードに移行する)
/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 791b834b1a5292bba236956c076849bb45a0ff17

8.      :  redis-cli -c -p         

CLUSTER NODES:ノードID、主従関係を含むクラスタ情報
CLUSTER INFO:クラスタが健全かどうかを確認するCLUSTER MEETipとportで指定されたノードをクラスタに追加し、クラスタの一員にします.CLUSTER FORGET クラスタからnode_を除去id指定ノード.CLUSTER REPLICATE 現在のノードをnode_に設定id指定されたノードのスレーブノード.CLUSTER KEYSLOTキーキーがどのスロットに配置されるべきかを計算します.CLUSTER COUNTKEYSINSLOT戻りスロットslotに現在含まれるキー値ペアの数.
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 CLUSTER NODES

7.注意事項
クラスタの注意点:クラスタの半分以上のクラスタが停止し、クラスタ全体が対外的にサービスを停止します.導入する場合は、プライマリノードをメモリ型に、セカンダリノードを固化ストレージ型に設定することをお勧めします.ホストが切れて、機会から自動的にホストに選ばれます.