前文已经总结了Redis的安装与简单使用https://blog.youkuaiyun.com/sunroyfcb/article/details/80979399,本篇将模拟高并发环境下的Redis集群搭建。
首先要搞明白为什么要搭建Redis集群,毫无疑问是为了解决Redis动态扩容和高可用的实现。采用Redis分片是一个有效的实现Redis动态扩容的措施,分片可以根据哈希一致性算法将数据均匀的分配到不同的节点中,使数据分散保存,但是一旦一台Redis服务器宕机,整个分片都不能正常使用。哨兵机制的出现似乎完美的解决了宕机的问题,派一个哨兵来监视,将坏掉的物理机剔除,可初步实现高可用,但是哨兵若是发生宕机,则会影响整个Redis服务。因此,对这两者进行了一个结合升级,它不仅可以实现动态扩容,同时使用ruby组件代替哨兵,实现Redis的高可用。
下面来模拟搭建一个包含9个redis的集群,其中有三台主机,每台主机搭配两台从机:
一.在redis的根目录中创建文件夹cluster,并且在cluster文件夹中创建9个文件夹分别保存9个redis节点数据,分别为7000-7008
二.修改redis配置文件
1.将绑定IP注释
2.关闭保护模式
3.修改服务端口号
4.开启后台启动
5.修改PID保存位置
6.修改持久化文件路径
7.修改内存策略
8.开启集群配置
9.配置node节点的名称
10.开启集群超时设定
三.复制并修改其余配置文件
执行cp 7000/redis.conf 7001/redis.conf等八条命令,将配置文件复制到其余的文件夹中。将7000-7008中的配置文件修改正确,主要修改端口号和配置文件的名称等。可以采用命令“:%s/7000/7001/g”快速在文件中进行替换。
四.批量启动redis
五.编辑创建集群的命令,其中的2表示主机配置两台从机
./src/redis-trib.rb create --replicas 2 192.168.217.135:7000 192.168.217.135:7001 192.168.217.135:7002 192.168.217.135:7003 192.168.217.135:7004 192.168.217.135:7005 192.168.217.135:7006 192.168.217.135:7007 192.168.217.135:7008
六.执行命令集群创建命令,集群搭建成功
集群搭建完毕后,进行单元测试得到结果:
@Test
public void test04(){
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.217.135", 7000));
nodes.add(new HostAndPort("192.168.217.135", 7001));
nodes.add(new HostAndPort("192.168.217.135", 7002));
nodes.add(new HostAndPort("192.168.217.135", 7003));
nodes.add(new HostAndPort("192.168.217.135", 7004));
nodes.add(new HostAndPort("192.168.217.135", 7005));
nodes.add(new HostAndPort("192.168.217.135", 7006));
nodes.add(new HostAndPort("192.168.217.135", 7007));
nodes.add(new HostAndPort("192.168.217.135", 7008));
JedisCluster jedisCluster = new JedisCluster(nodes);
jedisCluster.set("Redis", "Redis集群入门");
String result = jedisCluster.get("Redis");
System.out.println(result);
}