在搭建前,我们先用vmware创建3台虚拟机,并确保它们相互之间能够ping通。

1. redis源码安装

1.1 编译安装

apt install gcc make

wget http://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make
make PREFIX=/usr/local/redis install

1.2 配置文件

mkdir /usr/local/redis/conf
mkdir /usr/local/redis/data
cp redis.conf sentinel.conf /usr/local/redis/conf/
vim /usr/local/redis/conf/redis.conf #### 配置文件 ####
#bind 127.0.0.1
protected-mode no
daemonize yes
logfile "6379.log" # 指定日志文件名
save 3600 1 # 开启RDB
save 300 100
save 60 10000
dir /usr/local/redis/data # 日志、rdb和aof文件会存放在指定的工作目录下
appendonly yes # 开启AOF
port 6379
pidfile "/var/run/redis-6379.pid"
dbfilename "dump-6379.rdb" # 指定存储数据的文件名
#############

1.3 启动服务

# 启动服务
sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
# 启动客户端
/usr/local/redis/bin/redis-cli

2. 主从搭建

我们3台虚拟机的ip分别是:192.168.10.128、192.168.10.129、192.168.10.130,我们使用192.168.10.128作为master,其余两台作为slave。修改两台slave虚拟机上的配置文件:

vim /usr/local/redis/conf/redis.conf
#### 配置文件 ####
replicaof 192.168.10.128 6379
#################

然后重启服务,完成主从搭建。可以通过写数据的方式来验证是否能成功同步。

3. 哨兵搭建

我们需要在这3台虚拟机上启动3个哨兵实例以搭建哨兵集群,我们将相应的配置文件修改如下:

vim /usr/local/redis/conf/sentinel.conf
#### 配置文件 ####
#bind 0.0.0.0
protected-mode no
daemonize yes
logfile "26379.log"
dir /usr/local/redis/data
sentinel monitor mymaster 192.168.10.128 6379 2 # 这里ip、port都是主节点的,2代表判定主节点客观下线的哨兵数量
#################

然后分别启动3个哨兵服务:

/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf

完成后可以通过杀死主节点redis实例的方式,来验证哨兵选主的过程。

4. 集群搭建

Redis Cluster的最小集群模式是三主三从模式,也就是需要六台机器,这里我们通过在每台虚拟机上起两个redis服务来实现。

先将之前的redis实例、哨兵实例都kill掉,将之前从节点下面的配置项注释掉:

#replicaof 192.168.10.128 6379

然后在每台虚拟机上复制一份配置文件,对所有配置文件添加或修改相应的配置(复制的文件将6379的地方改为6380):

cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6380.conf
#### 配置文件 ####
cluster-enabled yes
cluster-config-file nodes-6379.conf # 生成在dir目录下
cluster-node-timeout 5000 port 6379
pidfile "/var/run/redis-6379.pid"
logfile "6379.log"
dbfilename "dump-6379.rdb"
appendfilename "appendonly-6379.aof"
#################

然后我们在每台虚拟机上启动2个实例:

sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
sudo /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf

接着可以在任意一台虚拟上进行集群的创建:

/usr/local/redis/bin/redis-cli --cluster create
192.168.10.128:6379 192.168.10.128:6380 192.168.10.129:6379
192.168.10.129:6380 192.168.10.130:6379 192.168.10.129:6380 --cluster-replicas 1

使用以下命令检查集群:

/usr/local/redis/bin/redis-cli --cluster check 192.168.10.128:6379

使用以下命令连接到集群:

/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6379

4.1 集群slot迁移

对照上图,下面的语句的作用是通过连接到192.168.10.128:6379实例,将192.168.10.130:6379上的1000个slots迁移到192.168.10.128:6379实例。

redis-cli --cluster reshard 192.168.10.128:6379 --cluster-from 0951e8847478bb40804a64b2924c2e857e363997 --cluster-to b707dc738b67c22744081e0cded911d8feaf83bb --cluster-slots 1000 --cluster-yes

然后重新执行下面语句检查集群,发现已经迁移成功:

/usr/local/redis/bin/redis-cli --cluster check 192.168.10.128:6379

4.2 集群扩容

我们在192.168.10.128上再复制两份配置文件:redis-6381.conf、redis-6382.conf,然后分别启动两个redis实例。我们将192.168.10.128:6381作为主节点添加进集群:

# 新节点在前,后面跟集群中的任一节点
/usr/local/redis/bin/redis-cli --cluster add-node 192.168.10.128:6381 127.0.0.1:6379

接着将192.168.10.128:6382作为192.168.10.128:6381的从节点添加进集群:

/usr/local/redis/bin/redis-cli --cluster add-node 192.168.10.128:6382 127.0.0.1:6379 --cluster-slave --cluster-master-id 45553352aba3cf8580e1eea2befefe6b5b8e8a1c

然后执行下面的命令重新分配哈希槽:

/usr/local/redis/bin/redis-cli --cluster rebalance --cluster-use-empty-masters 192.168.10.128:6379

4.3 集群缩容

删除192.168.10.128:6382节点:

/usr/local/redis/bin/redis-cli --cluster del-node 192.168.10.128:6382 efe50012f87c6a989105846c0ee555fca6d8d95a

如果再次添加该节点到集群报下面的错误:

[ERR] Node 192.168.XX.XX:XXXX is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

可以尝试删除nodes-6382.conf、dump-6382.rdb、appendonly-6382.aof这些文件(具体名字看你的配置文件)再尝试,若仍报错尝试清空数据库后再操作。

记一次redis集群搭建过程的更多相关文章

  1. Redis集群搭建过程

    我在搭建Redis集群过程中遇到了一些问题,现记录下来. Redis搭建需要在系统中安装好ruby.gem.zlib等工具,可参考https://www.cnblogs.com/wuxl360/p/5 ...

  2. Linux Redis集群搭建与集群客户端实现(Python)

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  3. Linux Redis集群搭建与集群客户端实现

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  4. Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...

  5. redis集群搭建及设置账户(转)

    Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...

  6. redis集群搭建(伪集群)

    1.准备工作 去官网下载好你想要安装的redis版本,下载链接 2.搭建步骤 输入命令yum install gcc-c++安装好gcc环境,将下载好的redis安装包上传到 /usr/local 解 ...

  7. 分享知识-快乐自己:redis集群搭建

    Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...

  8. redis集群搭建(简单简单)一台机器多redis

      redis集群搭建 在开始redis集群搭建之前,我们先简单回顾一下redis单机版的搭建过程 下载redis压缩包,然后解压压缩文件: 进入到解压缩后的redis文件目录(此时可以看到Makef ...

  9. 新手redis集群搭建

    redis集群搭建在开始redis集群搭建之前,我们先简单回顾一下redis单机版的搭建过程 下载redis压缩包,然后解压压缩文件:进入到解压缩后的redis文件目录(此时可以看到Makefile文 ...

  10. Redis集群搭建及选举原理

    redis集群简述 哨兵模式中如果主从中master宕机了,是通过哨兵来选举出新的master,在这个选举切换主从的过程,整个redis服务是不可用的.而且哨兵模式中只有一个主节点对外提供服务,因此没 ...

随机推荐

  1. 打开MASA Blazor的正确姿势2:组件总览

    官网文档按拼音罗列组件,且部分嵌套组件没有在导航栏内列出,不利于浏览查阅.本篇文章的主要目的,主要是对所有组件按大家习惯的方式进行分类,简要介绍组件,并建立跳转官方文档的链接.   一.导航布局类 1 ...

  2. vs code 关联gitee码云或github以及GIT 常用命令

    一.准备 1.本地安装vs code 和GIT源代码管理工具 2.配置vscode git全局变量 打开左下角设置-->点击用户-->搜索git.path-->settings.js ...

  3. P11_组件-button和image组件的基本用法

    其它常用组件 button 按钮组件 功能比 HTML 中的 button 按钮丰富 通过 open-type 属性可以调用微信提供的各种功能(客服.转发.获取用户授权.获取用户信息等) image ...

  4. 注释、input()、运算符、组织结构(顺序、选择、循环)

    注释 单行注释 # 多行注释 将三对引号之间的为多行注释 ''' ''' 中文编码的声明注释 #coding:gbk input()函数 接受来自用户的输入 返回值是str 值的存储 使用=对输入的值 ...

  5. JavaScript字符串的常用方法

    一.操作方法 我们也可将字符串常用的操作方法归纳为增.删.改.查,需要知道字符串的特点是一旦创建了,就不可变 增 这里增的意思并不是说直接增添内容,而是创建字符串的一个副本,再进行操作 除了常用+以及 ...

  6. 推荐一款新的自动化测试框架:DrissionPage!

    今天给大家推荐一款基于Python的网页自动化工具:DrissionPage.这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 request ...

  7. JZOJ 4872.集体照

    \(\text{Problem}\) 一年一度的高考结束了,我校要拍集体照.本届毕业生共分 \(n\) 个班,每个班的人数为 \(A_i\).这次拍集体照的要求非常奇怪:所有学生站一排,且相邻两个学生 ...

  8. CSS3--点击弹出菜单动画

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  9. 微信小程序扫码

    前言:微信小程序-->调用摄像头,扫描二维码/条形码,并获取信息,一连串操作,只需要调用微信小程序提供的 wx.scanCode API. 一.生成测试二维码 随便网上找个二维码生成器. 二.实 ...

  10. java开发环境搭建 (JDK卸载与安装、配置)

    一.window系统下java环境搭建 1.卸载JDK 查看安装目录:此电脑 -> 右键选择属性 -> 高级系统设置 -> 环境变量 -> 查看系统变量那一栏中的JAVA_HO ...