redis-cluster 部署简要步骤和通过jedis连接注意点

redis-cluster 部署需要以下几个步骤:

一、环境准备

1.ruby环境安装(要求2.2.2 以上版本)

 curl -O -L https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz //下载ruby压缩包,或者自行下载通过ftp上传
  tar -zxf ruby-2.2.7.tar.gz //解压
  cd ruby-2.2.7/  //进入解压目录
  ./configure --prefix=/usr/local/ruby-2.2.7 
  make && make install
  ln -s /usr/local/ruby-2.2.7/bin/ruby /usr/bin/ruby //设置快捷方式【如果报以下错误ln: failed to create symbolic link ‘/usr/bin/ruby’: File exists .进入/usr/bin/目录rm -f ruby 快捷方式,重新设置】如果报以下错误ln: failed to create symbolic link ‘/usr/bin/ruby’: File exists .进入/usr/bin/目录rm -f ruby 快捷方式,重新设置】

 

2.rubygems 安装

 

yum安装: yum install rubygems

或者

离线安装:
$tar -zxvf rubygems-2.6.12.tgz
$ cd /home/cmfchina/rubygems
$ tar -zxvf rubygems-2.6.12.tgz

3.redis接口安装

gem install redis 

4.redis安装和配置:

tar -zxf redis-4.0.1.tar.gz 
cd redis-4.0.1
make

 

 

redis.conf配置参数如下,拷贝下来后自行将端口(下面配置端口为7002)替换成指定端口:

#7000-7005
port 7001
#开启集群
cluster-enabled yes
#保存节点配置,自动创建,自动更新
#cluster-config-file nodes.conf
#集群超时时间,节点超过这个时间没反应就断定是宕机
cluster-node-timeout 5000
#存储方式,aof,将写操作记录保存到日志中,默认不开启
appendonly no
#后台启动
daemonize yes
#在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错,修改办法:
protected-mode no

redis 安装好后,可以将常用命令设置快捷方式,简要命令如下,其他的可以自行替换:

 

ln -s /home/redis/redis-4.0.1/src/redis-server /usr/bin/redis-server

带配置文件启动redis节点,命令如下【redis-cluster要求至少6节点,3主3从】:

redis-server 7001/redis.conf 
redis-server 7002/redis.conf 
redis-server 7003/redis.conf 
redis-server 7004/redis.conf 
redis-server 7005/redis.conf 
redis-server 7006/redis.conf 

5.集群加入

做集群命令【地址不要用127.0.0.1 否则jedis客户端会出:Could not get a resource from the pool异常】:

ruby、rubygems、redis接口包安装好后,分别启动redis节点

ruby redis-trib.rb  create --replicas 1 192.168.32.128:7001 192.168.32.128:7002 192.168.32.128:7003 192.168.32.128:7004 192.168.32.128:7005 192.168.32.128:7006

此致,环境安装完成。

二、客户端连接

1、jedis客户端连接【要求jedis版本2.9.0以上,要求虚拟机防火墙开放了对应的端口或者直接关闭虚拟机防火墙】,关闭命令如下:

CentOs7防火墙关闭命令如下,其他版本的话可以百度查询:
systemctl stop firewalld.service
systemctl disable firewalld.service 

以下为java测试代码:

  public static void main(String[] args) {
        try {
            jedisCluster();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public static void jedisCluster() throws IOException {
        // 数据库链接池配置
//        JedisPoolConfig config = new JedisPoolConfig();
//        config.setMaxTotal(100);
//        config.setMaxIdle(50);
//        config.setMinIdle(20);
//        config.setMaxWaitMillis(6 * 1000);
//        config.setTestOnBorrow(true);
        // Redis集群的节点集合
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("192.168.32.128", 7001));
        nodes.add(new HostAndPort("192.168.32.128", 7002));
        nodes.add(new HostAndPort("192.168.32.128", 7003));
        nodes.add(new HostAndPort("192.168.32.128", 7004));
        nodes.add(new HostAndPort("192.168.32.128", 7005));
        nodes.add(new HostAndPort("192.168.32.128", 7006));

        //JedisCluster对象,在系统中是单例存在
//        JedisCluster jedisCluster = new JedisCluster(nodes, 2000, 100,config);
        JedisCluster jedisCluster = new JedisCluster(nodes);
//        String str = jedisCluster.get("test234234444444444444421");
//        System.out.println(str);
        jedisCluster.set("s888888", "hello world");
        String result = jedisCluster.get("s888888");
        System.out.println(result);
//        System.out.println(jedisCluster.get("test234234444444444444421"));
        jedisCluster.close();

    }
}

验证通过:

D:\Java\jdk1.8.0_131\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:9714,suspend=y,server=n -javaagent:C:\Users\think\.IntelliJIdea2018.1\system\captureAgent\debugger-agent.jar=file:/C:/Users/think/AppData/Local/Temp/capture.props -Dfile.encoding=UTF-8 -classpath "D:\Java\jdk1.8.0_131\jre\lib\charsets.jar;D:\Java\jdk1.8.0_131\jre\lib\deploy.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_131\jre\lib\javaws.jar;D:\Java\jdk1.8.0_131\jre\lib\jce.jar;D:\Java\jdk1.8.0_131\jre\lib\jfr.jar;D:\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_131\jre\lib\jsse.jar;D:\Java\jdk1.8.0_131\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_131\jre\lib\plugin.jar;D:\Java\jdk1.8.0_131\jre\lib\resources.jar;D:\Java\jdk1.8.0_131\jre\lib\rt.jar;E:\git\tools\tools-core\target\classes;E:\m2\repository\org\apache\commons\commons-pool2\2.4.2\commons-pool2-2.4.2.jar;E:\m2\repository\redis\clients\jedis\2.9.0\jedis-2.9.0.jar;E:\git\tools\tools-utils\target\classes;E:\m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.1.4\lib\idea_rt.jar" com.lfxfs.tools.core.JedisPoolTest
Connected to the target VM, address: '127.0.0.1:9714', transport: 'socket'
hello world
Disconnected from the target VM, address: '127.0.0.1:9714', transport: 'socket'

Process finished with exit code 0

三、管理客户端参考

推荐使用treenms进行集群可视化管理:界面截图如下:

注意事项:

1.如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码

2.如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志

3.各个节点的密码都必须一致,否则Redirected就会失败

config set masterauth abc
config set requirepass abc
config rewrite

参考:

1.错误描述:ERR Slot 741 is already busy (Redis::CommandError)错误解决:

  解决办法:https://blog.csdn.net/qiushisoftware/article/details/78837855

2.错误描述:treenms管理客户端下载地址

解决办法:https://pan.baidu.com/s/1C1Id-QM-dI7-5OJ7MZAw2w

3.错误描述:使用redis客户端可以连接集群,但使用JedisCluster连接redis集群Could not get a resource from the pool

解决办法:

https://www.cnblogs.com/mengjinluohua/p/6193962.html


 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值