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

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

*文件下载

——redis压缩包: 链接: https://redis.io/download
——redis-3.0.0.gem: 链接:https://pan.baidu.com/s/1IiKDQGxP4XU7wDEKxNoVkw
提取码:ignv

为什么要搭建Redis集群?

Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB。Redis更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。

Redis集群容错机制-投票

(1)选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作. 故障节点对应的从节点自动升级为主节点
(2)什么时候整个集群不可用(cluster_state:fail)?
如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态.

Redis-Cluster的搭建结构图

在这里插入图片描述

Redis-Cluster的搭建

1.首先在我们搭建Redis-Cluster时需要安装插件

yum install gcc-c++
yum install ruby
yum install rubygems

2.将redis源码包上传到 linux 系统 ,解压redis源码包

tar -zxvf redis

3.编译redis源码 ,进入redis源码文件夹

make

看到以下输出结果,表示编译成功
显示图上语句代表make完成
4.创建目录/usr/local/redis-cluster目录,安装6个redis实例

make install PREFIX=/usr/local/redis-cluster/redis1

/usr/local/redis-cluster/redis1
/usr/local/redis-cluster/redis2
/usr/local/redis-cluster/redis3
/usr/local/redis-cluster/redis4
/usr/local/redis-cluster/redis5
/usr/local/redis-cluster/redis6
注:如果提示下图说明没有进入redis的源码目录
在这里插入图片描述
成功则显示
在这里插入图片描述
5.复制配置文件 将 /redis/redis.conf 复制到每个redis下的bin目录下

cp -r redis.conf /usr/local/redis-cluster/redis n

6.修改每个redis节点的配置文件redis.conf
在这里插入图片描述
69行注释此IP
在这里插入图片描述
// 进行端口修改7001-7006
将88行的yes改为no
在这里插入图片描述
在这里插入图片描述
// 将第814行注释解开,并把yes

7.分别进入每个实例的bin目录下启动实例

./redis-server redis.conf

8.确保我们每个实例都启动起来

ps -ef | grep redis

成功后如图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191112200416806.png
9.上传redis-3.0.0.gem ,安装 ruby用于搭建redis集群的脚本,放在redis源码文件执行就行

gem install redis-3.0.0.gem

10.进入redis源码目录中的src目录

./redis-trib.rb create --replicas 1 虚拟机ip:7001 虚拟机ip:7002 虚拟机ip:7003 虚拟机ip:7004 虚拟机ip:7005 虚拟机ip:7006

成功如图
在这里插入图片描述
注:如果你的端口没有放开会出现两种情况,一种是ERROR,一种是join连接不上需要放开+1端口 //17001-17006

SpringDataRedis连接Redis集群
pom依赖
//引入依赖
<?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>
boot配置文件
spring:
  redis:
    cluster:
      nodes: 公网IP:7001,公网IP:7002,公网IP:7003,公网IP:7004,公网IP:7005,公网IP:7006
      max-redirects: 6
Test测试
// 测试
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"));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值