【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!
转:
make
make PREFIX=/usr/local/redis install
mkdir confcp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin
port 7001 //监听的端口# bind 127.0.0.1 //绑定ip,只允许该ip访问,不填默认为*,表示允许所有ip访问requirepass "你的密码" //开启密码loglevel debug //日志级别,开发模式尽量选用debuglogfile "redis.log" //日志文件路径,此处使用相对路径,将生成到/usr/local/redis下maxmemory 100000000 //允许最大内存占用100mappendonly yes //启用aofauto-aof-rewrite-percentage 80 //部署在同一机器的多个redis实例,建议把auto-aof-rewrite错开(可分别写80-100不等),防止瞬间fork,所有redis进程做rewrite,占用大量内存
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.7.0</version>
- </dependency>
- 连接池整合spring:
- <!-- redis连接池(单例) -->
- <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">
- <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
- <constructor-arg name="host" value="${redis.host}"/>
- <constructor-arg name="port" value="${redis.port}"/>
- <constructor-arg name="timeout" value="${redis.timeout}"/>
- <constructor-arg name="password" value="${redis.pass}"/>
- </bean>
- <!-- 连接池配置 -->
- <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <!-- 最大连接数 -->
- <property name="maxTotal" value="150" />
- <!-- 最大空闲连接数 -->
- <property name="maxIdle" value="30" />
- <!-- 最小空闲连接数 -->
- <property name="minIdle" value="10" />
- <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
- <property name="maxWaitMillis" value="3000" />
- <!-- 每次释放连接的最大数目 -->
- <property name="numTestsPerEvictionRun" value="100" />
- <!-- 释放连接的扫描间隔(毫秒) -->
- <property name="timeBetweenEvictionRunsMillis" value="3000" />
- <!-- 连接最小空闲时间 -->
- <property name="minEvictableIdleTimeMillis" value="1800000" />
- <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
- <property name="softMinEvictableIdleTimeMillis" value="10000" />
- <!-- 在获取连接的时候检查有效性, 默认false -->
- <property name="testOnBorrow" value="true" />
- <!-- 在空闲时检查有效性, 默认false -->
- <property name="testWhileIdle" value="true" />
- <!-- 在归还给pool时,是否提前进行validate操作 -->
- <property name="testOnReturn" value="true" />
- <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
- <property name="blockWhenExhausted" value="false" />
- </bean>
- @RunWith(SpringJUnit4ClassRunner.class) // 指定测试用例的运行器 这里是指定了Junit4
- @ContextConfiguration("classpath:spring/application*.xml")
- public class RedisTest {
- @Autowired
- private JedisPool pool;
- @Test
- public void testJedisPool() {
- Jedis jedis = null;
- String name = null;
- try {
- jedis = pool.getResource();
- jedis.set("testName", "RCL");
- name = jedis.get("testName");
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {
- if (jedis != null) {
- // 返回给池
- jedis.close();
- }
- Assert.assertEquals("RCL", name);
- }
- }
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT //7001即redis端口
重启防火墙
yum install ruby yum install rubygems
拷贝redis-3.0.0.gem至/usr/local。执行:gem install /usr/local/redis-3.0.0.gem
cd /usr/localmkdir redis-clustermkdir redis-cluster/7001mkdir redis-cluster/7002
……
port 700X //各自监听的端口#bind 127.0.0.1 //这里不绑定,默认允许所有ip访问,或者bind 0.0.0.0cluster-enabled yes //开启集群cluster-node-timeout 15000 //15时间内没有收到对方的回复,则单方面认为端节点挂掉另外,由于下面我们需要配置集群密码,故之前配置的 requirepass 先删掉,集群成功后再进行配置。
1.ruby 和rubygem 版本太低,安装新版本。查看gem版本和redis版本(redis-cli -v可查看redis版本)2.查看reids配置文件,bind绑定的允许连接的ip是否正确。3.是否redis配置文件还是使用了密码,使用了密码也可能导致这个错误。
表示集群时,之前的redis已有数据,那么登录到7005的redis中,执行FLUSHALL即可
用redis-cli登录到每个节点执行flushall和cluster reset即可2.6进入集群:./redis-cli -c -p 7001 -h 123.123.123.123(-c即-cluster 表示进入集群模式,不加表示进入单机redis)
(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
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.9.0</version> //2.9.0才支持cluster密码认证,之前版本的jedisCluster.auth("密码")方法里面什么都没有实现,仅仅抛一个JedisClusterException("No way to dispatch this command to Redis Cluster.")
- </dependency>
- 整合spring:
- <!-- redis集群 -->
- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
- <constructor-arg index="0">
- <set>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port1}"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port2}"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port3}"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port4}"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port5}"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg index="0" value="${redis.host}"></constructor-arg>
- <constructor-arg index="1" value="${redis.port6}"></constructor-arg>
- </bean>
- </set>
- </constructor-arg>
- <constructor-arg index="1" value="${redis.timeout}"></constructor-arg>
- <constructor-arg index="2" value="${redis.sockettimeout}"></constructor-arg>
- <constructor-arg index="3" value="${redis.maxAttempts}"></constructor-arg>
- <constructor-arg index="4" value="${redis.pass}"></constructor-arg>
- <constructor-arg index="5" ref="jedisPoolConfig"></constructor-arg>
- </bean>
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration("classpath:spring/application*.xml")
- public class RedisTest {
- @Autowired
- private JedisCluster jCluster;
- @Test
- public void testJCluster() {
- jCluster.set("name", "RCL");
- String name = jCluster.get("testName");
- Assert.assertEquals("RCL", name);
- }
【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!的更多相关文章
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- Docker 搭建 Redis Cluster 集群环境
使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...
- 搭建redis cluster集群服务
redis 5.0以下为ruby编写,运行命令时需要安装ruby,而5.0以上则为c编写,可直接安装后运行.因此本文使用redis5.0.5 1.编写配置文件 在 /home 下新建 redis-cl ...
- centos6下redis cluster集群部署过程
一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...
- Redis Cluster集群搭建与配置
Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...
- Redis Cluster集群搭建与应用
1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...
- Redis cluster集群:原理及搭建
Redis cluster集群:原理及搭建 2018年03月19日 16:00:55 阅读数:6120 1.为什么使用redis? redis是一种典型的no-sql 即非关系数据库 像python的 ...
- Redis Cluster集群搭建<原>
一.环境配置 一台window 7上安装虚拟机,虚拟机中安装的是centos系统. 二.目标 Redis集群搭建的方式有多种,根据集群逻辑的位置,大致可以分为三大类:基于客户端分片的Redis ...
- redis集群与分片(2)-Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
随机推荐
- 一、zipkin
zipkin是Twitter基于google的分布式监控系统Dapper(论文)的开发源实现,zipkin用于跟踪分布式服务之间的应用数据链路(具体就是收集微服务之间的调用情况,然后处理调用之间数据延 ...
- js 中常用的循环
参考文章: 1.js几种数组遍历方式以及性能分析对比 2.javaScript遍历对象.数组总结 首先是数组中可以使用的 1.for 循环 for (let i = 0; i < xxx.len ...
- JavaScript Decorators 的简单理解
Decorators,装饰器的意思, 所谓装饰就是对一个物件进行美化,让它变得更漂亮.最直观的例子就是房屋装修.你买了一套房子,但是毛坯房,你肯定不想住,那就对它装饰一下,床,桌子,电视,冰箱等一通买 ...
- gym-101350D
题意:给你一个数组,你每次可以是其中一个数减一,数组其他元素加一,问是否能够相等,这个数组的所有元素. 解题思路:将数组从小到大排序,只要后一项减去当前项的值是奇数就行了. 代码: #include& ...
- 一、Java多人博客系统-开篇
作为一个程序员,工作之外的不断学习是必须的.这个项目是我个人课外学习和练手的项目.最开始是一个个人网站.当时发现京东云可以免费部署网站的,就立即写了一个网站,当时就使用jsp技术,可以实现发布博客.评 ...
- Nginx 如何限制响应速度
在 location 里设置 location { set $limit_rate 1k; 表示每秒只响应1k的速度 }
- linux-shell系列1-ip
#!/bin/sh # Ping网段所有IP ip1=192.168.30.ip2=192.168.31.ip3=192.168.232.for i in `seq 1 255`do ping -c ...
- 醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)
世界上有些问题看似是随机的(stochastic),没有规律可循,但很可能是人类还未发现和掌握这类事件的规律,所以说它们是随机发生的. 随机漫步(Random Walk)是一种解决随机问题的方法,它 ...
- DNS 透明代理
DNS 透明代理 一.使用DNS负载均衡虚拟服务器(DNS * 53)的方式 --- 推荐使用的方式 注意:只会代理跨内网网段的DNS查询请求 ---------------------------- ...
- 【BZOJ4890】[TJOI2017]城市(动态规划)
[BZOJ4890][TJOI2017]城市(动态规划) 题面 BZOJ 洛谷 题解 数据范围都这样了,显然可以暴力枚举断开哪条边. 然后求出两侧直径,暴力在直径上面找到一个点,使得其距离直径两端点的 ...