Redis知識點

1、關於配置文件

redis啓動如果不顯式地指定配置文件,則默認不使用任何配置文件,而是使用它自己的默認配置。所以,如果修改了配置文件的內容,但若啓動時沒有顯式地指定它,則對它的修改不會有任何效果。

 

如果redis_6379裏配置文件是/etc/redis/6379.conf,則使用redis-server /etc/redis/6379.conf啓動,與使用/etc/init.d/redis_6379start啓動是啓動的同一個實例。

 

vim /etc/init.d/redis_6379

 

#!/bin/sh
#Configurations injected by  install_server below....
 
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/6379.conf"
REDISPORT="6379"

2、Redis複製

(1)在同一臺主機的不同實例之間實現複製:只需在slave實例的配置文件中,添加:

slaveof master_ip master_port

就可以了;

(2)在不同主機之間實現複製:除了實現(1)中的配置之外,還需要:

A.在master的配置文件中註釋掉監聽地址 bind一行

B.將protected-mode的值由yes改爲no(僅限沒有設置bind並且沒有設置密碼的時候)


設置密碼:

在配置文件中加入

requirepass redis

以上“redis”即爲密碼。保存後重啓master的服務。

[root@host103 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@host103 ~]# redis-cli -p 6379 info
NOAUTH Authentication required.
[root@host103 ~]# redis-cli -p 6379
127.0.0.1:6379> keys * 
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth redis
OK
127.0.0.1:6379> keys *
1) "c"
2) "d"
3) "a"
4) "b"
5) "e"

在master設置密碼之後,slave是無法與其進行同步的,此時要修改slave的配置文件:

slaveof 127.0.0.1 6379

# 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 <master-password>

masterauth redis

保存並重啓slave服務。


遇到的一個問題:

在虛擬機不同主機(192.168.1.111和192.168.1.112)之間配置redis複製,slave端已經加入“slaveof spacer.gif192.168.1.111 6378”,並且在master註釋掉bind,但無法實現複製,在slave上顯示:

redis-cli -p 6379 info


wKioL1e-8EySCE0vAAAJyOoxogo803.png

查看slave端的日誌:

tail -n200 /var/log/redis_6379.log


wKioL1e-8EyS3fXDAABJq4llTP0110.png

 在112上運行如下命令:

[root@host112 log]# telnet 192.168.1.111 6379

有如下結果:

[root@host112 log]# telnet 192.168.1.111 6379

Trying 192.168.1.111...

Connected to 192.168.1.111.

Escape character is '^]'.

-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

Connection closed by foreign host.


參考http://arui.me/index.php/archives/151/

將master的這一項protected-mode由yes改爲no,就可以正常實現複製了。該參數是3.2版本之後加入的新特性。


(未完待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章