基于CentOS7搭建Redis集群

一. 简单描述Redis集群原理:

  • Redis集群通过一致性哈希算法将16384个slot(槽)均匀分布在每个节点上,每个主节点又至少有一个从节点保证了该主节点的高可用。当将值存入redis时会将该数据进行哈希后分配到对应slot的节点上保存,

  • redis cluster是去中心化的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。
    入下图,有三个主节点Master,每个节点又对应的Slot段(三个节点slot共16384),每个Master节点又对应一个子节点


    image.png
  • 集群会为每一个分片的主节点,对应一个从节点。 每个节点默认会随机向5个节点发送ping消息,默认每秒10次,收到ping消息后返回pong消息做回复,最后通过这种随机的消息交换,最终每个节点将获得所有信息实现slaveof功能,同时当主节点down,实现sentinel哨兵的自动failover切换功能,当某个主节点挂掉,从节点会接管主节点的工作,并告知其他节点自己变为主节点,

二. 搭建redis对于ruby的依赖:

如果选择搭建的Redis版本是5以下(本文redis为4.0.0)是需要安装ruby作为依赖的,因为redis5以下版本的集群管理器redis-trib.rb 是根据ruby语言编写,但在redis5以后集群管理改用了C语言。注:不同版本redis对于ruby版本也有限制,入本文使用redis4.0.0要求ruby版本在2.3.0以上!

三. 开始搭建redis集群:

1.linux环境下载并安装redis

安装wget :wget用于linux地址下载redis安装包
yum -y install wget

安装gcc编辑器
yum -y install gcc automake autoconf libtool make

选择路径下载redis,下载地址可能自行找,本文使用redis4.0.0
cd /usr/local/software
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
下载后在当前路径下会生成下图压缩包

image.png

下载完成后解压后生成对应文件
tar -zxvf redis-4.0.0.tar.gz

image.png

切换至程序目录
cd redis-4.0.0

make编译redis
make MALLOC=libc

编译后,会在src目录下生成下图中绿色可执行文件


image.png

最后安装Redis:
make install

2.redis环境有了,开始准备各个集群文件夹

将要模拟搭建redis集群6节点(端口7001-7006),3个主节点,3个从节点,因为我在两个虚拟机上搭建redis,每个虚拟机上分布3个几点,所以两台虚拟机都需要安装redis,也就是上述操作,保证虚拟机中可以正常运行redis
eg:虚拟机一地址为:192.168.1.128 虚拟机二地址为:192.168.1.129 两台虚拟机需用能够相互访问,需要可以ping通哈


下操作在虚拟机一中执行,二与相同请自行模仿
在redis安装目录下,新建redis-cluster文件夹
mkdir redis-cluster

image.png

进入该文件夹
cd redis-cluster
建立个个几点的文件夹(我将把7001,7002,7005节点建立在虚拟机一上),所以建立三个文件夹7001,7002,7005文件夹
mkdir 700{1..2} 7005
image.png

再在每个节点文件中创建data 和log 文件夹,用于保存数据和日志使用,例如7001节点如图,每个节点都要创建
cd 7001
mkdir data log
image.png

返回redis-4.0.0安装目录,将该目录下redis.conf文件复制到7001节点中文件夹中

image.png

cp redis.conf /usr/local/software/redis_cluster/7001

复制后的每节点中结构应该如下图,eg:7001文件夹


image.png
3.修改7001节点中redis.conf配置文件值

vi redis.conf 进入修改模式后,如何修改自行百度吧
修改内容如下:

#端口号
port 7001 
#默认ip为127.0.0.1 需要改为其他节点机器可访问的ip(本机ip) 否则创建集群时无法访问对应的端口,无法创建集群 
#eg:本机虚拟机一ip为192.168.1.128,所以需绑定该值
bind 192.168.1.128
#数据文件存放位置
dir /usr/local/software/redis-cluster/7001/data/
#日志文件存放位置
logfile /usr/local/software/redis-cluster/7001/log/redis.log
#redis后台运行 
daemonize yes
#为保证集群管理器redis-trib.rb工具的正常运行,需要设置为no,完成后可以改回yes,但每次使用redis-trib.rb都需要改回为no
protected-mode no
#pidfile文件 
pidfile /var/run/redis_7001.pid 
#开启集群 
cluster-enabled yes 
#集群的配置 配置文件首次启动自动生成
cluster-config-file nodes_7001.conf 
#请求超时 默认15秒,可自行设置 
cluster-node-timeout 15000 
#rdb文件名
dbfilename dump-7001.rdb
#aof日志开启 有需要就开启,它会每次写操作都记录一条日志,比较耗性能
appendonly yes 
#aof文件名 
appendfilename "appendonly-7001.aof"
#设置密码 如果设置密码,所有节点密码必须相同
masterauth 123456
requirepass 123456

将修改后的redis.conf文件复制到其他各个节点中
cp redis.conf /usr/local/software/redis-cluster/7002
cp redis.conf /usr/local/software/redis-cluster/7005
修改复制后的配置文件,使用替换命令,将配置文件中7001替换700X即可
sed -i 's#7001#7002#g' /usr/local/software/redis-cluster/7002/redis.conf
sed -i 's#7001#7005#g' /usr/local/software/redis-cluster/7005/redis.conf
修改后使用cat命令,查看是否修改成功
vi /usr/local/software/redis-cluster/7002/redis.conf
虚拟机二环境同上配置,参考上文

3.启动redis所有节点,包括虚拟机一二

虚拟机一
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7001/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7002/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7005/redis.conf
虚拟机二
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7003/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7004/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7006/redis.conf
通过查看几点是否启动正常
ps -ef|grep redis

image.png

3.通过集群管理器启动先安装ruby
yum install centos-release-scl-rh //会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源

yum install rh-ruby23 -y //直接yum安装即可

scl enable rh-ruby23 bash //必要一步

ruby -v //查看安装版本

image

安装好ruby,执行以下命令
gem install redis

image

成功后便可通过集群管理器启动集群
前面3个地址为主节点,后面随机分配从节点
/usr/local/software/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.1.128:7001 192.168.1.128:7002 192.168.1.128:7005 192.168.1.129:7003 192.168.1.129:7004 192.168.1.129:7006

  • 节点设置密码之后如果需要使用redis-trib.rb的各种命令
    则会报错 Sorry, can’t connect to node

  • 解决方法:找到client.rb 然后修改默认password为上面设置的密码
    client.rb路径可以通过find命令查找:
    find / -name 'client.rb'
    类似/usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb

  • 如果执行是一直卡在,需要开启redeis集群总线对应节点
    搭建的redis集群中端口号是从 7001 ~ 7006的,需开启端口号+10000端口,如7001需开通17001端口

    image.png

    开通端口命令:
    虚拟机一:
    firewall-cmd --zone=public --add-port=7001/tcp --permanent
    firewall-cmd --zone=public --add-port=7002/tcp --permanent
    firewall-cmd --zone=public --add-port=7005/tcp --permanent
    firewall-cmd --zone=public --add-port=17001/tcp --permanent
    firewall-cmd --zone=public --add-port=17002/tcp --permanent
    firewall-cmd --zone=public --add-port=17005/tcp --permanent
    firewall-cmd --reload
    虚拟机一:
    firewall-cmd --zone=public --add-port=7003/tcp --permanent
    firewall-cmd --zone=public --add-port=7004/tcp --permanent
    firewall-cmd --zone=public --add-port=7006/tcp --permanent
    firewall-cmd --zone=public --add-port=17003/tcp --permanent
    firewall-cmd --zone=public --add-port=17004/tcp --permanent
    firewall-cmd --zone=public --add-port=17006/tcp --permanent
    firewall-cmd --reload

配置好后,将所有节点关闭并删除对应节点data文件夹中所有文件后从新启动集群,启动中会让输入yes(必须输入yes,y不行),启动成功入图,我们可以清楚的看出集群的主节点和从节点与各个节点负责的slot分段


image.png

4.验证集群是否搭建成功

在虚拟机一上开启7001节点客户端
/usr/local/software/redis-4.0.0/src/redis-cli -c -h 192.168.1.128 -p 7001 -a 123456

image.png

可以查看集群信息
cluster info
image.png

cluster nodes

image.png

在7001节点设置一个key值,然后连接虚拟机二7003节点,查看该值是否存在,如存在表示搭建集群成功
set 7001key 7001vale

image.png

连接虚拟机二7003节点,查看7001存入值是否存在
/usr/local/software/redis-4.0.0/src/redis-cli -c -h 192.168.1.129 -p 7003 -a 123456
get 7001key
image.png

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268