关于redis中的Replication(2)

你也可以通过客户端发送SLAVEOF命令给slave。无硬盘复制功能可以通过repl-diskless-sync来配置,另外一个配置项repl-diskless-sync-delay用来配置当收到第一个请求时,等待多个slave一起来请求之间的间隔时间

1、同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6380

2、配置文件为6379.conf 6380.conf

3、启动并配置

./src/redis-server  6380.conf

./src/redis-server  6379.conf 

4、测试

[root@localhost redis]# ./src/redis-cli  -p 6379

127.0.0.1:6379> flushdb

OK

127.0.0.1:6379> set aa 1

OK

127.0.0.1:6379> set bb 2

OK

127.0.0.1:6379> set cc 3

OK

127.0.0.1:6379> exit

[root@localhost redis]# ./src/redis-cli  -p 6380

127.0.0.1:6380> keys *

1) "bb"

2) "aa"

3) "cc"

127.0.0.1:6380> get aa

"1"

127.0.0.1:6380> get bb

"2"

五、only read slave

从redis2.6版本开始,slave支持只读模式,而且是默认的。可以通过配置项slave-read-only来进行配置,并且支持客户端使用CONFIG SET命令来动态修改配置

只读的slave会拒绝所有的写请求,只读的slave并不是为了防范不可信的客户端,毕竟一些管理命令例如DEBUG和CONFIG在只读模式下还是可以使用的。如果确实要确保安全性,那么可以在配置文件中将一些命令重新命名。也许你会感到很奇怪,为什么能够将一个只读模式的slave恢复为可写的呢,尽管可写,但是只要slave一同步master的数据,就会丢失那些写在slave的数据。不过还是有一些合法的应用场景需要存储瞬时数据会用到这个特性。不过,之后可能会考虑废除掉这个特性。Setting a slave to authenticate to a master

如果master通过requirepass配置项设置了密码,slave每次同步操作都需要验证密码,可以通过在slave的配置文件中添加以下配置项:

masterauth <password>

也可以通过客户端在运行时发送以下命令:

config set masterauth <password>

六、至少N个slave才允许向master写数据

从redis2.8版本开始,master可以被配置为只有当master当前有至少N个slave连接着的时候才接受写数据的请求;由于redis是异步复制的,所以它并不能保证slave会收到一个写请求,所以总有一个数据丢失的时间窗口存在

这个机制的工作原理如下所示:

slave每秒发送ping心跳给master,询问当前复制了多少数据

master会记录下它上次收到某个slave的ping心跳是什么时候

使用者可以配置一个时间,来指定ping心跳的发送不应超过的一个超时时间

如果master有至少N个slave,并且ping心跳的超时不超过M秒,那么它就会接收写请求。也许你会认为这情形好似CAP理论中弱化版的C(consistency),因为写请求并不能保证数据的一致性,但这样做,至少数据丢失被限制在了限定的时间内,即M秒

如果N和M的条件都无法达到,那么master会回复一个错误信息。写请求也不会被处理

有两个配置项用来配置上文中提到的N和M:

min-slaves-to-write <number of slaves>

min-slaves-max-lag <number of seconds>

下面关于Redis的文章您也可能喜欢,不妨参考下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/be79157d1a3fb0c0ca1d4c487045e03f.html