Redis数据库之主从复制和集群部署

主从复制:

目前只能在一台机子上演示主从复制

第一步 需要启动两台Redis, 复制两份相同的redis.conf

第二步 分别将两个redis.conf文件的port设置为6380和6381

第三步 将6381那台的slaveof属性 设置为 127.0.0.1 6380

第四步 启动两台redis

第五步 在主机Redis上创建一个key, 可以通过命令查看从机Redis上也有相同的key, 说明自动实现主从复制

集群部署:

第一步: 安装ruby环境

yum install ruby

yum install rubygems

再安装ruby和redis的接口程序

需要将redis-3.0.0.gem文件拷贝至相应的目录下

gem install /../../redis-3.0.0.gem  目录地址自定义

第二步: 创建集群

① 在自定义的路径下创建6个文件夹用于表示不同的主机

② 将redis的源码中的redis.conf拷贝至每个主机文件夹下

③ 将redis的源码中的src目录下的redis-trib.rb文件拷贝至跟6个文件夹同级的目录中

④ 修改6个文件夹下的redis.conf的配置:

port 端口号  ===========>指定具体的端口号(当前设置为7001-7006), 不能重复也不能被其他程序占用

bind [ip] =======>绑定当前主机的ip(我这里配置为当前主机的ip 192.168.19.130)

cluster-enabled yes ==========>开启集群

cluster-config-file nodes-[port].conf  ============>生成节点文件(相对应的port改为7001-7006)

第三步: 启动每个节点的redis服务

① 启动6个redis服务

② 调用集群文件, 创建集群, 命令如下:

执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。

./redis-trib.rb create --replicas 1 192.168.19.130:7001 192.168.19.130:7002 192.168.19.130:7003 192.168.19.130:7004 192.168.19.130:7005  192.168.19.130:7006

说明:

其中192.168.19.130是当前机子的ip地址, 由于6台redis服务都在同一台机子上, 所以6个ip地址一样

redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

replicas指定为1表示每个主节点有一个从节点, 可以看成有3台机子, 每台机子都有主从(master/slave)复制

如果执行时报如下错误:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb

出现下图代表成功:

③ 查看集群部署:

1) 先用客户端登录其中一台服务, 登录命令: ./bin/redis-cli -h 192.168.19.130 -p 7001

2) 查看集群状态命令: cluster info

3) 再键入cluster nodes命令查看集群部署, 如下图:

第四步: 用Java代码连接Redis的集群

测试代码:

/**
     * 测试连接集群服务
     */
    @Test
    public void testCluster() {
        JedisPoolConfig config = new JedisPoolConfig();
        // 最大连接数
        config.setMaxTotal(30);
        // 最大连接空闲数
        config.setMaxIdle(2);
        //集群结点
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7001));
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7002));
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7003));
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7004));
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7005));
        jedisClusterNode.add(new HostAndPort("192.168.19.130", 7006));
        JedisCluster jc = new JedisCluster(jedisClusterNode, config);
        jc.set("birthday", "today");
        String value = jc.get("birthday");
        System.out.println(value);
        try {
            jc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值