首先说下主从同步Replication的原理

在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

服务器名称 内网IP

Master 172.30.21.96
Slave1 172.30.21.88
Slave2 172.30.21.89
Slave3 172.30.21.90
Slave4 172.30.21.91

master配置

logfile “/tmp/redis6379.log”
# slaveof <masterip> <masterport> #master这个地方注释不打开,保持默认

启动master

./redis-server ../redis.conf &

slave配置

logfile “/tmp/redis6379.log”
slaveof 172.30.21.96 6379

启动slave

./redis-server ../redis.conf &

检查启动结果

在各自服务器上用 redis-cli客户端连接redis,输入info指令,即可查看主从的状态。

master:

slave:

主从切换

Redis的主从架构,如果没有设置哨兵,那么如果master出现故障,需要手动将slave切换成master继续服务。下面先说明如何进行手动切换:

#在新的master上执行:
SLAVEOF NO ONE
#在其他的slave上执行:
SLAVEOF <新的masterip> <新的masterport>

原来的主redis恢复正常了,要重新切换回去。重新切回的步骤如下:

1 将现在的主redis的数据进行保存(save指令)
2 将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录
3 启动原来的主redis
4 在现在的主redis中切换 SLAVEOF <旧的masterip> <旧的masterport>
5 在其他的slave节点切换 SLAVEOF <旧的masterip> <旧的masterport>
6 完毕

自动切换(高可用方案配置)

  手动的方式容易造成失误,容易导致数据丢失,而且如果主从节点很多,切换起来也很麻烦。自动切换一般通过设置哨兵实现。哨兵可以对master和slave进行监控,并在master出现故障的时候,能自动将slave切换成master。

  redis哨兵(Redis Sentinel)的启动和redis实例的启动没有关系。所以可以在任何机器上启动redis哨兵。Redis Sentinel 是一个分布式系统,可以在整个redis主从架构中运行多个 Sentinel 进程(progress)。建议至少要保证有两个哨兵在运行,要不然物理机宕机后哨兵进程也不存在了,就无法进行主从切换。

  我们这里有5台redis服务器(1主4从),所以启动5个哨兵。每个哨兵的配置如下:

修改sentinel.conf的配置:

logfile "/tmp/sentinel.log"
sentinel monitor mymaster 172.30.21.96 6379 2 #这个2代表,当集群中有2个sentinel认为master挂了时,才能真正认为该master已经不可用了

启动sentinel(默认端口号26379)

./redis-sentinel ../sentinel.conf &

关于sentinel可以看官方文档,有很多的说明。这里列出一些主要的配置属性:

# 指明日志文件名
logfile "/tmp/sentinel.log"
# 哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel monitor mymaster 172.30.21.96 6379 1
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 5000
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 18000
# 设置master和slaves验证密码
sentinel auth-pass mymaster 123456
# 指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1

通过哨兵查看集群的信息:

$ redis-cli -p 26379
sentinel master mymaster//查看master的状态
SENTINEL slaves mymaster //查看salves的状态
SENTINEL sentinels mymaster //查看哨兵的状态
SENTINEL get-master-addr-by-name mymaster//获取当前master的地址
info sentinel//查看哨兵信息

写个代码测试下:

public static void main(String[] args) {
Set<String> sentinels = new HashSet<String>();
sentinels.add(new HostAndPort("172.30.21.96", 26379).toString());
sentinels.add(new HostAndPort("172.30.21.88", 26379).toString());
sentinels.add(new HostAndPort("172.30.21.89", 26379).toString());
sentinels.add(new HostAndPort("172.30.21.90", 26379).toString());
sentinels.add(new HostAndPort("172.30.21.91", 26379).toString());
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels); System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString()); Jedis master = sentinelPool.getResource();
//master.set("username","jager"); System.out.println(master.get("username")); sentinelPool.close();
sentinelPool.destroy();
}

参考文档:

http://blog.csdn.net/quiet_boy/article/details/53885406

http://www.cnblogs.com/Xrinehart/p/3502198.html

http://www.cnblogs.com/clor001/p/5409891.html

http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

Redis主从配置及HA方案的更多相关文章

  1. Redis主从配置详细过程

    Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面楼主简单的进行一下配置. 1.上面安装 ...

  2. redis主从配置及主从切换 转

    redis主从配置及主从切换 转自 http://blog.sina.com.cn/s/blog_67196ddc0101h8v0.html (2014-04-28 17:48:47) 转载▼   分 ...

  3. 通过哨兵机制实现Redis主从配置以及java调用

    Redis版本:3.0.7 操作环境:Linux 一.redis 主从配置的作用是什么 redis主从配置,配置master 只能为写,slave只能为读,在客户端对poolconnect请求时候,, ...

  4. redis主从配置+sentinel哨兵

    redis主从配置+sentinel哨兵 1:编译环境准备 1.1环境确认 Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.所以在搭建Redis服务器时需要C语言的编 ...

  5. Redis主从配置及通过Keepalived实现Redis自动切换高可用

    Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区  作者:fuquanjun [字体:大 中 小]   一:环境介绍: M ...

  6. Linux中redis主从配置

    假设要在6380开启redis 1.添加配置文件:复制redis.conf为redis_6380.conf 2.修改配置文件:修改redis_6380.conf中port.pidfile 3.防火墙: ...

  7. Redis 主从配置密码以及哨兵

    目录: Redis 主从介绍 哨兵机制 Redis 主从配置 环境 安装 启动服务 检查主从状态 测试数据同步 默认是读写分离的 Redis Sentinel 配置 主Redis宕机测试 配置多个哨兵 ...

  8. spring集成redis——主从配置以及哨兵监控

    Redis主从模式配置: Redis的主从模式配置是非常简单的,首先我们需要有2个可运行的redis环境: master node : 192.168.56.101 8887 slave node: ...

  9. redis主从配置及主从切换

    环境描述: 主redis:192.168.10.1 6379从redis:192.168.10.2 6380 一.主从配置 1.将主从redis配置文件redis.conf中的aemonize no ...

随机推荐

  1. 【学习笔记】Hibernate关联映射(Y2-1-6)

    Hibernate关联映射 关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 1.单向多对一关联 准备数据库 部门表和员工表 其中部门表有两列 部门编号和名称 员工表有三列 员工 ...

  2. Java经典编程题50道之三十二

    取一个整数a从右端开始的4-7位. public class Example32 {    public static void main(String[] args) {        cut(12 ...

  3. 如何解决使用Gradle时出现的jar包冲突

    前言 在我之前使用Gradle的博文中已经提到,Gradle对依赖的管理是比较智能的,如果有两个包依赖于相同的包,而版本不同的时候,Gradle会进行自动的选择,从而避免jar包的冲突. 也就是说,在 ...

  4. Kotlin——基础的函数/方法详解

    对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...

  5. JVM笔记6-垃圾回收概述

    JVM进行垃圾回收时要考虑哪的问题如下: 1.如何判定对象为垃圾对象? 1.引用计数法:在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,引用失效的时候,计数器的值就-1, ...

  6. OJ的初步了解

    注意源文件的注释可能跟题目不一样. 注意工程文件已有主函数. 注意输出结果还是返回值. 注意带参数的方法不用手动输入. 注意提交的次数的正确率会计入编程能力.

  7. ajax的缺点

    平时我们大多注意的都是ajax给我们所带来的好处诸如用户体验的提升.对ajax所带来的缺陷有所忽视. 下面所阐述的ajax的缺陷都是它先天所产生的. 1.ajax干掉了back按钮,即对浏览器后退机制 ...

  8. openstack-ocata-计算服务4

    一. 计算服务概览 使用OpenStack计算服务来托管和管理云计算系统.OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现. OpenStack计算组件 ...

  9. 重新编译Linux内核必要性及其准备工作

    内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/u ...

  10. 1.4 PCI总线的中断机制

    PCI总线使用INTA#.INTB#.INTC#和INTD#信号向处理器发出中断请求.这些中断请求信号为低电平有效,并与处理器的中断控制器连接.在PCI体系结构中,这些中断信号属于边带信号(Sideb ...