Redis主从复制,哨兵机制及集群搭建

一、Redis 主从复制

1.作用:

主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据

2.主从复制架构图:

3. 主从复制的搭建

(1)第一步,创建三个目录代表三台机器,master,node1,node2

(2)拷贝源码中的redis.conf分别到master,node1,node2中

(3)3台机器修改配置, 修改端口号,开启远程连接,配置主节点

(4)启动3台机器进行测试

 

 主从复制的不足:容易出现单点故障

二.Redis哨兵机制

1. 哨兵Sentinel机制

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构,可以解决单点故障的问题。

无法解决: 1.单节点并发压力问题 2.单节点内存和磁盘物理上限

2 .哨兵架构原理

 

三. Redis集群

1.概述:

Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(sharding shard )等特性。

2.集群架构图:

注意:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3) 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

 3.集群的搭建

前提:

         判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点

安装步骤:

第一步环境搭建:

(1)准备环境安装ruby以及redis集群依赖
            yum install -y ruby rubygems

(2)2.在一台机器创建7个目录 

(3)每个目录复制一份配置文件 

 

(4)修改不同目录配置文件

 

(5)指定不同目录配置文件启动七个节点并查看进程

第二步创建集群:

1.创建集群

命令:redis-cli --cluster create 192.168.19.100:7000 192.168.19.100:7001 192.168.19.100:7002 192.168.19.100:7003 192.168.19.100:7004 192.168.19.100:7005 --cluster-replicas 1

2.集群创建成功出现如下提示

第三步查看集群状态

(1)  查看集群状态 check [原始集群中任意节点] [无]
      redis-cli --cluster check 192.168.220.100:7000

集群节点状态说明

 

(2) 添加子节点

 

 (3)删除子节点(例如7000),观察集群状态

 

注意: 

观察上述(2)和(3)的图,发现此时原本主节点7000被杀死后,由7000为主7005,7006为从的主从体系变为7006为主7005为从的主从体系,这便是Redis的哨兵机制

这时再去启动节点7000的服务,产看集群的状态:

 

 

四.如何使用java连接redis集群

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;

public class RedisCluster {
    public static void main(String[] args) {
        //如何通过javaAPI连接redis集群
        //创建JedisCluster的对象
        // public JedisCluster(Set<HostAndPort> nodes)
        //需要先将所有集群中的节点封装成一个Set集合
        //每一个节点需要先封装成HostAndPort对象
        // public HostAndPort(String host, int port)
        HashSet<HostAndPort> hostAndPorts = new HashSet<>();
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7000));
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7001));
        hostAndPorts.add(new HostAndPort("19 2.168.19.100", 7002));
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7003));
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7004));
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7005));
        hostAndPorts.add(new HostAndPort("192.168.19.100", 7006));

        JedisCluster jedisCluster = new JedisCluster(hostAndPorts);
        jedisCluster.set("name", "xiaownag");
        jedisCluster.set("age", "18");
        System.out.println(jedisCluster.get("name"));

        //如果两个键不在一个主节点中存储,不能一起删除
//        jedisCluster.del("name","age");
        //推荐集群模式下的redis,删除键的时候,一个一个删
        jedisCluster.del("name");
        jedisCluster.del("age");

        //关闭连接
        jedisCluster.close();


    }
}
  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值