redis 主从复制及切换

redis主从数据库(一写多读):

一类是主数据库(master),一类是从数据库(slave)。主数据库

可以进行读写操作,当发生写操作时自动将数据同步给从数据库。而从数据库一般是只读的,

并接受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只

能拥有一个主数据库

 

主redis上不需要配置,只需要在从redis上配置。

从数库的配置方式:

1.redis.conf 中

# 配置本redis server 为某一个redis server 实便的从数据库,masterip 主库IP,masterport主库端口

# 从库自动从主库同步数据

# slaveof <masterip> <masterport>

 2. 从redis客户端上执行命令

    SLAVEOF host port

    使当前连接到redis服务器成为host:port redis服务器的从数据库。

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

从数库转换为主数据库的方式:

 1.redis.conf 中 将slaveof 注释掉

  2.使用客户端连接到server ,执行命令:SLAVEOF NO ONE 

示例:

  配置三个Redis数据库,端口分别为 6379,6380,6381,相应的配置文件如下:

   /app/redis/etc/redis_6379.conf:

#引入默认的配置文件
include /app/redis/etc/redis.conf
#覆盖默认的配置文件
daemonize yes
port 6379
dir /app/redis/data/
dbfilename dump_6379.rdb
pidfile /app/redis/pid/redis_6379.pid
logfile /app/redis/logs/redis_6379.log

 /app/redis/etc/redis_6380.conf:

#引入默认的配置文件
include /app/redis/etc/redis.conf
#覆盖默认的配置文件
daemonize yes
port 6380
dir /app/redis/data/
dbfilename dump_6380.rdb
pidfile /app/redis/pid/redis_6380.pid
logfile /app/redis/logs/redis_6380.log
 slaveof 127.0.0.1  6379

  /app/redis/etc/redis_6381.conf:

#引入默认的配置文件
include /app/redis/etc/redis.conf
#覆盖默认的配置文件
daemonize yes
port 6381
dir /app/redis/data/
dbfilename dump_6381.rdb
pidfile /app/redis/pid/redis_6381.pid
logfile /app/redis/logs/redis_6381.log
slaveof 127.0.0.1  6379

 

启动redis服务器:

    redis-server /app/redis/etc/redis_6379.conf

    redis-server /app/redis/etc/redis_6380.conf

    redis-server /app/redis/etc/redis_6380.conf

使用客户端连接主数据库:

 

 $ /app/bin>redis-cli -h localhost -p 6379
localhost:6379> dbsize
(integer) 0
localhost:6379> set index 10//添加key
OK
localhost:6379>

 使用客户端连接6380 server:

/app/redis/bin> redis-cli -h localhost -p 6380
localhost:6380> keys *
1) "index"
localhost:6380> get index//主库中数据已同步到从库
"10"
localhost:6380> set index 11//从客户端上写入失败
(error) READONLY You can't write against a read only slave.
localhost:6380>

 使用客户端连接6381 server:

vgop@hn-vgywapp3:/home/vgop/app/redis/bin> redis-cli -h localhost -p 6381
localhost:6381> get index
"10"
localhost:6381> set index 11 //从库上写入失败
(error) READONLY You can't write against a read only slave.

 

 如果主redis数据库异常,可以手工切换从数据库为主:

 使用客户端连接6381 server:

vgop@hn-vgywapp3:/home/vgop/app/redis/bin> redis-cli -h localhost -p 6381
localhost:6381> SLAVEOF NO ONE //从数据库转换为主
OK
localhost:6381> set index 11
OK
localhost:6381> get index
"11"
localhost:6381>

 使用客户端连接6380 server:

  

vgop@hn-vgywapp3:/home/vgop/app/redis/bin> redis-cli -h localhost -p 6380
localhost:6380> slaveof localhost 6381//当前redis切换为 6381的从库
OK
localhost:6380> get index
"11"
localhost:6380>

 

这种切换的缺点:

  1.主服务器端口变了

  2.需要手动处理

猜你喜欢

转载自java12345678.iteye.com/blog/2165207