天天看点

redis主从切换介绍

1、这次案例的是选择windows版本,把redis复制三份,监听端口分别是6379、6380、6381

redis主从切换介绍
redis主从切换介绍

分别复制2份,修改redis.conf的端口port 为6380 6381,并添加master服务说明:slaveof 127.0.0.1 6379

redis主从切换介绍

启动主节点,然后再分别启动分节点,如果是在正式环境,分节点的启动间隔时间不宜太短,同时启动,master需要把数据同步到各个slave,造成资源消耗大,所以会间隔两分钟左右启动slave。

启动的时候,可以直接进入软件目录,使用dos命令启动,如果直接点击redis-server.exe,启动配置默认端口还是6379,所以用dos命令启动。

依次进入master和2个slave的目录下,启动redis服务:redis-server.exe redis.conf

master

redis主从切换介绍

slave

redis主从切换介绍
redis主从切换介绍

使用Jedis进行连接查看,测试信息

6379信息:redis_version:2.4.5

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:64

multiplexing_api:winsock2

process_id:14532

uptime_in_seconds:1439

uptime_in_days:0

lru_clock:1022289

used_cpu_sys:0.51

used_cpu_user:0.30

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

connected_clients:1

connected_slaves:2

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

used_memory:1211928

used_memory_human:1.16M

used_memory_rss:1211928

used_memory_peak:1211872

used_memory_peak_human:1.16M

mem_fragmentation_ratio:1.00

mem_allocator:libc

loading:0

aof_enabled:0

changes_since_last_save:0

bgsave_in_progress:0

last_save_time:1541142748

bgrewriteaof_in_progress:0

total_connections_received:7

total_commands_processed:40

expired_keys:0

evicted_keys:0

keyspace_hits:36

keyspace_misses:0

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:0

vm_enabled:0

role:master

db0:keys=19,expires=0

db6:keys=1,expires=0

6380信息:redis_version:2.4.5

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:64

multiplexing_api:winsock2

process_id:14548

uptime_in_seconds:1423

uptime_in_days:0

lru_clock:1022289

used_cpu_sys:0.51

used_cpu_user:0.14

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

connected_clients:2

connected_slaves:0

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

used_memory:1203480

used_memory_human:1.15M

used_memory_rss:1203480

used_memory_peak:1203424

used_memory_peak_human:1.15M

mem_fragmentation_ratio:1.00

mem_allocator:libc

loading:0

aof_enabled:0

changes_since_last_save:0

bgsave_in_progress:0

last_save_time:1541143334

bgrewriteaof_in_progress:0

total_connections_received:4

total_commands_processed:131

expired_keys:0

evicted_keys:0

keyspace_hits:14

keyspace_misses:2

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:0

vm_enabled:0

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:0

master_sync_in_progress:0

db0:keys=20,expires=0

db6:keys=1,expires=0

如果此时停止6379,那么就剩两个从节点,要使6380成为新的节点,就要启动redis-cli.exe,

slaveof no one,设置成新的节点。

redis主从切换介绍

这样就可以在6380新的主节点上操作

redis主从切换介绍

当原来的主节点恢复启动后,先将原来的主节点设置为从节点,这样就可以从当前主节点获取最新的数据。当前主节点是6380,所以先将6379设置为从节点,这样可以从主节点获取

redis主从切换介绍
redis主从切换介绍
redis主从切换介绍

6380的数据也就恢复过来了,然后将6380设置为从节点,6379设置为主节点

redis主从切换介绍
redis主从切换介绍

Redis主从复制(一主两从/一主多从)的分析

IO剧增 

每次slave断开以后(无论是主动断开,还是网路故障)再连接master都要将master全部dump出来rdb,在aof,即同步的过程都要重新执行一遍;所以要记住多台slave不要一下都启动起来,否则master可能IO剧增(间隔1-2分)

复制延迟 

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

可用性不高 

当有主节点发生异常情况,就会导致不能写入,导致业务出错!

1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。

2、通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。