• linux下redis4.0.2集群部署(利用Ruby脚本命令)


    一、原生命令方式和Ruby脚本方式区别

    利用Ruby脚本部署和用原生命令部署,节点准备的步骤都是一样的,节点启动后的握手,以及主从、槽分配,利用Ruby脚本一步就能完成,利用原生命令需要一步一步地执行命令完成。

    二、部署架构:3台服务器,互为主从,3主3从

    三、准备6个节点配置文件

    在172.28.18.75上操作

    cd /etc/redis

    vim redis-25701.conf

    bind 172.28.18.75
    port 25701
    masterauth "Zaq1xsw@"
    requirepass "Zaq1xsw@"
    protected-mode yes
    daemonize yes
    dir "/etc/redis"
    pidfile "/var/run/redis_25701.pid"
    loglevel notice
    logfile "redis-25701.log"
    dbfilename "dump-25701.rdb"
    
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file node-25701.conf
    cluster-require-full-coverage no

    替换端口号,并生成一个从节点配置文件

    sed 's/25701/25702/g' redis-25701.conf > redis-25702.conf

    复制这两个配置文件到172.28.18.103和172.28.18.104对应的目录下

    scp -P25601 redis-25701.conf root@172.28.18.103:/etc/redis/

    scp -P25601 redis-25702.conf root@172.28.18.103:/etc/redis/

    scp -P25601 redis-25701.conf root@172.28.18.104:/etc/redis/

    scp -P25601 redis-25702.conf root@172.28.18.104:/etc/redis/

    四、启动6个节点

    redis-server redis-25701.conf

    查看redis-25701.log

    集群模式运行成功,再启动其他5个节点,至此节点准备完毕。

    五、安装Ruby环境

    1、下载

    wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

    2、解压

    tar -zxvf  ruby-2.3.1.tar.gz

    3、编译

    cd ruby-2.3.1

    ./configure -prefix=/usr/local/ruby

    make && make install

    4、建立软连接

    ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby

    ln -s /usr/local/ruby/bin/gem /usr/local/bin/gem

    5、执行

    ruby -v

    六、安装Ruby的redis客户端 redis-3.3.0.gem

    1、下载

    cd /usr/local/src

    wget http://rubygems.org/downloads/redis-3.3.0.gem

    2、安装

    gem install -l redis-3.3.0.gem

    3、验证

    gem list -- check redis gem

    七、安装redis-trib.rb脚本

    cp /usr/local/src/redis-4.0.2/src/redis-trib.rb /usr/local/bin/

    八、利用redis-trib.rb脚本部署集群

    1、首选确保各个节点的redis配置文件里,不能有

    requirepass "xxxxxxxx"
    protected-mode yes

    两个设置项,

    必须要有绑定IP设置 bind 172.28.18.XXX ,否则集群配置会连接不了节点而失败。

    2、执行如下命令

    redis-trib.rb create --replicas 1 172.28.18.75:25701 172.28.18.103:25701 172.28.18.104:25701 172.28.18.103:25702 172.28.18.104:25702 172.28.18.75:25702

    redis-trib.rb create --replicas 1 主节点1 主节点2  主节点3 从节点1 从节点2 从节点3

    继续yes

    槽数据分配完毕,主从设置完毕,集群启动完毕

    九、查看节点信息

    在172.28.18.75上执行

    redis-cli -h 172.28.18.75 -p 25701 cluster nodes

    显示3主3从

    十、查看集群信息

    在172.28.18.75上执行

    redis-cli -h 172.28.18.75 -p 25701 cluster info

    分配了16384个槽,已知6个节点。

    十一、客户端连接验证

    redis-cli -c -h 172.28.18.75 -p 25701

    -c 参数表示连接到集群

    插入一个key,被分配到104节点上了,集群正常工作。

     十二、java jedis连接集群

    public class RedisClusterTest {
        private static Logger logger=LoggerFactory.getLogger(RedisClusterTest.class);
        
        public static void main(String[] args) throws InterruptedException{
            JedisCluster jedis;
            //添加集群的服务节点Set集合
            Set<HostAndPort> hostAndPortsSet =new HashSet<HostAndPort>();
            //添加集群节点信息
            hostAndPortsSet.add(new HostAndPort("172.28.18.75",25701));
            hostAndPortsSet.add(new HostAndPort("172.28.18.103",25701));
            hostAndPortsSet.add(new HostAndPort("172.28.18.104",25701));
    
            //连接池配置
            JedisPoolConfig config = new JedisPoolConfig();
            //最大连接数, 默认8个
            config.setMaxTotal(500);
            //最大空闲连接数, 默认8个
            config.setMaxIdle(100);
            //最小空闲连接数, 默认0
            config.setMinIdle(0);
            //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
            config.setMaxWaitMillis(2000); // 设置2秒
            //对拿到的connection进行validateObject校验
            config.setTestOnBorrow(true);
            jedis=new JedisCluster(hostAndPortsSet,config);
            System.out.println("===========增加数据===========");
            System.out.println(jedis.set("key1","value1"));
            System.out.println(jedis.set("key2","value2"));
            System.out.println(jedis.set("key3", "value3"));
            System.out.println("获取键key2:"+jedis.get("key2"));
            System.out.println("获取key1的值:"+jedis.get("key1"));
            System.out.println("key3的值:"+jedis.get("key3"));
            
        }
    }
  • 相关阅读:
    20210304
    20210303
    20210302
    20210210
    20210209
    20210208
    20210207
    例4-6
    例4-5
    例4-4
  • 原文地址:https://www.cnblogs.com/sky-cheng/p/10695146.html
Copyright © 2020-2023  润新知