1. 程式人生 > >Redis筆記(三)新增密碼並修改預設埠後的主從同步

Redis筆記(三)新增密碼並修改預設埠後的主從同步

   今天發現在Redhat as 5上編譯2.6.14會報錯,所以下面的演示基於2.4.18,報錯資訊:

[[email protected] src]# uname -a
Linux as5.cooly.slum 2.6.18-8.el5xen #1 SMP Fri Jan 26 14:42:21 EST 2007 i686 i686 i386 GNU/Linux
[[email protected] src]# make
    LINK redis-server
zmalloc.o: In function `zmalloc_used_memory':
/root/redis-2.6.14/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4'
collect2: ld 返回 1
make: *** [redis-server] 錯誤 1
[

[email protected] src]#

       上一節中redis裝在了三個不同的機器上,已經做了主從,也能正常同步,但是沒有密碼保護,並且使用了預設的埠,下面先說一下本次的主從情況:

master 127.0.0.1 6379  slave1 127.0.0.1 6381 slave2 127.0.0.1 6382

在沒有新增密碼前:

redis 127.0.0.1:6379> get user:name
"zl"

redis 127.0.0.1:6381> get user:name
"zl"

redis 127.0.0.1:6382> get user:name
"zl"

可見,已經主從同步。

先給master設定密碼,redis提供了線上直接修改配置和修改配置檔案兩種方法,先使用直接修改,呼叫命令config set requirepass 密碼,設定成功後,再執行info命令,發現返回錯誤,這是因為配置已經生效,訪問需要使用密碼,執行命令auth 密碼,再次執行info命令,已經成功:

 redis 127.0.0.1:6379>config set requirepass #pass123#
OK
redis 127.0.0.1:6379> info
ERR operation not permitted
redis 127.0.0.1:6379> auth #pass123#


OK
redis 127.0.0.1:6379> info
redis_version:2.4.18
redis_git_sha1:00000000
redis_git_dirty:0

在master中新增加一個記錄:

redis 127.0.0.1:6379> set user:age 29
OK
redis 127.0.0.1:6379> get user:age
"29"
redis 127.0.0.1:6379>

下面重啟並訪問slave1和slave2【未重啟時還是同步了,我重啟slave1後才不會正常同步,不知道2.6會不會有這個問題,明天說明20130719-經測試發現,2.6.14版本也是同樣處理的,即,當master使用config set requirepass修改密碼後,修改密碼之前連線的客戶端在沒有重啟的情況下,仍然可以訪問】:

redis 127.0.0.1:6381> keys *
1) "user:name"

slave1中顯示已經和master斷開:

role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down

slave2中也沒有同步到資訊:

redis 127.0.0.1:6382> keys *
1) "user:name"

剛才設定的user:age並沒有同步,說明設定的密碼已經生效了,此時在slave1中輸入  config set masterauth #pass123#

redis 127.0.0.1:6381> config set masterauth #pass123#
OK
redis 127.0.0.1:6381> get user:age
"29"
redis 127.0.0.1:6381>

再訪問slave2,也能正常取到值了:

redis 127.0.0.1:6382> get user:age
"29"
redis 127.0.0.1:6382>

         至此,已經能訪問添加了密碼的master,剛才的配置在重啟服務後會丟失,如果永久儲存,需要修改配置檔案對應的引數,如config set requirepass #pass123#只需要找到redis.conf中的requirepass,把註釋去掉,並修改值為#pass123#,即可。