Redis 主从配置 Redis 主从配置

Redis 主从配置

 

一、redis主从复制特点:

1.master可以拥有多个slave

2.多个slave可以连接同一个master外,还可以连接到其他slave

3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

4.提高系统的伸缩性

5.可以在master禁用数据持久化,注释掉master配置文件中的所有save配置,只需在slave上配置数据持久化

二、redis主从复制过程:

当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进 程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给 slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给 slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。

三、redis主从配置过程

    1). 同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6380。
启动
./redis-server local_6379.conf &
./redis-server local_6380.conf &
 
    2). 在Slave服务器上执行一下命令:
     /> redis-cli -p 6380  
    redis 127.0.0.1:6380> slaveof 127.0.0.1 6379
    OK
    redis 127.0.0.1:6380> config set masterauth redis  #假设Master的密码为redis
    OK
    当然Master设置密码为config set requirepass redis
    上面的方式只是保证了在执行slaveof命令之后,redis_6380成为了redis_6379的slave,一旦服务(redis_6380)重新启动之后,他们之间的复制关系将终止。
    如果希望长期保证这两个服务器之间的主从关系,可以在redis_6380的配置文件中做如下修改:
    /> vi 6380.conf
    将
    # slaveof <masterip> <masterport>
    改为
    slaveof 127.0.0.1 6379
    masterauth redis

    保存退出。
 
去除主从关系:
slaveof no one
备注:
SLAVEOF host port

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

时间复杂度:
SLAVEOF host port ,O(N),  N 为要同步的数据数量。
SLAVEOF NO ONE , O(1) 。
返回值:总是返回  OK 。
 
四、实例
 
127.0.0.1:6379> incr ab
(integer) 1
 
127.0.0.1:6380> get ab
"1"
 
127.0.0.1:6379> keys *
1) "a"
2) "ab"
 
127.0.0.1:6380> keys *
1) "a"
2) "ab"
 
127.0.0.1:6379> del a
 (integer) 1
 
127.0.0.1:6379> keys *
1) "ab"
 
127.0.0.1:6380> keys *
1) "ab"
 
127.0.0.1:6380> del ab
(error) READONLY You can't write against a read only slave.
 

 参考:

http://redis.readthedocs.org/en/latest/server/slaveof.html

http://redis.io/topics/replication

http://www.cnblogs.com/stephen-liu74/archive/2012/02/23/2364717.html

http://sofar.blog.51cto.com/353572/861276/

 
分类:  redis

一、redis主从复制特点:

1.master可以拥有多个slave

2.多个slave可以连接同一个master外,还可以连接到其他slave

3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

4.提高系统的伸缩性

5.可以在master禁用数据持久化,注释掉master配置文件中的所有save配置,只需在slave上配置数据持久化

二、redis主从复制过程:

当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进 程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给 slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给 slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。

三、redis主从配置过程

    1). 同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6380。
启动
./redis-server local_6379.conf &
./redis-server local_6380.conf &
 
    2). 在Slave服务器上执行一下命令:
     /> redis-cli -p 6380  
    redis 127.0.0.1:6380> slaveof 127.0.0.1 6379
    OK
    redis 127.0.0.1:6380> config set masterauth redis  #假设Master的密码为redis
    OK
    当然Master设置密码为config set requirepass redis
    上面的方式只是保证了在执行slaveof命令之后,redis_6380成为了redis_6379的slave,一旦服务(redis_6380)重新启动之后,他们之间的复制关系将终止。
    如果希望长期保证这两个服务器之间的主从关系,可以在redis_6380的配置文件中做如下修改:
    /> vi 6380.conf
    将
    # slaveof <masterip> <masterport>
    改为
    slaveof 127.0.0.1 6379
    masterauth redis

    保存退出。
 
去除主从关系:
slaveof no one
备注:
SLAVEOF host port

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

时间复杂度:
SLAVEOF host port ,O(N),  N 为要同步的数据数量。
SLAVEOF NO ONE , O(1) 。
返回值:总是返回  OK 。
 
四、实例
 
127.0.0.1:6379> incr ab
(integer) 1
 
127.0.0.1:6380> get ab
"1"
 
127.0.0.1:6379> keys *
1) "a"
2) "ab"
 
127.0.0.1:6380> keys *
1) "a"
2) "ab"
 
127.0.0.1:6379> del a
 (integer) 1
 
127.0.0.1:6379> keys *
1) "ab"
 
127.0.0.1:6380> keys *
1) "ab"
 
127.0.0.1:6380> del ab
(error) READONLY You can't write against a read only slave.
 

 参考:

http://redis.readthedocs.org/en/latest/server/slaveof.html

http://redis.io/topics/replication

http://www.cnblogs.com/stephen-liu74/archive/2012/02/23/2364717.html

http://sofar.blog.51cto.com/353572/861276/

猜你喜欢

转载自www.cnblogs.com/fqnb001/p/12454786.html