Redis-主従レプリケーションとSentinal

9709 ワード

プライマリ・スレーブ・レプリケーション(master/slave)
ホスト(master)データの更新後、構成とポリシーに基づいて、バックアップ(slave)に自動的に同期します.主従複製により,読み書き分離,災害復旧を実現できる.
主従レプリケーションを実現することは非常に簡単である、従属(slave)からslaveof のコマンドを実行するだけでよい、プロファイルredisであってもよい.confでredisを起動すると自動的にプライマリ・セカンダリ・レプリケーションが実現されます.
特に注意:masterがrequirepassを設定している場合、slaveはmasterauthを設定する必要があります.そうしないとコピーに失敗します.
################################# REPLICATION #################################

# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition slaves automatically try to reconnect to masters
#    and resynchronize with them.
#
# slaveof  

# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth 

1.1ホスト上で3つのRedisインスタンスを起動し、1ホスト2が
step1: /etc/redis.conf 3 , , 3
[root@VM_0_171_centos ~]# ls -l
    152
-rw-r--r-- 1 root root 46755 4    4 15:35 redis-6379.conf
-rw-r--r-- 1 root root 46746 4    4 15:35 redis-6380.conf
-rw-r--r-- 1 root root 46777 4    4 15:37 redis-6381.conf
[root@VM_0_171_centos ~]#
port 6380
daemonize yes
pidfile "redis-6380.pid"
logfile "redis-6380.log"
dbfilename "dump-6380.rdb"
slaveof 127.0.0.1 6379

step2: 3 Redis , 3 , master replication 6379 master,6780、6381 slave
[root@VM_0_171_centos ~]# redis-server redis-6379.conf
[root@VM_0_171_centos ~]# redis-server redis-6380.conf
[root@VM_0_171_centos ~]# redis-server redis-6381.conf
[root@VM_0_171_centos ~]# ps -ef | grep redis
root     30870     1  0 22:37 ?        00:00:00 redis-server 127.0.0.1:6379
root     30881     1  0 22:37 ?        00:00:00 redis-server 127.0.0.1:6380
root     30885     1  0 22:37 ?        00:00:00 redis-server 127.0.0.1:6381
root     30890 28045  0 22:37 pts/0    00:00:00 grep --color=auto redis
[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=29,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=29,lag=1
master_repl_offset:29
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:28
127.0.0.1:6379>

step3: , 6379, k0; , 6380, k0, v0, 。
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k5"
4) "k4"
5) "k3"
6) "k6"
127.0.0.1:6379> set k0 v0
OK
127.0.0.1:6379> exit
[root@VM_0_171_centos ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "k0"
2) "k6"
3) "k5"
4) "k2"
5) "k4"
6) "k3"
7) "k1"
127.0.0.1:6380> get k0
"v0"
127.0.0.1:6380>

2.sentinel哨兵モード
sentinelはバックグラウンドでホストが故障しているかどうかを監視することができ、故障したら投票によって自動的にslaveをmasterに変換し、masterが回復すると自動的にslaveになります.
同じmasterのsentinel自動クラスタを監視し、連携して動作します.
例step 1: /etc/redis-sentinel.conf,
#       
daemonize yes
#sentinel    
port 26379
#    
dir "/tmp"
#   master,   1  1 sentinel  master     ,      
sentinel monitor mymaster 127.0.0.1 6379 1
#master30000     ,sentinel        
sentinel down-after-milliseconds mymaster 30000
#        ,         slave     master    ,       ,               ,          slave        。           1          slave             。
sentinel parallel-syncs mymaster 1
#        
sentinel failover-timeout mymaster 180000
#    
logfile /var/log/redis/sentinel.log

step2: sentinel(daemonize yes)
[root@VM_0_171_centos ~]# redis-sentinel redis-sentinel.conf
[root@VM_0_171_centos ~]# ps -ef | grep redis
root      2169     1  0 23:33 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root      2180 28045  0 23:33 pts/0    00:00:00 grep --color=auto redis
root     31340     1  0 22:43 ?        00:00:01 redis-server 127.0.0.1:6379
root     31344     1  0 22:43 ?        00:00:01 redis-server 127.0.0.1:6380
root     31349     1  0 22:43 ?        00:00:01 redis-server 127.0.0.1:6381
[root@VM_0_171_centos ~]#

step3: mster, sentinel.log 6380 master, 6380 replication
[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> shutdown
not connected> exit
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.3 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 2169
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

2169:X 04 Apr 23:33:26.845 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2169:X 04 Apr 23:33:26.845 # Sentinel ID is 5a7283b3989cece81dea1e770e1e83b3ee174004
2169:X 04 Apr 23:33:26.845 # +monitor master mymaster 127.0.0.1 6381 quorum 1
2169:X 04 Apr 23:34:16.908 # +sdown master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.908 # +odown master mymaster 127.0.0.1 6381 #quorum 1/1
2169:X 04 Apr 23:34:16.908 # +new-epoch 4
2169:X 04 Apr 23:34:16.908 # +try-failover master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.920 # +vote-for-leader 5a7283b3989cece81dea1e770e1e83b3ee174004 4
2169:X 04 Apr 23:34:16.920 # +elected-leader master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.920 # +failover-state-select-slave master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.020 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.020 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.091 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.048 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.048 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.117 * +slave-reconf-sent slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.093 * +slave-reconf-inprog slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.094 * +slave-reconf-done slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.176 # +failover-end master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.176 # +switch-master mymaster 127.0.0.1 6381 127.0.0.1 6380
2169:X 04 Apr 23:34:19.176 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
2169:X 04 Apr 23:34:19.176 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
2169:X 04 Apr 23:35:30.920 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
[root@VM_0_171_centos ~]#
[root@VM_0_171_centos ~]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=37410,lag=0
master_repl_offset:37410
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:7475
repl_backlog_histlen:29936
127.0.0.1:6380>

step4: 6379 redis , slave
[root@VM_0_171_centos ~]# redis-server redis-6379.conf
[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:45049
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
127.0.0.1:6379>

3.特別説明
1.  master   requirepass, slave    masterauth

2.slave   read only  ,      

3.master   ,slave    ,master       salve  

4.slave   ,master   slave(  slave>1)    ,slave         slaveof    (   redis.conf    slave of)

5.slaveof no one   slave  master   slave