linux4==阿里云ECS centos8部署redis6.2.6伪集群

1、在安装RVM之前先导入公钥,在RVM官网可以查到公钥。然后才可下载RVM

gpg --keyserver hkp://pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB


2、redis的集群管理工具redis-trib.rb依赖ruby环境。所以安装RVM,方便安装高版本的ruby,centos yum库中自带的ruby版本较低。

curl -L get.rvm.io | bash -s stable


3、安装ruby 2.5.8

source /usr/local/rvm/scripts/rvm
rvm list known

 rvm install 2.5.8

4安装redis依赖

gem install redis

5、下载redis到电脑并使用xshell上传到centos的usr/local/redis目录

下载地址

https://download.redis.io/releases/redis-6.2.6.tar.gz

 mkdir usr/local/redis

 6、新建集群文件夹,并复制安装包

mkdir usr/local/redisCluster

 7、编译安装redis

tar -zxvf redis-6.2.6.tar.gz 

cd redis-6.2.6/

make MALLOC=libc

make install

 8、复制集群管理工具redis-trib.rb到redisCluster下

cp -f ./redis-6.2.6/src/redis-trib.rb ./

 9、在redisCluster目录下新建6个文件夹,名字为8001到8006,将修改过后的redis.conf分别往6个目录中复制一份,并修改如下,端口号要分别指定,我这8001到8006,比如第一个修改如下,其余五个就端口号不同

port 8001

#bind 127.0.0.1 -::1

cluster-enabled yes

cluster-config-file nodes-8001.conf

protected-mode no

daemonize yes

requirepass 123@456

masterauth 123@456

 10、保留快照方便回退。开放对应的6个端口,开放你redis实例端口号+10000的端口,重启linux

11、启动6个redis,查看6个redis实例运行状态

 redis-server ../8001/redis.conf

ps -ef |grep redis

 12、redis 5以上版本直接redis-cli启动。5以下用集群管理工具启动。

./redis-cli -a 123@456 --cluster create 118.31.120.118:8001 118.31.120.118:8002 118.31.120.118:8003 118.31.120.118:8004 118.31.120.118:8005 118.31.120.118:8006 --cluster-replicas 1

./redis-cli -a 123@456 --cluster create 118.31.120.118:8001 118.31.120.118:8002 118.31.120.118:8003 118.31.120.118:8004 118.31.120.118:8005 118.31.120.118:8006 --cluster-replicas 1

 

 集群开启成功,登录任一redis实例,查看集群状态和集群节点信息

redis-cli -p 8001 -a 123@456 -c

cluster info

 ===========================

集群如果部署失败,想要重来,直接根据PID KILL掉就行

ps -ef |grep redis
kill -9 pid XXX  

==============================

登录一个实例set get测试下

 伪集群成功。

==================================

本地电脑RDM连接访问查看刚才新增的键值对,应该是在8003和8004中,因为8003是主节点,8004是8003的从节点

====================================================

使用jedis连接集群获取键值对信息,成功

/**
 * 集群环境下Jedis操作
 */
public class Cluster {
    private static JedisCluster jedis;

    static {
        // 添加集群的服务节点Set集合
        Set<HostAndPort> hostAndPortsSet = new HashSet<HostAndPort>();
        // 添加节点
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8001));
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8002));
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8003));
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8004));
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8005));
        hostAndPortsSet.add(new HostAndPort("118.31.120.118", 8006));


        // Jedis连接池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大空闲连接数, 默认8个
        jedisPoolConfig.setMaxIdle(100);
        // 最大连接数, 默认8个
        jedisPoolConfig.setMaxTotal(500);
        //最小空闲连接数, 默认0
        jedisPoolConfig.setMinIdle(0);
        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        jedisPoolConfig.setMaxWaitMillis(2000); // 设置2秒
        //对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(true);
        //public JedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, int soTimeout,
        //                      int maxAttempts, String password, final GenericObjectPoolConfig poolConfig)
        jedis = new JedisCluster(hostAndPortsSet, 2000, 2000, 5, "123@456", jedisPoolConfig);
    }

    /**
     * 测试key:value数据
     * 集群中flushDB、keys废弃
     */
    @Test
    public void testKey() throws InterruptedException {
//        System.out.println("清空数据:" + jedis.flushAll());
        System.out.println("判断某个键是否存在:" + jedis.exists("runoobkey"));
        String runoobkey = jedis.get("runoobkey");
        System.out.println("获取某个键的值:" + runoobkey);
        System.out.println("新增<'username','xiaohai'>的键值对:" + jedis.set("username", "xiaohai"));
        System.out.println("新增<'runoobkey','666'>的键值对:" + jedis.set("runoobkey", "666"));
//        System.out.println("新增<'password','123'>的键值对:" + jedis.set("password", "123"));
        System.out.println("是否存在:" + jedis.exists("username"));
        System.out.println("查看键username所存储的值的类型:" + jedis.type("username"));
//        System.out.println("新增<'password','password'>的键值对:" + jedis.set("password", "123456"));
//        Set<String> keys = jedis.hkeys("*");
//         System.out.println("系统中所有的键如下:"+keys);
//        System.out.println("删除键password:" + jedis.del("password"));
//        System.out.println("判断键password是否存在:" + jedis.exists("password"));
//        System.out.println("设置键username的过期时间为10s:" + jedis.expire("username", 10));
//        TimeUnit.SECONDS.sleep(2); // 线程睡眠2秒System.out.println("查看键username的剩余生存时间:"+jedis.ttl("username"));
//        System.out.println("查看键username的剩余生存时间:" + jedis.ttl("username"));
//        System.out.println("移除键username的生存时间:" + jedis.persist("username"));
//        System.out.println("查看键username的剩余生存时间:" + jedis.ttl("username"));

    }

 

 =========

set集群中有过的键值对,可以成功,如删掉username再set就可以,修改已有的也可以。但是set新的username2就显示获取不到连接

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

。。。 

在服务器上直接set get是能够成功的,所以应该是java代码的问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值