redisプライマリマルチ高可用性クラスタから構築
18337 ワード
Redis 1マスター2高可用性環境から構築
RedisはMaster-Slave(マスタースレーブ)モードをサポートし、Redisサーバは別のRedisサーバのホスト(スレーブ)に設定でき、スレーブは定期的にホストからデータを受け取る.特に、スレーブも同じようにRedisサーバのホストに設定できます.これにより、Master-Slaveの分布は、ホストでもスレーブでもRedisサーバでもサービスを提供できるように、有向無ループDAGのように見えます.
環境:centos 6.5、テストのため、今3つのredisを1台の機械の上に置きます.
一、redisのインストール
1.ダウンロード、解凍
[root@bmsoft home]# cd bmsoft/
[root@bmsofthome]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
[root@bmsoft bmsoft]# tar -zxvf redis-3.2.6.tar.gz
2.解凍されたファイルを/bmsoftの3つのフォルダredis 1、redis 2、redis 3にそれぞれ配置します.ここで、reids 1をホストmasterディレクトリ、redis 2、redis 3をスレーブslaverディレクトリに設定します.
[root@bmsoft bmsoft]# mv redis-3.2.6 /home/bmsoft/redis1
[root@bmsoft bmsoft]# mv redis-3.2.6 /home/bmsoft/redis2
[root@bmsoft bmsoft]# mv redis-3.2.6 /home/bmsoft/redis3
3.以下、redis 1を例に1つずつコンパイルを開始する[root@bmsoft bmsoft]# cd redis1/redis-3.2.6 [root@bmsoftbmsoft]#make上のコマンドはredis 1、redis 2、redis 3でそれぞれ1回実行します.
ヒント:コンパイルに失敗した場合、gccとgcc-c++がインストールされていない可能性があります.redisコンパイルには環境サポートが必要なため、tclもインストールされる可能性があります.
二、redisを配置する。conf
インストールが完了すると、構成が開始されます.一主多従の棚なので、redis 1をメインに、redis 2、redis 3を従に選びました.各redis解凍ディレクトリの下にredisがあります.confは、まずプライマリredisの構成を変更します.以下のすべての構成はredis.confファイルは#コメントで削除します.コメントを開いてください.そうしないと無効です.
1.マスターノードredis 1のredis.conf構成
bind 0.0.0.0 // 127.0.0.1, ip,springboot redis
Protected-mode no
port 7000
daemonize yes //redis
pidfile "/var/run/redis_7000.pid" // 7001,7002
dir “/home/bmsoft/redis1/data” //
slave-priority 100
appendonly yes
appendfsync everysec
2.ノードredis 2のredisから.conf構成
bind ip // 127.0.0.1, 127.0.0.1
Protected-mode no
port 7001
daemonize yes //redis
pidfile "/var/run/redis_7001.pid"
dir “/home/bmsoft/redis2/data” //
slaveof 127.0.0.1 7000 // ip +
slave-read-only yes //
slave-priority 90 // master sentinel slave-priority master
appendonly yes
appendfsync everysec
3.ノードredis 3のredisから.conf構成
bind ip // 127.0.0.1, 127.0.0.1
Protected-mode no
port 7002
daemonize yes //redis
pidfile "/var/run/redis_7002.pid"
dir “/home/bmsoft/redis3/data” //
slaveof 127.0.0.1 7000 // ip +
slave-read-only yes //
slave-priority 80 // master sentinel slave-priority master
appendonly yes
appendfsync everysec
注:最初はredis 1がbindだったのは127.0.0.1だったが、springbootが接続されていないことに気づき、connect refusedが表示され、その後0.0.0.0に変更され、redis 2とredis 3のslaveofのホストIPも0.0.0.0に変更され、調べた後(./redis-cli-pエンドスローガンinfo Replication)にホストの次のスレーブもなくなった.その後、redis 1を0.0.0.0に変更し、redis 2とredis 3のslaveofの後ろのホスト値が127.0.0.1であればよいことが分かった.
三、setinelを配置する.conf
1.setinelを構成する.confの前に、redisのSetinelシステム:RedisのSentineシステムは、複数のRedisサーバ(instance)を管理するために使用されています.このシステムは、次の3つのタスクを実行します.注意(Notification):監視されているRedisサーバに問題が発生した場合、CentinelはAPIを通じて管理者または他のアプリケーションに通知を送信することができる.自動フェイルオーバ(Automatic failover):プライマリ・サーバが正常に動作しない場合、Centinelは自動フェイルオーバ操作を開始します.これにより、失効したプライマリ・サーバの1つがサーバから新しいプライマリ・サーバにアップグレードされ、失効したプライマリ・サーバの他のプライマリ・サーバから新しいプライマリ・サーバのコピーに変更されます.クライアントが無効なプライマリ・サーバに接続しようとすると、クラスタは新しいプライマリ・サーバのアドレスをクライアントに返し、クラスタが無効なサーバの代わりに新しいプライマリ・サーバを使用できるようにします.
3.setinelを構成する.confは各redisのディレクトリの下でredisと.confが並んでいるのはsentinelです.confファイル、これが哨兵の配置です.各redisには哨兵がいて、その配置は基本的に同じです.1.1 redis 1の下のsentinelをそれぞれ羅列する.conf
protected-mode no
port 27000
dir "/home/bmsoft/redis1/temp"
Daemonize yes
sentinel monitor redis1 ip 7000 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
1.2 redis 2の下のsentinel.conf
protected-mode no
port 27001
dir "/home/bmsoft/redis2/temp"
Daemonize yes
sentinel monitor redis1 ip 7000 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
1.3 redis 3の下のsentinel.conf
protected-mode no
port 27002
Daemonize yes
dir "/home/bmsoft/redis3/temp"
sentinel monitor redis1 ip 7002 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
四、redisとsentinelを起動する
1.redis 1、redis 2、redis 3を順次起動する
cd /bmsoft/redis1/redis-3.2.6/src
./redis-server /home/bmsoft/redis1/redis.conf
cd /bmsoft/redis2/redis-3.2.6/src
./redis-server /home/bmsoft/redis2/redis.conf
cd /bmsoft/redis3/redis-3.2.6/src
./redis-server /home/bmsoft/redis3/redis.conf
2.各redisの哨兵を順次起動する
1.cd /bmsoft/redis1/src
2../redis-sentinel /home/bmsoft/redis1/sentinel.conf
3.cd /bmsoft/redis2/src
4../redis-sentinel /home/bmsoft/redis2/sentinel.conf
5.cd /bmsoft/redis3/src
6../redis-sentinel /home/bmsoft/redis3/sentinel.conf
五、各redisの状態を表示する
redis 1、redis 2、redis 3のredisステータスコマンドを表示するには、次の手順に従います.
1.cd /crmtestXieHao/redis1/src
2../redis-cli -h 127.0.0.1 -p 7000 info Replication
3../redis-cli -h 127.0.0.1 -p 7001 info Replication
4../redis-cli -h 127.0.0.1 -p 7002 info Replication
プライマリredis 1は読み書き可能であり、redis 2およびredis 3からは読み取り専用であるため、先にredis 1のクライアントにデータを挿入することができる
cd /bmsoft/redis1/src
./redis-cli -h 127.0.0.1 -p 7000
127.0.0.1:7000> set name bmsoft
ok
127.0.0.1:7000> get name
"bmsoft"
redisテストから
./redis-cli -h 127.0.0.1 -p 7000
127.0.0.1:7000> set ll test
(error) READONLY You can't write against a read only slave.
127.0.0.1:7000> get name
"bmsoft"
六、failover失効テスト
1.マスターマスターマスターredisをシャットダウンアナログダウンログを表示
23833:X 05 May 07:55:47.967 # +switch-master redis1 127.0.0.1 7000 127.0.0.1 7002
哨兵は、マウントされた7000主redisを7001のredisノードに切り替えた.哨兵モードでは、システムは私たちに従ってredisに配置されます.confのslave-priorityは,slave-priority値の最小を新しいmasterプライマリノードに推挙する.前のマスターノードが再起動すると、スレーブノードとしてマスターノードの下に掛けられ、逐一テストされず、前のマスターノードが再起動してスレーブノードになります.1.1マスターを停止する
[bmsoft@bmsoft src]$ ./redis-cli -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> shutdown·
not connected>
1.2以前redis.confファイルでは、7002ポートのslave-priority設定が小さいため、哨兵モードは小さな値に基づいてmasterに設定し、7002ポートの状態を表示します
[bmsoft@bmsoft src]$ ./redis-cli -p 7002 info Replication
Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7001,state=online,offset=18097,lag=1
master_repl_offset:18097
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:18096
7002のroleがmaster 1.3になっているのが見えます.このとき再起動する前に閉じた7000ポート、元のメインノード
[bmsoft@bmsoft src]$ ./redis-server /home/bmsoft/redis0/redis.conf
[bmsoft@bmsoft src]$ ./redis-cli -p 7000 info Replication
Replication
role:slave
master_host:127.0.0.1
master_port:7002
元メインノード7000のroleがslaveになっているのが見えます以上の手順を経て、redis一主多従が完成しました!!
七.Springboot接続redisクラスタ
application.propertiesファイル構成redisと哨兵サービス
# Redis ( 0)
spring.redis.database=0
# Redis ( )
spring.redis.password=
# ( )
spring.redis.pool.max-active=8
# ( )
spring.redis.pool.max-wait=-1
#
spring.redis.pool.max-idle=8
#
spring.redis.pool.min-idle=0
# ( )
spring.redis.timeout=0
#sentinel
# redis server
spring.redis.sentinel.master=redis1
#
spring.redis.sentinel.nodes=122.112.210.226:27000,122.112.210.226:27001,122.112.210.226:27002
#sentinel
穴:エラーメッセージCan connect to sentinel,but redis 1 seems to be not monitored...不注意でspring.redis.sentinel.master=redis 1、redis 1後にうっかりスペースを入れてしまったため、このエラーが発生し、スペースを外して実行に成功しました.