[root@as5 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
[root@as5 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
[root@as5 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#,即可。
從服務器則需要在redis.conf中添加masterauth #123456#