jediscluster 关闭 连接池_【搭建redis cluster集群,JedisCluster带密码访问 解决当中各种坑!】...

一.搭建redis单机

本文搭建redis3.0版本,3.0主要增加了redis cluster集群功能。

1.下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz,将下载文件拷贝到/usr/local

2.解压源码:tar -zxvf redis-3.0.0.tar.gz

3.编译源码:cd /usr/local/redis-3.0.0

make

4.安装到指定目录: cd /usr/local/redis-3.0.0

make PREFIX=/usr/local/redis install

5.进入源码目录,将redis.conf拷贝到安装路径:cd /usr/local/redis

mkdir conf

cp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin

6.修改redis.conf配置文件,以后端模式启动:daemonize yes

7.启动redis:cd /usr/local/redis ./bin/redis-server ./redis.conf  //在何处启动的server,一些配置文件就默认在该处生成(如果配置的相对路径)

8.redis.conf配置文件主要配置:

port 7001 //监听的端口

# bind 127.0.0.1 //绑定ip,只允许该ip访问,不填默认为*,表示允许所有ip访问

requirepass "你的密码" //开启密码

loglevel debug //日志级别,开发模式尽量选用debug

logfile "redis.log" //日志文件路径,此处使用相对路径,将生成到/usr/local/redis下

maxmemory 100000000 //允许最大内存占用100m

appendonly yes //启用aof

auto-aof-rewrite-percentage 80 //部署在同一机器的多个redis实例,建议把auto-aof-rewrite错开(可分别写80-100不等),防止瞬间fork,所有redis进程做rewrite,占用大量内存

9.jedis连接redis单机:

1

2 redis.clients

3 jedis

4 2.7.0

5

连接池整合spring:

1 @RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4

2 @ContextConfiguration("classpath:spring/application*.xml")3 public classRedisTest {4 @Autowired5 privateJedisPool pool;6 @Test7 public voidtestJedisPool() {8 Jedis jedis = null;9 String name = null;10 try{11 jedis =pool.getResource();12 jedis.set("testName", "RCL");13 name = jedis.get("testName");14 } catch(Exception ex) {15 ex.printStackTrace();16 } finally{17 if (jedis != null) {18 //返回给池

19 jedis.close();20 }21 Assert.assertEquals("RCL", name);22 }23 }

10.如果连接不上,可查看是否防火墙没有将redis端口开放:/etc/sysconfig/iptables添加:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT //7001即redis端口

重启防火墙

二、搭建redis集群

1.安装ruby环境

集群管理工具redis-trib.rb依赖ruby环境

(1)安装ruby:

yum install ruby yum install rubygems

(2)安装ruby和redis的接口程序:

拷贝redis-3.0.0.gem至/usr/local。执行:gem install /usr/local/redis-3.0.0.gem

2.建立redis实例

(1)建立存放redis群的文件夹及子文件夹(用于存放每个redis实例):

cd /usr/local

mkdir redis-cluster

mkdir redis-cluster/7001

mkdir redis-cluster/7002

……

(2)将刚刚安装的单机redis的/usr/local/redis文件夹拷贝到每个700X文件夹下,(这里我们建立六个实例,三主三从)

(3)修改每个700X目录下的redis.conf配置文件:

port 700X //各自监听的端口

#bind 127.0.0.1 //这里不绑定,默认允许所有ip访问,或者bind 0.0.0.0

cluster-enabled yes //开启集群

cluster-node-timeout 15000 //15时间内没有收到对方的回复,则单方面认为端节点挂掉

另外,由于下面我们需要配置集群密码,故之前配置的 requirepass 先删掉,集群成功后再进行配置。

3.启动各个redis:分别进入7001、7002、...7006目录,执行./redis-server ./redis.conf

4.创建集群:/usr/local/redis-cluster/redis-trib.rb create --replicas 1 123.123.123.123:7001 123.123.123.123:7002 123.123.123.123:7003 123.123.123.123:7004 123.123.123.123:7005 123.123.123.123:7006

注意:

(1)为保证远程可访问,这里的ip尽量使用公网ip,且创建集群时可先关闭防火墙,否则可以出现一直join……的现象。

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

(3)replicas指定为1表示每个主节点有一个从节点

(4)如果出现[ERR] Sorry, can't connect to node错误:

1.ruby 和rubygem 版本太低,安装新版本。查看gem版本和redis版本(redis-cli -v可查看redis版本)

2.查看reids配置文件,bind绑定的允许连接的ip是否正确。

3.是否redis配置文件还是使用了密码,使用了密码也可能导致这个错误。

(5)如果出现[ERR] Node 127.0.0.1:7005 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0:

表示集群时,之前的redis已有数据,那么登录到7005的redis中,执行FLUSHALL即可

(6)如果出现ERR Slot 0 is already busy (Redis::CommandError):

用redis-cli登录到每个节点执行flushall和cluster reset即可2.6进入集群:./redis-cli -c  -p 7001 -h 123.123.123.123(-c即-cluster 表示进入集群模式,不加表示进入单机redis)

5.检查集群是否成功:进入集群后,键入cluster info,显示cluster_state:ok,表示成功

6.设置密码:

(1)登录到每个节点,执行 config set masterauth 你的密码 config set requirepass 你的密码

(2)随后登入 7001/bin/redis-cli -c -h 112.74.55.239 -p 7004 -a 你的密码,执行: config rewrite

(3)防火墙开放7001到7006端口,以及redis总线:17001到17006:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001:7006 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 17001:17006 -j ACCEPT

7.JedisCluster连接redis集群

1

2 redis.clients

3 jedis

4 2.9.0//2.9.0才支持cluster密码认证,之前版本的jedisCluster.auth("密码")方法里面什么都没有实现,仅仅抛一个JedisClusterException("No way to dispatch this command to Redis Cluster.")5

整合spring:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

1 @RunWith(SpringJUnit4ClassRunner.class)2 @ContextConfiguration("classpath:spring/application*.xml")3 public classRedisTest {4 @Autowired5 privateJedisCluster jCluster;6 @Test7 public voidtestJCluster() {8 jCluster.set("name", "RCL");9 String name = jCluster.get("testName");10 Assert.assertEquals("RCL", name);11 }

原文链接:https://blog.csdn.net/localhost01/article/details/71436801

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值