由于单位平时使用的都是windows平台的操作系统,一直想搭建一个Redis集群。网上也找了很多资料,都比较零零散散,今天自己手动搭建一次,把过程记录一下。
第一步:安装windows版本的redis
打开浏览器敲入redis官方地址:https://redis.io/
找到Download it 点击Check the downloads page,如下图:
找到windows版本的位置点击Learn more,进入github页面
在页面中我们找到 release page,并且点击
在页面中我们选择最新的64位版本 Redis-x64-3.2.100.zip,有兴趣的可以也把源码包下载下来。
解压缩后的文件列表如下:
这面的exe文件是我们需要的,docx文件是使用说明。
我们新建一个redis.conf文件把如下配置拷贝进去
bind 127.0.0.1
port 6380
#appendonly yes
#appendfilename "appendonly.6380.aof"
#logfile "redis.log"
cluster-enabled yes
#cluster-config-file nodes-6380.conf
#cluster-node-timeout 15000
#cluster-slave-validity-factor 10
#cluster-migration-barrier 1
#cluster-require-full-coverage yes
#INFO stats/commandstats
#save 900 1
#save 300 10
#save 60 10000
这里面我们使用的了集群的最小配置项,主要的配置属性项为cluster-enabled 设置为yes,告诉redis以集群方式运行。
由于redis集群最少的redis实例为3台,这里面我们创建6个实例,每两台redis 互为主从备份。(网上看了很多资料,很多人的实例都是3台或者6台)
这时,我们新建一个bat文件,方便启动。
内容为 redis-server.exe ./redis.conf ,让redis以我们的配置文件方式运行。
这里面我们复制出6个文件,端口依次为 6379、6380、6381、6382、6383、6384
第二步。配置redis集群
redis集群是采用Ruby语言编写,这时候我们需要安装windows版本的Ruby
下载最新的版本即可,如下图:
跟着向导一步一步安装即可。
我安装在C:\Ruby22-x64 这个位置。
这是我们在cmd窗口输入 gem -v命令,可以查看版本信息。
这时候我们输入命令
gem install redis
这里我们中国的用户可能会被墙掉,无法连接服务器,这时候我需要把原有的source给删掉,添加一个淘宝镜像即可。
gem sources
查看现有的源,删除默认的源
gem source -r http://rubygems.org/
添加淘宝镜像
gem sources -a https://ruby.taobao.org/
输入如下命令,查看是否成功
gem sources -l
成功后,我们继续执行
gem install redis
这时候应该还是不能成功安装,会报错 一个403 的什么错误,这是因为镜像是https协议,这时候我们需要在ruby下面安装一个证书。证书可以从下面的网盘地址下载。
链接: https://pan.baidu.com/s/1eSzUkCy 密码: xn62
把这个证书放入任意本地目录即可,我放在C:\Ruby22-x64\lib 下面。
这是需要在系统环境变量中添加如下环境变量:
变量名:SSL_CERT_FILE 变量值:就是证书的位置
之后在执行:
gem install redis
会提示安装成功,之后我们就可以完成redis的集群操作。
第三步、创建集群
此时我们还需要一个 .rb 的ruby文件来启动集群。 redis-trib.rb 文件可以在下载的windows版本 redis的源码src中找到,拷贝下来即可。
这是我们在 redis-trib.rb 所在目录打开cmd窗口。
执行下面命令:
ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
系统会根据redis的状态自动创建好集群和主从配置。
这是我们只要输入 yes就行。之后会提示集群创建成功。
不知道为什么windows的集群创建好之后,各个redis实例会不停刷下图所示的日志。本人也查了好多配置开关还是没法关掉这些日志,记得以前在linux下面搭建集群成功后,不会一直刷新日志,希望有那位大神知道原因,告诉小弟一下。
这是我们在任意一台redis目录下执行如下命令:
redis-cli.exe -c -p 6389
这个 -c 参数一定要加上,不加的话我们添加数据时,如果这个key不再本机的slot上面会提示出错,有了 -c的命令会自动切换到目标redis上面, -p 代表端口号,不添加默认为6379 也可以添加 -h参数 ,本次所有都为本机,所以没有添加。
cluster info
可以查看当前redis集群状态
cluster nodes
可以查看各个节点之间的关系和主从关系。
默认redis集群如果有一个 主从 同时挂掉,这个集群即为不可用状态。
或者 多个 master挂掉 集群也为不可用状态。
这个大家搭建好之后,可以手动测试一下。
第四步、客户端连接
java连接redis还是通过Jedis连接,高版本的Jedis里面自带集群配置。
通过idean我们创建一个简单maven工程
添加maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
添加一个测试程序
public static void main(String[] args) {
String key = "test";
// 这东西 可以直接看到key 的分片数,就能知道放哪个 节点
System.out.println(JedisClusterCRC16.getSlot(key));
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6379));
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6380));
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6381));
// 3个master 节点
JedisCluster jc = new JedisCluster(jedisClusterNodes);
int i=0;
for(i=0;i<1000;i++){
System.out.println(jc.get(i+"key"));
jc.set(i+"key", "something"+i);
}
i=0;
for(i=0;i<1000;i++){
String value = jc.get(i+"key");
System.out.println(value);
}
}
通过 run/debug 执行程序。
这时候如果我们手动把 79端口的redis给干掉。再次执行该程序可以看到集群仍然可以工作,而不需要修改已经配置好的79端口号。