在阿里云上搭建redis高可用集群

为什么要搭建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

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

(4)下载后解压,然后进入解压后的redis文件夹编译redis

tar -zxvf redis-3.2.8.tar.gz

make

看到如下图就表示编译成功

在这里插入图片描述

(5)在redis下创建rediscluster目录,在rediscluster目录下创建redis1至redis6这6个目录
在阿里云上搭建redis高可用集群_第1张图片
(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行注释掉
在阿里云上搭建redis高可用集群_第2张图片
80行yes改为no
在阿里云上搭建redis高可用集群_第3张图片
(9)分别启动每个实例,看到下面图片就是启动成功了,然后分别把另外5个都启动

./redis-server redis.conf

在阿里云上搭建redis高可用集群_第4张图片
(10)查看是否都启动起来了

ps -ef | grep redis

在阿里云上搭建redis高可用集群_第5张图片
(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表示从
在阿里云上搭建redis高可用集群_第6张图片

(12)最后我们做一个小demo(我用的是idea)

引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example.rediscluster</groupId>
	<artifactId>redisclusterdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>redisclusterdemo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

然后配置文件

在阿里云上搭建redis高可用集群_第7张图片

最后测试

package com.example.rediscluster.redisclusterdemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;

import static org.junit.jupiter.api.Assertions.*;


@SpringBootTest
public class RedisTest {
     

	@Autowired
	private RedisTemplate redisTemplate;


	@Test
	public void test1(){
     
		System.out.println(redisTemplate.hasKey("name"));
		redisTemplate.opsForValue().set("name", "123214");
		String name = (String) redisTemplate.opsForValue().get("name");
		System.out.println(name);
		redisTemplate.opsForValue().set("name2", "123214");
		String name2 = (String) redisTemplate.opsForValue().get("name");
		System.out.println(name2);
		redisTemplate.opsForValue().set("name3", "123214");
		String name3 = (String) redisTemplate.opsForValue().get("name");
		System.out.println(name3);
		redisTemplate.opsForValue().set("name4", "123214");
		String name4 = (String) redisTemplate.opsForValue().get("name");
		System.out.println(name4);
		HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
		hashOperations.put("user", "test", "测试");
		System.out.println(hashOperations.get("user", "test"));
	}

}

步云雷

你可能感兴趣的:(在阿里云上搭建redis高可用集群)