配置
先安裝redis
make
make PREFIX=/usr/local/redis install
找個地方創(chuàng)建兩個文件笨忌,如:
mkdir d6379
mkdir d6380
把redis.conf文件復(fù)制到這兩個目錄
進(jìn)入d6379目錄中厘线,配置文件就改了
daemonize yes
啟動第一個redis
/usr/local/redis/bin/redis-server redis.conf
進(jìn)入d6380目錄中鸳君,配置文件修改為
port 6380
daemonize yes
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
啟動從節(jié)點
/usr/local/redis/bin/redis-server redis.conf
查看一下進(jìn)程情況
ps -ef | grep redis
root 8428 1 0 17:06 ? 00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root 8453 1 0 17:16 ? 00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6380
測試
再開一個shell窗口牲阁,分別登入兩個redis
登錄主的
$ /usr/local/redis/bin/redis-cli
127.0.0.1:6379>
登錄從的
$ /usr/local/redis/bin/redis-cli -p 6380
127.0.0.1:6380>
分別查看他們的狀態(tài):
主的
127.0.0.1:6379> info Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=0
從的
127.0.0.1:6380> info Replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
在主的上設(shè)置值
127.0.0.1:6379> set key1 vvv1
OK
127.0.0.1:6379> keys *
1) "key1"
在從的上查看
127.0.0.1:6380> keys *
1) "key1"
127.0.0.1:6380> get key1
"vvv1"
可以看到從的已經(jīng)自動從主的上復(fù)制了數(shù)據(jù)
再試一下在從的上寫數(shù)據(jù)
127.0.0.1:6380> set key2 vvv2
(error) READONLY You can't write against a read only slave.
主從切換
SLAVEOF host port
SLAVEOF 命令用于在 Redis 運行時動態(tài)的修改復(fù)制(replication)功能的行為立叛。
通過執(zhí)行 SLAVEOF host port 命令负敏,可以將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器(slave server)。
如果當(dāng)前服務(wù)器已經(jīng)是某個主服務(wù)器(master server)的從屬服務(wù)器秘蛇,那么執(zhí)行 SLAVEOF host port 將使當(dāng)前服務(wù)器停止對舊主服務(wù)器的同步其做,丟棄舊數(shù)據(jù)集顶考,轉(zhuǎn)而開始對新主服務(wù)器進(jìn)行同步。
另外妖泄,對一個從屬服務(wù)器執(zhí)行命令 SLAVEOF NO ONE 將使得這個從屬服務(wù)器關(guān)閉復(fù)制功能驹沿,并從從屬服務(wù)器轉(zhuǎn)變回主服務(wù)器,原來同步所得的數(shù)據(jù)集不會被丟棄蹈胡。
利用『 SLAVEOF NO ONE 不會丟棄同步所得數(shù)據(jù)集』這個特性渊季,可以在主服務(wù)器失敗的時候,將從屬服務(wù)器用作新的主服務(wù)器罚渐,從而實現(xiàn)無間斷運行却汉。
將從服務(wù)器升級為主服務(wù)器,并且關(guān)閉復(fù)制功能
127.0.0.1:6380> SLAVEOF NO ONE
OK
127.0.0.1:6380> info Replication
# Replication
role:master
connected_slaves:0
此時可以寫入數(shù)據(jù)
127.0.0.1:6380> set k5 'upgrade to master'
OK
將6379轉(zhuǎn)成6380的從服務(wù)
127.0.0.1:6379> slaveof 127.0.0.1 6380
OK
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:5
master_sync_in_progress:0
slave_repl_offset:2844
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9c8b0e2e24636212f659b3f8bc17cbae51785db2
master_replid2:6e0c53cc1c7438c88273db17fa654f285026e1ce
master_repl_offset:2844
second_repl_offset:2777
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2844
變成從的后會刪除自己已有的數(shù)據(jù)荷并,并將主服務(wù)器的數(shù)據(jù)復(fù)制過來
可以看到之前添加的數(shù)據(jù)也復(fù)制過來了
127.0.0.1:6379> keys *
1) "kk2"
2) "k5"
3) "key1"
127.0.0.1:6379> get k5
"upgrade to master"
主節(jié)點下的從節(jié)點的信息都可以通過info命令查看
127.0.0.1:6380> info Replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.1.215,port=6379,state=online,offset=4768,lag=1
slave1:ip=192.168.1.215,port=6380,state=online,offset=4768,lag=0
slave2:ip=127.0.0.1,port=6379,state=online,offset=4768,lag=0
master_replid:d3ea04b9553a6c20b2bbe836dd35e2311ee1ed06
master_replid2:d7ded5c06b7d723590dd4aa8bee2b7020f3cbc96
master_repl_offset:4768
second_repl_offset:4617
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:4533
repl_backlog_histlen:236