为什么要搭建redis集群
Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB。Redis更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。
容错机制-投票
选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作. 故障节点对应的从节点自动升级为主节点
下面开始安装
(1)安装gcc
Redis 是 c 语言开发的。安装 redis 需要 c 语言的编译环境。如果没有 gcc 需要在线安装。
yum install gcc-c++
(2)使用yum命令安装 ruby (ruby脚本是来实现集群搭建)
yum install ruby
yum install rubygems
(3)然后再创建一个文件夹redis,在redis文件夹中下载redis压缩包
mkdir redis
(4)下载后解压,然后进入解压后的redis文件夹编译redis
tar -zxvf redis-3.2.8.tar.gz
make
看到如下图就表示编译成功
(5)在redis下创建rediscluster目录,在rediscluster目录下创建redis1至redis6这6个目录
(6)在redir1至redis6中分别安装redis实例
make install PREFIX=/usr/local/redis/rediscluster/redis-1 (这是第一个,后面的安装一样)
(7)实例安装完成后,将redis-3.2.8目录下的redis.conf复制到每个redis下的bin目录中
[root@localhost redis-3.2.8]# cp redis.conf /usr/local/redis/rediscluster/redis-1/bin (这是第一个,后面的安装一样)
(8)复制完成后,依次进入到复制的redis.conf中修改运行端口
然后再把cluster-enabled yes 前的注释去掉
61行注释掉
80行yes改为no
(9)分别启动每个实例,看到下面图片就是启动成功了,然后分别把另外5个都启动
./redis-server redis.conf
(10)查看是否都启动起来了
ps -ef | grep redis
(11)上传redis-3.0.0.gem ,安装 ruby用于搭建redis集群的脚本
redis-3.0.0.gem下载
注意:
1.进入redis源码目录中的src目录下执行下面的命令
2.阿里云服务器要开启相应的端口,不然会报Error
./redis-trib.rb create –replicas 1 公网地址:7001 公网地址:7002 公网地址:7003 公网地址:7004 公网地址:7005 公网地址:7006
出现下列信息就行了 M表示主 S表示从
(12)最后我们做一个小demo(我用的是idea)
引入依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5 <parent>
6 <groupId>org.springframework.boot</groupId>
7 <artifactId>spring-boot-starter-parent</artifactId>
8 <version>2.2.1.RELEASE</version>
9 <relativePath/> <!-- lookup parent from repository -->
10 </parent>
11 <groupId>com.example.rediscluster</groupId>
12 <artifactId>redisclusterdemo</artifactId>
13 <version>0.0.1-SNAPSHOT</version>
14 <name>redisclusterdemo</name>
15 <description>Demo project for Spring Boot</description>
16
17 <properties>
18 <java.version>1.8</java.version>
19 </properties>
20
21 <dependencies>
22 <dependency>
23 <groupId>org.springframework.boot</groupId>
24 <artifactId>spring-boot-starter-data-redis</artifactId>
25 </dependency>
26 <dependency>
27 <groupId>redis.clients</groupId>
28 <artifactId>jedis</artifactId>
29 <version>2.9.0</version>
30 </dependency>
31 <dependency>
32 <groupId>org.springframework.boot</groupId>
33 <artifactId>spring-boot-starter-web</artifactId>
34 </dependency>
35
36 <dependency>
37 <groupId>org.springframework.boot</groupId>
38 <artifactId>spring-boot-starter-test</artifactId>
39 <scope>test</scope>
40 <exclusions>
41 <exclusion>
42 <groupId>org.junit.vintage</groupId>
43 <artifactId>junit-vintage-engine</artifactId>
44 </exclusion>
45 </exclusions>
46 </dependency>
47 </dependencies>
48
49 <build>
50 <plugins>
51 <plugin>
52 <groupId>org.springframework.boot</groupId>
53 <artifactId>spring-boot-maven-plugin</artifactId>
54 </plugin>
55 </plugins>
56 </build>
57
58</project>
59
60
61
然后配置文件
最后测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 1package com.example.rediscluster.redisclusterdemo;
2
3import org.junit.jupiter.api.Test;
4import org.springframework.beans.factory.annotation.Autowired;
5import org.springframework.boot.test.context.SpringBootTest;
6import org.springframework.data.redis.core.HashOperations;
7import org.springframework.data.redis.core.RedisTemplate;
8
9import static org.junit.jupiter.api.Assertions.*;
10
11
12@SpringBootTest
13public class RedisTest {
14
15 @Autowired
16 private RedisTemplate redisTemplate;
17
18
19 @Test
20 public void test1(){
21 System.out.println(redisTemplate.hasKey("name"));
22 redisTemplate.opsForValue().set("name", "123214");
23 String name = (String) redisTemplate.opsForValue().get("name");
24 System.out.println(name);
25 redisTemplate.opsForValue().set("name2", "123214");
26 String name2 = (String) redisTemplate.opsForValue().get("name");
27 System.out.println(name2);
28 redisTemplate.opsForValue().set("name3", "123214");
29 String name3 = (String) redisTemplate.opsForValue().get("name");
30 System.out.println(name3);
31 redisTemplate.opsForValue().set("name4", "123214");
32 String name4 = (String) redisTemplate.opsForValue().get("name");
33 System.out.println(name4);
34 HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
35 hashOperations.put("user", "test", "测试");
36 System.out.println(hashOperations.get("user", "test"));
37 }
38
39}
40
41
步云雷