构建redis集群
参考官方文档,搭建一个简单的redis集群
前提:有个redis的编译版本
1. 创建目录
mkdir cluster-test cd cluster-test mkdir 7000 7001 7002 7003 7004 7005
2. 在7000-7005每一个目录中,创建redis.conf文件,7000的文件内容如下,其他目录的修改对应端口号
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
3. 将编译的redis-server文件挪到cluster-test目录中
4. 启动每一个实例,7000如下
cd 7000
../redis-server ./redis.conf
5. 将编译后的redis-cli挪到cluster-test目录,如果是低版本的redis(3或者4),则使用redis-trib.rb
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \ 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \ --cluster-replicas 1
6. 会有一次配置的确认,输入yes,当看到如下信息,则表示创建成功
[OK] All 16384 slots covered
创建好之后,尝试用java代码进行操作
1. 引入maven依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
2. 增加个工具类
import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import java.util.HashSet; import java.util.Set; /** * @author page * @since 2021/1/20 16:01 */ public class RedisClusterUtil { private static JedisCluster jedisCluster = null; private static final String HOST = "192.168.92.130"; static { HostAndPort hostAndPort = new HostAndPort(HOST, 7000); HostAndPort hostAndPort1 = new HostAndPort(HOST, 7001); HostAndPort hostAndPort2 = new HostAndPort(HOST, 7002); Set<HostAndPort> hostAndPortSet = new HashSet<>(); hostAndPortSet.add(hostAndPort); hostAndPortSet.add(hostAndPort1); hostAndPortSet.add(hostAndPort2); HostAndPort hostAndPort3 = new HostAndPort(HOST, 7003); HostAndPort hostAndPort4 = new HostAndPort(HOST, 7004); HostAndPort hostAndPort5 = new HostAndPort(HOST, 7005); hostAndPortSet.add(hostAndPort3); hostAndPortSet.add(hostAndPort4); hostAndPortSet.add(hostAndPort5); jedisCluster = new JedisCluster(hostAndPortSet); } /** * 获取指定 key 的值 * * @param key * @return */ public static String getString(String key) { return jedisCluster.get(key); } /** * 设置指定 key 的值 * * @param key * @param value */ public static void setString(String key, String value) { jedisCluster.set(key, value); } }
3. 调用工具类测试,发现连不上。之后修改多个文件后解决
3.1 删除每个文件夹中的appendonly.aof,dump.rdb,nodes.conf
3.2 修改redis.conf,增加如下内容
bind 192.168.92.130
protected-mode no
3.3 查看7000-7005端口是否放开
firewall-cmd --query-port=7000/tcp
3.4 如果3.3中结果为no,则放开对应端口
firewall-cmd --add-port=7000/tcp
3.5 代码里连接的host也改为虚拟机的ip,本文中为:192.168.92.130
3.6 重启集群,解决