zoukankan      html  css  js  c++  java
  • java使用Redis8--3.0集群

    Redis集群至少需要3个主节点

    # cd /usr/redis

    创建一个目录

    # mkdir cluster

    # cd cluster

    1、复制一个配置文件

    # cp ../redis.conf 9001.conf

    修改配置文件

    # vim 9001.conf

    port 9001

    appendonly yes

    cluster-enabled yes

    cluster-config-file nodes-9001.conf

    cluster-node-timeout 5000

    2、复制两份配置文件,并修改

    # cp 9001.conf 9002.conf

    # cp 9001.conf 9003.conf

    3、启动3个redis实例

    # redis-server 9001.conf &

    # redis-server 9002.conf &

    # redis-server 9003.conf &

    4、启用集群(0 表示不启用副本, 如果设置成数值,例如1,表示每个主机启用一个从机,集群至少需要6个节点)

    redis-trib.rb create --replicas 0 192.168.77.136:9001 192.168.77.136:9002 192.168.77.136:9003

    4.1 执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

    错误内容:/usr/bin/env: ruby: No such file or directory

    所以需要安装ruby的环境,这里推荐使用yum install ruby安装

    # yum install ruby

    4.2 然后再执行创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

     错误内容:

    ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

    from ./redis-trib.rb:24

    # yum install rubygems

    4.3 再次执行集群创建命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装

    错误内容:

    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

    from ./redis-trib.rb:25

    # yum install redis

    因为源的原因,会安装失败,需要更改源信息

    # gem sources --remove https://rubygems.org/

    # gem source -a https://ruby.taobao.org/

    # gem source -l 查看列表下是不是只有 https://ruby.taobao.org/ 这一个源,如果不是重复执行下。

    源切换成功后,重新执行yum install redis

    # yum install redis

    安装完成后,再次执行集群命令,正常运行

    >>> Creating cluster
    Connecting to node 192.168.77.136:9001: OK
    Connecting to node 192.168.77.136:9002: OK
    Connecting to node 192.168.77.136:9003: OK
    >>> Performing hash slots allocation on 3 nodes...
    Using 3 masters:
    192.168.77.136:9001
    192.168.77.136:9002
    192.168.77.136:9003
    M: b32e955c04b37d4170860edf8ab1da0275811fe3 192.168.77.136:9001
       slots:0-5460 (5461 slots) master
    M: b4d0df0bec6740cf5680d14637aaa1f6f6283adb 192.168.77.136:9002
       slots:5461-10922 (5462 slots) master
    M: 5a834200f28caad158ef1fd5fe4ff4ea4b00622b 192.168.77.136:9003
       slots:10923-16383 (5461 slots) master
    Can I set the above configuration? (type 'yes' to accept): 

    输入yes

    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    3605:M 08 Aug 20:24:53.112 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
    3608:M 08 Aug 20:24:53.112 # configEpoch set to 2 via CLUSTER SET-CONFIG-EPOCH
    3612:M 08 Aug 20:24:53.113 # configEpoch set to 3 via CLUSTER SET-CONFIG-EPOCH
    >>> Sending CLUSTER MEET messages to join the cluster
    3605:M 08 Aug 20:24:53.183 # IP address for this node updated to 192.168.77.136
    3608:M 08 Aug 20:24:53.284 # IP address for this node updated to 192.168.77.136
    3612:M 08 Aug 20:24:53.285 # IP address for this node updated to 192.168.77.136
    Waiting for the cluster to join..
    >>> Performing Cluster Check (using node 192.168.77.136:9001)
    M: b32e955c04b37d4170860edf8ab1da0275811fe3 192.168.77.136:9001
       slots:0-5460 (5461 slots) master
    M: b4d0df0bec6740cf5680d14637aaa1f6f6283adb 192.168.77.136:9002
       slots:5461-10922 (5462 slots) master
    M: 5a834200f28caad158ef1fd5fe4ff4ea4b00622b 192.168.77.136:9003
       slots:10923-16383 (5461 slots) master
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    [root@Slave1 cluster]# 3605:M 08 Aug 20:24:58.025 # Cluster state changed: ok
    3612:M 08 Aug 20:24:58.125 # Cluster state changed: ok
    3608:M 08 Aug 20:24:58.125 # Cluster state changed: ok

    5、登陆集群

    # redis-cli -c -p 9001

    5.1 查看集群运行情况 cluster info

    127.0.0.1:9001> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:3
    cluster_size:3
    cluster_current_epoch:3
    cluster_my_epoch:1
    cluster_stats_messages_sent:6275
    cluster_stats_messages_received:6275

    5.2 查看集群节点情况 cluster nodes

    127.0.0.1:9001> cluster nodes
    b32e955c04b37d4170860edf8ab1da0275811fe3 192.168.77.136:9001 myself,master - 0 0 1 connected 0-5460
    5a834200f28caad158ef1fd5fe4ff4ea4b00622b 192.168.77.136:9003 master - 0 1439094158089 3 connected 10923-16383
    b4d0df0bec6740cf5680d14637aaa1f6f6283adb 192.168.77.136:9002 master - 0 1439094157080 2 connected 5461-10922

    5.3 简单验证

    127.0.0.1:9001> set a abc
    -> Redirected to slot [15495] located at 192.168.77.136:9003
    OK
    192.168.77.136:9003> get a
    "abc"

    6 java程序连接集群

    import java.util.HashSet;
    import java.util.Set;
    
    import redis.clients.jedis.HostAndPort;
    import redis.clients.jedis.JedisCluster;
    
    public class TestRedisCluster {
    
        public static void main(String[] args) {
            Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
            jedisClusterNodes.add(new HostAndPort("192.168.77.136", 9001));
         // 使用redis集群中的任一节点即可 JedisCluster jedis
    = new JedisCluster(jedisClusterNodes); // 开始前,先移除所有的内容 jedis.del("java framework"); System.out.println(jedis.lrange("java framework", 0, -1)); // 先向key java framework中存放三条数据 jedis.lpush("java framework", "spring"); jedis.lpush("java framework", "struts"); jedis.lpush("java framework", "hibernate"); // 再取出所有数据jedis.lrange是按范围取出, // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有 System.out.println(jedis.lrange("java framework", 0, -1)); jedis.del("java framework"); jedis.rpush("java framework", "spring"); jedis.rpush("java framework", "struts"); jedis.rpush("java framework", "hibernate"); System.out.println(jedis.lrange("java framework", 0, -1)); jedis.close(); } }

    127.0.0.1:9001> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:3cluster_size:3cluster_current_epoch:3cluster_my_epoch:1cluster_stats_messages_sent:6275cluster_stats_messages_received:6275

  • 相关阅读:
    DP:Multiplication Puzzle(POJ 1651)
    Heap:Expedition(POJ 2431)
    velocity.js 动画插件
    ES6 新特性
    ps p图
    php 建站 多域名配置 自定义重定向
    移动端开发 资源分享
    拖拽 初体验
    颜色选择器 rgb 与16进制 颜色转换
    web 常用颜色
  • 原文地址:https://www.cnblogs.com/yangmengdx3/p/4714927.html
Copyright © 2011-2022 走看看