使用三台云服务器搭建真正的Redis集群
三台云服务器搭建redis集群#
今天花了一天的时间弄集群redis;遇到了很多坑,从头开始吧
环境讲解:
两台配置:1核2G,另一台:1核1G;
操作系统:Centos 7.6
Redis:3.2.12
Ruby:2.3.4
由于是云服务器所以默认安装了JDK1.8和yum以及gcc,如果不是云服务器的用户请试试云服务器吧!还是很方便的
了解什么是Redis集群(可跳过):
答:集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。
集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。
集群的作用,可以归纳为两点:
数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出……。高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。
值得一提的是这几天的面试遇到一个很有意思的问题(本人亲身经历):
面试官:让你设计一个抢票或者秒杀或者红包系统你该如何实现?
我:首先应该加锁,然后加redis的缓存和预热。。。
面试官:没了?
我:我只知道这么多。
面试官:那如果是在多个集群下呢?
我:分布式锁!
面试官欣慰的点头说:那你知道分布式锁的实现方式吗?
我:zookeeper和redis的redisson。
面试官:redis的分布式集群玩过吗?
我:没有。。。
面试官:有空去玩玩吧,既然你没玩过那我也不必要和你啰嗦了。
到此我的奇怪的经历又上涨了!于是今天买了两个测试服务器来玩玩redis的集群;
这是我的使用场景,但是现实中和面试的例子差不多,都是有需求才去接触,(可能我比较懒~haha)
当然今天并不是说面试,我们言归正传;
搭建,启动redis集群#
1、安装Redis(三台服务器都需要安装)
方式一:
一台全新的服务器首先需要配置密码和SSH登录此处我跳过;
接着可以更新yum(服务器的yum都是安装好的)
yum update
在云服务器中的安装则是很简单的;
yum install redis
安装需要提示输入y直接输入!
接着安装完成后查看安装情况:
redis-server -v
或者
redis-server --version
都可以查看当前安装的redis版本
方式二:
直接从官网下载gz文件
一般都是3.2.12版本。所以此处以3.2.12版本为例;
下载好后上传到云服务器,并且解压后,make Install 安装
redis安装好后,有五个文件在linux文件系统的/usr/bin中
- redis-benchmark
- redis-check-aof
- redis-check-rdb
- redis-cli
- redis-sentinel
- redis-server
还有一个配置文件在/etc中:
- redis.conf
现在我们在/usr/local下创建一个文件名叫redis
cd /usr/local
mkdir redis
接着创建两个文件夹:
cd redis
mkdir redis-01
mkdir redis-02
接着将上述的文件分别复制到这两个01和02文件内,
这是为了方便我们更好的在本机调用:
2、安装Ruby(只需要一台安装即可)
很多小伙伴会有疑问说为什么需要ruby呢?
因为在redis/src中有一个文件叫做redis-trib.rb,这个文件就是作者用Ruby写的,用来搭建redis集群(redis3.0版本时才开始支持集群),redis-trib.rb的后缀就是Ruby的简写,所以想要搭建redis集群需要有一个能执行.rb这种文件的运行环境,这个环境就是Ruby。
接着又会有小伙伴说:这个安装简单!直接 yum install ruby!
你要是这么想的话,会浪费你将近5-10分钟的时间(取决你的网速)因为你需要安装后升级它!
升级的教程我直接用别人的了:[Ruby升级教程](https://www.cnblogs.com/qize/p/11394841.html](https://www.cnblogs.com/qize/p/11394841.html "Ruby升级教程") 在此也感谢这个博主所写的经验教程
一般云服务器如果安装的redis是3.2.12,那么你的ruby使用yum安装的话一定是2.0版本的!
这个和我们使用的ruby操作redis集群不适应!
所以人生苦短:
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.5.tar.gz
接着解压下载好的ruby:
tar -xzvf ruby2.4.5
接着cd ruby2.4.5执行下面的命令
./configure –-prefix=/usr/local/ruby -prefix
是将ruby安装到指定目录,也可以自定义
make && make install
检查Ruby安装情况:
ruby -v
不出意外应该是可以显示版本的,之后安装这个gem的依赖
yum install rubygems
接着我们需要继续安装Redis操作工具
gem install redis
3、检查配置文件(三台服务器都需要)
上述说到我们有两个文件:redis-01和redis-02,应该是这样的

现在需要修改每一个配置文件:
daemonize yes
port 6379(每台机器的端口可以指定为两个;比如6379和6380)
dbfilename dump-此处添加你的端口.rdb
pidfile /var/run/redis-此处添加你的端口.pid
requirepass 在此输入你的密码
masterauth 输入和上述密码一样的
cluster-enabled yes 启用集群
cluster-config-file nodes-此处添加你的端口.conf
cluster-node-timeout 15000(默认你过期时间15s)
此处网上有很多提示说你的bind属性为什么不加呢?
很多小伙伴加了bind属性反而不能运行redis,刚开始我也犯了这样的错误,后来我发现,云服务器上的redis
其实不需要加bind属性绑定端口也可以跑集群。
现在我一共是三台机器:每台上面有两个redis实例,都分别绑定了6379和6380端口
至此我们的配置文件就结束了。
4、放行端口(三台服务器都需要)
根据不同云服务器供应商需要进入不同的控制台管理界面;
但是每台服务器的安全组都需要开放对应的端口:
我的三台服务器我就需要为每台服务器开启入口6379和6380端口;
但是千万不要以为这就结束了!
redis集群还需要一个总线端口,这个总线端口是你redis实例占用端口+10000;
比如我一台服务器开了两个redis实例:6379和6380,那么他的总线端口救为16379和16380;
需要在安全组同时开放这两个端口。
启动集群
回到我们刚刚安装redis的那台服务器,现在我们来试试启动redis集群
要启动redis;需要找到你的 redis-trib.rb 这个文件
一般云服务器的安装redis是没有这个文件的,但是如果你用解压安装的redis是有集群的文件
所以需要你自己从官网拷贝比如我的是3.2.12就需要从官网下载。
具体安装见方式二
之后再redis/src下找到 redis-trib.rb 这个文件
把他复制到/usr/local/redis里面
接下来重中之重的是需要清空/var/lib/redis里面的所有rdb和conf文件!
之后就可以启动三个服务器上的redis了
启动完成可以用 ps -ef|grep redis 查看实例启动详情
一般启动成功是这个样子

之后回到安装了ruby的服务器:
cd /usr/local/redis
执行下面命令
./redis-trib.rb create --replicas 1 第一台服务器公网IP地址:6379 第一台服务器公网IP地址:6380 第二台服务器公网IP地址:6379 第二台服务器公网IP地址:6380 第三台服务器公网IP地址:6379 第三台服务器公网IP地址:6380
至此服务器应该是启动成功了。
使用三台云服务器搭建真正的Redis集群的更多相关文章
- Ubuntu16.04.1上搭建分布式的Redis集群
为什么要集群: 通常为了,提高网站的响应速度,总是把一些经常用到的数据放到内存中,而不是放到数据库中,Redis是一个很好的Cache工具,当然了还有Memcached,这里只讲Redis.在我们的电 ...
- 带你自行搭建虚拟机和Redis集群环境,值得收藏!
前言: 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本文会手把手带着大家搭建一套 Redis 集群环境,Re ...
- Ubuntu16.04.1上搭建分布式的Redis集群,并使用C#操作
为什么要集群: 通常为了,提高网站的响应速度,总是把一些经常用到的数据放到内存中,而不是放到数据库中,Redis是一个很好的Cache工具,当然了还有Memcached,这里只讲Redis.在我们的电 ...
- 在linux环境下安装redis并且搭建自己的redis集群
此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...
- Hadoop集群搭建:用三台云服务器搭建HA集群(过程记录和分享)
该文主要记录了自己用云服务器搭建集群的过程,也分享一些自己遇到的问题和解决方法.里面可能提及一些自己的理解,可能不够准确,希望大家能够指正我,谢谢. 1.什么是HA集群 HA :High Availa ...
- 云主机搭建Kubernetes 1.10集群
一.基础环境 云主机 下载软件包 将所有软件下载至/data目录 # 链接:https://pan.baidu.com/s/13DlR1akNBCjib5VFaIjGTQ 密码:1l69 # 链接:h ...
- redis 记一次搭建高可用redis集群过程,问题解决;Node 192.168.184.133:8001 is not configured as a cluster node
------------恢复内容开始------------ 步骤 1:每台redis服务器启动之后,需要将这几台redis关联起来, 2: 关联命令启动之后 报错: Node 192.168.184 ...
- Redis Cluster(Redis集群)的搭建和使用
Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...
- Windows 环境搭建Redis集群
环境以及引用资料 1.windows server 2008 r2 enterprise (木有办法,公司的服务器全是如此,就这种环境搭建吧) 2.redis官方资料下载: https://redi ...
随机推荐
- 三、$JavaScript(1)
1.闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以 ...
- Java通过循环结构和switch实现简易计算器
Java通过循环结构和switch实现简易计算器 可以循环计算,通过调用函数本身来实现重新计算 package com.shenxiaoyu.method; import java.util.Scan ...
- Python-pygame案例小飞机
import pygame, sys from pygame.locals import * import random '''飞机躲避导弹''' # 玩家 class Player(pygame.s ...
- [SD.TEAM语录]AC语录
决定做了就要马上去做,不要有任何犹豫 本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士) 转载自[宝宝巴士SuperDo团队] 原文链接: http:// ...
- idea本地Maven仓库不能下载依赖jar包的解决方案
1.确认maven是否正正常安装,是否配置了环境变量,可以通过命令 mvn -version 看是否显示maven的版本信息. 2.检查maven的setting.xml配置文件中本地仓库位置配置是否 ...
- 02 . Redis哨兵
Redis高可用概述 在 Web 服务器中,高可用 是指服务器可以 正常访问 的时间,衡量的标准是在 多长时间 内可以提供正常服务(99.9%.99.99%.99.999% 等等).在 Redis ...
- AES实现财务数据的加密解密存储
需求背景 众所周知,金融行业有各种各样的财务报表,有些报表涉及到公司财务或经营相关的敏感数据,需要进行加密存储,只有掌握密钥的用户才能看到解密后的数据.注意,这里所说的加密并不是针对整个数据库或者表全 ...
- winxp无法访问win10教育版共享资源的问题处理
一.问题来源: dell5460笔记本上一个winxp系统虚拟机,访问一台lenovoT470笔记本win10教育版系统上的共享资源(使用命令行方式:net use s: \\172.18.45.10 ...
- 当微信小程序遇到云开发,再加上一个类似 ColorUI 的模板,人人都能做小程序了
作为一个 Java 程序员,早就想尝试一把微信小程序,但是一直苦于没有想法,再加上做一个漂亮的页面实在不太擅长. 由于自己比较喜欢历史,经常看历史方面的书.在一次梳理中国现有的朝代时,突然想到,要是可 ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...