redis集群搭建
介绍
刚开始学习 redis集群搭建可能会被繁琐的配置劝退,但重复配置是我们敲代码路上最平坦的一条路了,希望晨雨和大家以后都有足够的耐心,学好技术,装好B格。本文基于redis-5.0.8配置以及一些简单JedisCluster API操作,不涉及业务以及集群监控搭建。
使用xshell在虚拟机上安装redis
晨雨习惯了rz直接上传文件或者压缩包,在这就不介绍其他方式了。
虚拟机上直接yum install lrzsz
后便可使用rz上传文件到你想要存放的文件夹。(晨雨采用/usr/local目录下)
随后我们使用tar -xzf redis.5.0.8.tar.gz
(根据你压缩包的名字来解压),这样我们就在虚拟机上装好了redis。由于redis使用c语言编写,我们需要先安装c语言命令,yum install gcc
,然后进入redis-5.0.8使用make && make install
命令对源码包进行编译并安装。
当然你可能会因为没有jemalloc报错,可手动分配,使用make MALLOC=libc && make install
编译安装。
这时候,我们进入src目录便可以看到相应的服务端,客户端以及一些执行快照和aof的命令了。
ok,redis安装已经完毕,在这就不讲解单体redis的一些配置修改,我们直接进入集群吧。
集群搭建
根据选举超过半票原理,集群搭建一般需要在三个节点及以上。我们需要连接三台虚拟机并安装完redis,在每台虚拟机上创建一个文件夹来管理我们的节点。这儿采用一主一从来构建集群。
mkdir -p /usr/local/redisCluster
mkdir 8001 mkdir 8004
- 把redis-5.0.8中的redis.conf 拷贝到8001和8004 目录下。进入8001,cp /usr/local/redis-5.0.8/redis.conf redis.conf。
- 使用vim redis.conf命令对8001redis.conf进行配置修改。
- 将daemonize 改为yes,让redis可以在后台启动。
- port 8001(分别对每个机器的端口号进行设置)将端口号6379改为对应的端口。
- dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
- cluster-enabled yes(启动集群模式)
- cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
- cluster-node-timeout 5000 (根据机器性能修改)
- # bind 127.0.0.1(去掉bind绑定访问ip信息)让本机以外的用户也能访问集群。
- protected-mode no (关闭保护模式)
- appendonly yes 打开aof
- requirepass zhuge (设置redis访问密码)
- masterauth zhuge (设置集群节点间访问密码,跟上面一致) 以上两条保证安全性,自己尝试时可以不进行设置。
- 把修改后的配置文件copy 到8004文件夹下,并修改相应的端口。
- 另外两台机器也需要做上面几步操作,第二台机器用8002和8005,第三台机器用8003和8006。
- 分别启动六个实例服务,可以进入redis-5.0.8/src 目录下,使用./redis-server /usr/local/redisCluster/800x/redis.conf 执行配置文件启动
- 使用ps -ef | grep redis 查看三台机器redis是否启动成功
- 最后,我们便进行最重要的一步,启动我们的集群。./redis-cli -a zhuchen --cluster create --cluster-replicas 1 192.168.197.136:8001 192.168.197.135:8002 192.168.197.134:8003 192.168.197.136:8004 192.168.197.135:8005 192.168.197.134:8006 代表为每个创建的主服务器节点创建一个从服务器节点。
- 连接任意一个客户端即可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)如:./redis-cli -a zhuchen -c -h 192.168.197.136 -p 8001
- 进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
- 关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis-5.0.8/redis-cli -a zhuchen-c -h 192.168.197.136 -p 8001 shutdown
(千万要记得关闭,别偷懒)
(千万要记得关闭,别偷懒)
(千万要记得关闭,别偷懒)
当然我们可能也会碰到一些问题,比如说集群启动时某机器宕机,从节点成为master单位分配slots情况。
redis5.0.x之后可以直接使用客户端命令修复。./redis-cli --cluster fix 192.168.197.136:8001 -a zhuchen
之后我们进入集群中一个节点,查看集群信息,如果是ok,便可以愉快的进行set、get啦,便可以露出欣慰的笑容了。
使用redis-cli操作集群较为麻烦,不适用生产环境,所以我们要学习无敌的JedisCluster,以及一些实现业务的相关cache,spring整合等等。
Jedis jedis = new Jedis();
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.197.136", 8001));
jedisClusterNode.add(new HostAndPort("192.168.197.135", 8002));
jedisClusterNode.add(new HostAndPort("192.168.197.134", 8003));
jedisClusterNode.add(new HostAndPort("192.168.197.136", 8004));
jedisClusterNode.add(new HostAndPort("192.168.197.135", 8005));
jedisClusterNode.add(new HostAndPort("192.168.197.134", 8006));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(10);
config.setTestOnBorrow(true);
//connectionTimeout:指的是连接一个url的连接等待时间
//soTimeout:指的是连接上一个url,获取response的返回等待时间
JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 5000, 10, "zhuchen", config);
System.out.println(jedisCluster.set("student", "zhuchen"));
System.out.println(jedisCluster.set("age", "19"));
System.out.println(jedisCluster.get("student"));
System.out.println(jedisCluster.get("age"));
System.out.println("ok");
jedisCluster.close();
集群的简单搭建就到这儿了,其实redis-cli是最基本的搭建,不管什么环境下搭建都是依赖于他的。
平淡学习–加油。