1.下载redis的稳定版本

wget https://download.redis.io/redis-stable.tar.gz

2..安装redis软件

tar -xzvf redis-stable.tar.gz
cd redis-stable
make
make install

编译过程中提示报错,需要安装gcc

3.编译配置文件

7001服务

port 7001                          #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7001.pid    #修改PID文件名
dir /opt/redis-cluster/7001/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7001.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

7002服务

port 7002                         #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7002.pid    #修改PID文件名
dir /opt/redis-cluster/7002/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7002.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

7003服务

port 7003                         #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7003.pid    #修改PID文件名
dir /opt/redis-cluster/7003/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7003.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

7004服务

port 7004                         #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7004.pid    #修改PID文件名
dir /opt/redis-cluster/7004/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7004.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

7005服务

port 7005                        #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7005.pid    #修改PID文件名
dir /opt/redis-cluster/7005/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7005.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

7006服务

port 7006                        #修改端口
bind 10.3.10.20                    #修改为对应主机IP地址
daemonize yes
pidfile /var/run/redis_7006.pid    #修改PID文件名
dir /opt/redis-cluster/7006/data   #定义存储文件夹
cluster-enabled yes
cluster-config-file nodes-7006.conf  #修改集群文件名
cluster-node-timeout 5000
appendonly yes

4.启动服务

1.拷贝redis-server到服务目录
cd /opt/redis-clustercp /opt/redis-cluster/redis-stable/src/redis-server  7001cp /opt/redis-cluster/redis-stable/src/redis-server  7002cp /opt/redis-cluster/redis-stable/src/redis-server  7003cp /opt/redis-cluster/redis-stable/src/redis-server  7004cp /opt/redis-cluster/redis-stable/src/redis-server  7005cp /opt/redis-cluster/redis-stable/src/redis-server  70062.启动服务./redis-server redis-7001.conf
./redis-server redis-7002.conf
./redis-server redis-7003.conf
./redis-server redis-7004.conf
./redis-server redis-7005.conf
./redis-server redis-7006.conf

5.安装集群所需的软件

yum install ruby rubygems -ygem install redis 升级rubygems gemcurl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm requirements
source /usr/local/rvm/scripts/rvmrvm install 2.4.0
rvm use 2.4.0gem install redis 以上安装防范,安装的rubygems gem版本太低,可以考虑源码安装,如下:
下载软件包
wget https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
解压缩
tar zxvf ruby-3.1.2.tar.gz
安装
cd ruby-3.1.2
./configure  --prefix=/opt/rubymake && make install
ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ln -s /opt/ruby/bin/gem /usr/bin/gem
查看版本
ruby -v 
安装rubygem redis依赖:
wget http://rubygems.org/downloads/redis-4.1.0.gem
gem install -l redis-4.1.0.gem
上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具复制到usr/local/redis-cluster目录下。那么这个ruby脚本工具在哪里呢?之前提到过,在redis源码解压文件的源代码里,即redis/src目录下的redis-trib.rb文件。
cd redis/src
cp redis-trib.rb /usr/local/redis-cluster

6.组建集群

cd /opt/redis-cluster/redis-stable/src
./redis-cli --cluster create 10.3.10.20:7001 10.3.10.20:7002 10.3.10.20:7003 10.3.10.20:7004 10.3.10.20:7005 10.3.10.20:7006 --cluster-replicas 1

集群输出如下

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.3.10.20:7005 to 10.3.10.20:7001
Adding replica 10.3.10.20:7006 to 10.3.10.20:7002
Adding replica 10.3.10.20:7004 to 10.3.10.20:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cf656ddf619b566a48d15b7f076e6d773d646895 10.3.10.20:7001slots:[0-5460] (5461 slots) master
M: acb4146d7e15c2799cc1c9bb0d34d02e568bde13 10.3.10.20:7002slots:[5461-10922] (5462 slots) master
M: 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3 10.3.10.20:7003slots:[10923-16383] (5461 slots) master
S: 8345ec77e8795dcce9dde5c61bf10939150c290a 10.3.10.20:7004replicates acb4146d7e15c2799cc1c9bb0d34d02e568bde13
S: 66c43b50c6e8fc8101502d7466379899305df17f 10.3.10.20:7005replicates 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3
S: ab8f6e8c1ffcf48d6903b15fbe58e6ce4e2ad117 10.3.10.20:7006replicates cf656ddf619b566a48d15b7f076e6d773d646895
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.3.10.20:7001)
M: cf656ddf619b566a48d15b7f076e6d773d646895 10.3.10.20:7001slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 8345ec77e8795dcce9dde5c61bf10939150c290a 10.3.10.20:7004slots: (0 slots) slavereplicates acb4146d7e15c2799cc1c9bb0d34d02e568bde13
M: acb4146d7e15c2799cc1c9bb0d34d02e568bde13 10.3.10.20:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3 10.3.10.20:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: ab8f6e8c1ffcf48d6903b15fbe58e6ce4e2ad117 10.3.10.20:7006slots: (0 slots) slavereplicates cf656ddf619b566a48d15b7f076e6d773d646895
S: 66c43b50c6e8fc8101502d7466379899305df17f 10.3.10.20:7005slots: (0 slots) slavereplicates 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7.组建集群报错

[ERR] Node 10.3.10.20:7001 DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user. In this mode connections are only accepted from the loopback interface. If you want to connect from exters to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SUREt publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and thg the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a an authentication password for the default user. NOTE: You only need to do one of the above things in order for the servaccepting connections from the outside.

解决方式

在配置文件增加

masterauth "redis"
requirepass "redis"

重启redis进程

之后使用如下命令创建集群

./redis-cli --cluster create 10.3.10.20:7001 10.3.10.20:7002 10.3.10.20:7003 10.3.10.20:7004 10.3.10.20:7005 10.3.10.20:7006 --cluster-replicas 1 -a htjs

8.集群验证

./redis-cli -c -h 10.3.10.20 -p 7001 -a htjs

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.3.10.20:7001> 
10.3.10.20:7001> 
10.3.10.20:7001> 
10.3.10.20:7001> 
10.3.10.20:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:480
cluster_stats_messages_pong_sent:471
cluster_stats_messages_sent:951
cluster_stats_messages_ping_received:466
cluster_stats_messages_pong_received:480
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:951
total_cluster_links_buffer_limit_exceeded:0
10.3.10.20:7001> cluster nodes
8345ec77e8795dcce9dde5c61bf10939150c290a 10.3.10.20:7004@17004 slave acb4146d7e15c2799cc1c9bb0d34d02e568bde13 0 1658303013066 2 connected
acb4146d7e15c2799cc1c9bb0d34d02e568bde13 10.3.10.20:7002@17002 master - 0 1658303013568 2 connected 5461-10922
419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3 10.3.10.20:7003@17003 master - 0 1658303014572 3 connected 10923-16383
ab8f6e8c1ffcf48d6903b15fbe58e6ce4e2ad117 10.3.10.20:7006@17006 slave cf656ddf619b566a48d15b7f076e6d773d646895 0 1658303012564 1 connected
66c43b50c6e8fc8101502d7466379899305df17f 10.3.10.20:7005@17005 slave 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3 0 1658303014069 3 connected
cf656ddf619b566a48d15b7f076e6d773d646895 10.3.10.20:7001@17001 myself,master - 0 1658303014000 1 connected 0-5460
10.3.10.20:7001>

二.手工创建redis-cluster集群

(1)redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis5.05版本;

(2)redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;

(3)Redis 集群会将用户数据分散保存至各个节点中,突破单机 Redis 内存最大存储容量。集群引入了 哈希槽slot的概念,其搭建完成后会生16384个哈希槽slot,同时会根据节点的数量大致均等的将16384个哈希槽映射到不同的节点上。当用户存储key-value时,集群会先对key进行CRC16校验然后对16384取模来决定key-value放置哪个槽,从而实现自动分割数据到不同的节点上。故每个Redis集群理论上最多可以有16384个节点。

(4)Redis 集群支持主从复制和故障恢复。集群使用了主从复制模型,每个主节点master应至少有一个从节点slave。假设某个主节点故障,其所有子节点会广播一个数据包给集群里的其他主节点来请求选票,一旦某个从节点收到了大多数主节点的回应,那么它就赢得了选举,被推选为主节点,负责处理之前旧的主节点负责的哈希槽。
具体操作

1.启动redis服务

6379节点启动成功,第一次启动时如果没有集群配置文件,它会自动创 建一份,文件名称采用cluster-config-file参数项控制,建议采用node-{port}.conf格式定义,通过使用端口号区分不同节点,防止同一机器下多个节点彼此覆盖,造成集群信息异常。如果启动时存在集群配置文件,节点会使用配置文件内容初始化集群信息。启动过程如图
集群模式的Redis除了原有的配置文件之外又加了一份集群配置文件。当集群内节点信息发生变化,如添加节点、节点下线、故障转移等。节点会自动保存集群状态到配置文件中。需要注意的是,Redis自动维护集群配置文件,不要手动修改,防止节点重启时产生集群信息错乱。
./redis-server redis-7001.conf
./redis-server redis-7002.conf
./redis-server redis-7003.conf
./redis-server redis-7004.conf
./redis-server redis-7005.conf
./redis-server redis-7006.conf
2.节点握手
节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命 令:cluster meet{ip}{port}。
图中执行的命令是:cluster meet127.0.0.16380让节点6379和6380节点进 行握手通信。cluster meet命令是一个异步命令,执行之后立刻返回。内部发起与目标节点进行握手通信
1)节点6379本地创建6380节点信息对象,并发送meet消息。
2)节点6380接受到meet消息后,保存6379节点信息并回复pong消息。
3)之后节点6379和6380彼此定期通过ping/pong消息进行正常的节点通
信。
这里的meet、ping、pong消息是Gossip协议通信的载体。

./redis-cli -h 10.3.10.20 -a htjs -p 700110.3.10.20:7001> cluster meet 10.3.10.20 700210.3.10.20:7001> cluster meet 10.3.10.20 700310.3.10.20:7001> cluster meet 10.3.10.20 700410.3.10.20:7001> cluster meet 10.3.10.20 700510.3.10.20:7001> cluster meet 10.3.10.20 7006
节点建立握手之后集群还不能正常工作,这时集群处于下线状态,所有的数据读写都被禁止

3.分配槽位

Redis集群把所有的数据映射到16384个槽中。每个key会映射为一个固定的槽,只有当节点分配了槽,才能响应和这些槽关联的键命令。通过cluster addslots命令为节点分配槽,只在主节点操作,从节点不操作。
redis-cli -h 10.3.10.20 -p 7001 -a htjs cluster addslots {0...5461}
redis-cli -h 10.3.10.20 -p 7002 -a htjscluster addslots {5462...10922}
redis-cli -h 10.3.10.20 -p 7003 -a htjs cluster addslots {10923...16383}
把16384个slot平均分配给7001、7002、7003三个节点。执行cluster info查看集群状态。

所有的槽都已经分配给节点,执行cluster nodes命令可以看到节点和槽的分配关系。
4.分配从节点,主从复制

Redis 集群成功上线之后,要给主节点指定从节点,这样实现集群的高可用。使用 cluster replicate {nodeId}命 命令手动给从节点配置主节点。其中命令执行必须在对应的 从节点上执行,nodeId是要复制主节点的节点ID。

./redis-cli -h 10.3.10.20 -a htjs -p 700410.3.10.20:7004>cluster replicate cf656ddf619b566a48d15b7f076e6d773d64689510.3.10.20:7005>cluster replicate acb4146d7e15c2799cc1c9bb0d34d02e568bde1310.3.10.20:7006>cluster replicate 419bfdab0a4cfcfa3ee78ef8bfaad59f968cbee3
以上依照Redis协议手动建立一个集群。它由6个节点构成,3个主节点负责处理槽和相关数据,3个从节点负责故障转移。

redis集群的安装部署相关推荐

  1. Redis集群如何安装

    Redis集群如何安装 集群 安装步骤 安装gcc 解压redis 包 make make install 目录解析 创建redis-cluster 修改节点配置 star-all脚本 shutdow ...

  2. Hadoop伪分布式集群的安装部署

    Hadoop伪分布式集群的安装部署Hadoop伪分布式集群的安装部署 首先可以为Linux虚拟机搭建起来的最初状态做一个快照,方便后期搭建分布式集群时多台Linux虚拟机的准备. 一.如何为虚拟机做快 ...

  3. Apache HAWQ集群的安装部署

    最近Pivotal公司发布了Apache HAWQ的企业版HDB 2.0,因功能强大,性能出色,很多人已经迫不及待想要安装来玩玩了.今天我们就来聊聊怎么部署强大的HAWQ 2.0吧. 企业版的HAWQ ...

  4. Redis集群命令行部署工具

    使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT.conf文件,也和工具放在同一目录下(部署时PORT会被替 ...

  5. redis集群环境安装(参照redis中文官网,中间遇到了一些问题,so,记录一下)

    创建步骤 01. 准备环境 # yum install gcc # yum install ruby # yum install ruby-devel.x86_64 # yum install rub ...

  6. 在现有K8S集群上安装部署JenkinsX

    在2018年年初,Jenkins X首次发布,它由Apache Groovy语言的创建者Jame Strachan创建.Jenkins X 是一个高度集成化的 CI/CD 平台,基于 Jenkins ...

  7. redis集群linux安装教程,linux下redis集群的原生安装方式部署

    一.部署架构如下 每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从. 二.准备6个节点配置文件 在172.28.18.75上操作 cd /etc/redis ...

  8. 【Storm】Storm简介及Storm集群的安装部署

    1.Storm概述 (1)Storm简介 Storm最早是由BackType公司开发的实时处理系统,底层由Clojure实现.Clojure也是一门基于JVM的高级面向函数式的编程语言.2011年Tw ...

  9. ceph集群简单安装部署(Ubuntu14环境)

    本次测试.为了快速地安装,所以把目录而非整个硬盘用于 OSD 守护进程.后面的 后面的测试还将会有使用硬盘来作为OSD数据盘 测试机规划 节点名称 IP 地址 部署进程 系统盘 数据盘 ceph1 e ...

最新文章

  1. [翻译]一步步教你配置SQL SERVER合并复制(五)配置Publisher(上)
  2. java jdkxp32_java运行环境(jre-8u65-windows-i586) 官方安装版 32位
  3. JEPLUS平台首页规划简单介绍——JEPLUS软件快速开发平台
  4. HBuilder、HBuilderX连接夜神模拟器
  5. 少儿编程100讲轻松学python(六)-pycharm怎么汉化?
  6. easyui确认取消弹窗_Jquery EasyUI中弹出确认对话框
  7. HashMap 和 ConcurrentHashMap 的区别
  8. (转载)一片文章带你理解再生核希尔伯特空间(RKHS)以及各种空间
  9. 蓝牙冒充攻击(BIAS),无线安全不可忽视
  10. 雷允上药业百年老店回春
  11. 币种对应的转换因子(处理日元台币…
  12. 用PHOTOSHOP给图片打马赛克
  13. Docker的volumes踩坑
  14. chrome 谷歌浏览器模拟各种手机设置userAgent
  15. 图片大小自适应垂直居中的方法
  16. uml通信图画法_[UML]UML系列——协作图(通信图)collaboration diagram
  17. Python 电影评分分析
  18. 大数据可视化热门工具
  19. 【分享贴】硬件电路设计思路
  20. limma:RNA-Seq Data

热门文章

  1. HSDPA(WCDMA增强技术)(转)
  2. 华为3g网卡 linux,华为Huawei E1550 HSDPA 3G网卡在Ubuntu 10.04 LTS中的使用
  3. 彻底解决中文乱码,然后升级后英文改为中文
  4. 小米mix3 android os是什么,小米MIX 3
  5. MySQL下载和安装 win10 64位 MySQL8.0
  6. EVE-NG 添加win7 镜像
  7. 我的世界重置服务器文件指令,我的世界spigot后台文件指令解读
  8. Linux下实现文件实时同步(rsync命令+rsync作为服务+xinetd托管rsync)
  9. 数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现
  10. Linux —— tftp 使用