(三) Redis集群的搭建

Redis集群搭建
主要是按照这篇文章的说明搭建的集群环境,本文也会加入自己遇到的一些坑来说明一下。

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

环境搭建

系统版本和Redis版本

[root@localhost]~# cat /proc/version
Linux version 3.10.0-957.10.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019
[root@localhost]~# redis-server --version
Redis server v=5.0.7 sha=00000000:0 malloc=libc bits=64 build=1c859419f67cffa8

下载

wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar zxvf redis-5.0.7.tar.gz
mv redis-4.0.10 /usr/local/redis/

编译安装

cd /usr/local/redis
make
make install

启动,然后redis-cli 连接测试就可以了,不细说

cd /usr/local/bin/
redis-server /usr/local/redis/redis.conf

集群搭建

架构细节:
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
节点的fail是通过集群中超过半数的节点检测失效时才生效.
客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key
Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

环境准备
Redis集群中要求奇数节点,所以至少要有三个节点,并且每个节点至少有一备份节点,所以至少需要6个redis服务实例。

这里我是用了两台服务器,分别开启三个节点

  1. 准备结构目录
    两台服务器分别建立如下目录结构
$ mkdir -p /usr/local/redis/redis-cluster/{7000,7001,7002}

2.为每个端口创建配置文件。
注释千万别写在配置的后面,比如 port 7000 # 端口7000

# 端口7000,7001,7002,与目录对应
port 7000
#默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
bind 192.168.3.67
#redis后台运行
daemonize yes
#开启集群
cluster-enabled yes
#集群的配置,配置文件首次启动自动生成 7000,7001,7002  
cluster-config-file nodes_7000.conf
#请求超时,默认15秒,可自行设置
cluster-node-timeout 8000
#开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中
appendonly yes
#每次有写操作的时候都同步
appendfsync always
#redis服务日志
logfile "/data/redis/logs/redis.log"
#pidfile文件对应7000,7001,7002
pidfile /var/run/redis_7000.pid

关于更多配置文件参数的解释,可以参考:
https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf

3.为了方便,每个服务器一个启动脚本

for((i=0;i<3;i++));
do /usr/local/bin/redis-server /usr/local/test/redis-cluster/700$i/redis.conf;      
done

关闭服务脚本。ip需要具体的服务器地址

for((i=0;i<=2;i++));
do /usr/local/bin/redis-cli -c -h 192.168.3.67 -p 700$i shutdown;
done

4.启动各节点后,它们还不是一个集群,需要再创建集群
Redis 5.* 集群的创建

redis-cli --cluster create 192.168.3.67:7000 192.168.3.67:7001 192.168.3.67:7002 192.168.3.19:7000 192.168.3.19:7001 192.168.3.19:7002 --cluster-replicas 1

然后集群创建成功了,三个主节点,三个从节点。
redis-cluster会
连接测试

[root@localhost]/# redis-cli -c -p 7000 -h 192.168.3.67
192.168.3.67:7000> ping
PONG
192.168.3.67:7000> set test hello
-> Redirected to slot [6918] located at 192.168.3.67:7002
OK
192.168.3.67:7002> get test
"hello"
192.168.3.67:7002> 

列出集群节点

192.168.3.67:7002> cluster nodes
7e3c8af7c86f9920437ad70520590696fcc0e1b5 192.168.3.67:7002@17002 myself,master - 0 1578570522000 8 connected 5461-10922
f74070c491e275c4731673d47ac6a7e3004f14cb 192.168.3.19:7000@17000 slave 7e3c8af7c86f9920437ad70520590696fcc0e1b5 0 1578570521000 8 connected
2350bc9e786e3a4e12020cfa16e85647515dca00 192.168.3.67:7001@17001 master - 0 1578570522274 2 connected 10923-16383
95a7ac66e0d6e0ffee5dbc0515a61627bb4ed7ee 192.168.3.67:7000@17000 master - 0 1578570520270 1 connected 0-5460
89ca241d20d9927f47176bb47cdc83ffaf6bbd9a 192.168.3.19:7001@17001 slave 2350bc9e786e3a4e12020cfa16e85647515dca00 0 1578570521272 5 connected
93b001ad06b35f5b2a9a750ea4e69fc6652dbabe 192.168.3.19:7002@17002 slave 95a7ac66e0d6e0ffee5dbc0515a61627bb4ed7ee 0 1578570522274 6 connected

查看集群信息- cluster info

192.168.3.67:7002> 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:8
cluster_my_epoch:8
cluster_stats_messages_ping_sent:1018448
cluster_stats_messages_pong_sent:200700
cluster_stats_messages_sent:1219148
cluster_stats_messages_ping_received:200700
cluster_stats_messages_pong_received:194506
cluster_stats_messages_received:395206

其他的命令不继续说明了

遇到的问题

make
错误一:
cc: Command not found
原因 :没有安装gcc
解决:yum install gcc
然后再次make

错误2
:error: jemalloc/jemalloc.h: No such file or directory
原因:一些编译依赖或原来编译遗留出现的问题
解决:make distclean 清理一下,
然后再make。
make 成功后 提示Hint: It's a good idea to run 'make test'
输入:make test

错误3:
make[1]: Entering directory `/root/software/redis-3.0.0/src'
You need tcl 8.5 or newer in order to run the Redis test
原因:没有安装tcl
解决方案:yum install -y tcl
然后
make test
然后make

错误4
Hint: It's a good idea to run 'make test'
安装完tcl之后还是出错,如下
实际这根本就不是错,只是一个提示而已
继续安装make install 就可以了

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

推荐阅读更多精彩内容