如何在linux下搭建伪分布式redis集群

Redis简介

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。
它通过提供多种键值数据类型来适应不同场景下的存储需求,
目前为止Redis支持的键值数据类型如下:字符串类型、散列类型 、列表类型 、集合类型 、有序集合类型。

Redis应用场景

Redis应用最多的地方是缓存(数据查询、短连接、新闻内容、商品内容等等)。

其他的如分布式集群架构中的session分离、聊天室的在线好友列表、任务队列(秒杀、抢购、12306等等)、应用排行榜、网站访问统计、数据过期处理,Redis也能胜任。

Redis的安装

Redis是C语言开发的,因此建议在Linux上运行。
笔者在虚拟机下使用的Linux版本为 CentOS6.4,Redis版本为3.0
其他版本的Linux也可以参照本教程。

1.redis官网下载源码包,因为使用的是虚拟机,所以先把源码包上传到linux。我用的xshell客户端,上传命令:
rz 文件名
2.Redis的编译依赖gcc环境,如果没有gcc环境,需要先安装gcc
yum install gcc-c++
3.解压源码包
tar -zxvf redis-3.0.0.tar.gz
4.编译源码包
cd redis-3.0.0
make
稍等片刻,出现如下界面,ok下一步
在这里插入图片描述
5.安装
make install PREFIX=/usr/local/redis
PREFIX指定安装路径,如下安装成功
在这里插入图片描述
6.redis目录结构
在这里插入图片描述

启动redis

(1)前端启动:./redis-server
直接运行bin/redis-server将以前端模式启动,前端模式启动的缺点是ssh命令窗口关闭则redis-server程序结束,不推荐使用此方式启动redis。
(2)后端模式启动
修改redis.conf文件
vim redis.conf
将其中的daemonize 改为yes
在这里插入图片描述
执行如下命令启动redis
cd /usr/local/redis/bin
./redis-server redis.conf
redis默认使用6379端口
ps aux|grep redis
在这里插入图片描述

Redis集群

集群原理

3.1.1.	redis-cluster架构图
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

集群容错

3.1.2.	redis-cluster投票:容错
(1)整个投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉了.
(2):什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
ps:当集群不可用时,所有对集群的操作都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

Ruby环境安装

redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境。
1.安装ruby
yum install ruby
yum install rubygems
2.安装ruby和redis的接口程序
点击下载 redis-3.0.0.gem
拷贝redis-3.0.0.gem至/usr/local下
执行gem install /usr/local/redis-3.0.0.gem

创建集群

这里在同一台服务器用不同的端口表示不同的redis服务器,如下:
主节点:192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003
从节点:192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006
PS:IP地址根据自己的来改!
(1)创建6个redis的实例,在/usr/local下创建redis-cluster目录,在该目录下创建redis01,redis02,……redis06目录,如下
在这里插入图片描述
(2)将redis安装目录bin下的文件拷贝到每个redis0x目录下,同时将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下,
cp *.rb /usr/local/redis-cluster
修改每个redis0x目录下的redis.conf配置文件:
port 7001
port 7002
.
.
.
port 7006
打开cluster-enable前面的注释
(3)启动6个实例,编写脚本一次启动全部实例
vim startall.sh
加入以下内容:
cd redis01
./redis-server redis.conf
cd …
cd redis02
./redis-server redis.conf
cd …
cd redis03
./redis-server redis.conf
cd …
cd redis04
./redis-server redis.conf
cd …
cd redis05
./redis-server redis.conf
cd …
cd redis06
./redis-server redis.conf
cd …
注意,cd …全部是两个点,markdown编辑器不知道怎么显示三个,这里说明一下。
添加可执行权限
chmod +x startall.sh
在这里插入图片描述
启动6个redis实例
./startall.sh
查看是否启动成功
ps -aux|grep redis
在这里插入图片描述
(4)创建集群
执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。
./redis-trib.rb create --replicas 1 192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003 192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006
说明:
redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点
replicas指定为1表示每个主节点有一个从节点

注意:
如果执行时报如下错误:
[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb。
创建成功输出如下信息:

Creating cluster
Connecting to node 192.168.198.128:7001: OK
Connecting to node 192.168.198.128:7002: OK
Connecting to node 192.168.198.128:7003: OK
Connecting to node 192.168.198.128:7004: OK
Connecting to node 192.168.198.128:7005: OK
Connecting to node 192.168.198.128:7006: OK

Performing hash slots allocation on 6 nodes…
Using 3 masters:
192.168.198.128:7001
192.168.198.128:7002
192.168.198.128:7003
Adding replica 192.168.198.128:7004 to 192.168.198.128:7001
Adding replica 192.168.198.128:7005 to 192.168.198.128:7002
Adding replica 192.168.198.128:7006 to 192.168.198.128:7003
M: cfbbbd2d61e553d1c2f024363e4c1520455394ce 192.168.198.128:7001
slots:0-5460 (5461 slots) master
M: 2f6b8ac8e9bf0f8156d42601a4eb03fba4c3063e 192.168.198.128:7002
slots:5461-10922 (5462 slots) master
M: 1b321b141945d3c3094f074d1a1b016cde333ce8 192.168.198.128:7003
slots:10923-16383 (5461 slots) master
S: 678a94277581abbe2b0559694f45bb76ab2ef8f6 192.168.198.128:7004
replicates cfbbbd2d61e553d1c2f024363e4c1520455394ce
S: 3fd7c216b4cc634f5fd13a43f6534c6bce8f3d8d 192.168.198.128:7005
replicates 2f6b8ac8e9bf0f8156d42601a4eb03fba4c3063e
S: 96140038a4417ccc1e0b1f20a135263284aeae07 192.168.198.128:7006
replicates 1b321b141945d3c3094f074d1a1b016cde333ce8
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 192.168.198.128:7001)
M: cfbbbd2d61e553d1c2f024363e4c1520455394ce 192.168.198.128:7001
slots:0-5460 (5461 slots) master
M: 2f6b8ac8e9bf0f8156d42601a4eb03fba4c3063e 192.168.198.128:7002
slots:5461-10922 (5462 slots) master
M: 1b321b141945d3c3094f074d1a1b016cde333ce8 192.168.198.128:7003
slots:10923-16383 (5461 slots) master
M: 678a94277581abbe2b0559694f45bb76ab2ef8f6 192.168.198.128:7004
slots: (0 slots) master
replicates cfbbbd2d61e553d1c2f024363e4c1520455394ce
M: 3fd7c216b4cc634f5fd13a43f6534c6bce8f3d8d 192.168.198.128:7005
slots: (0 slots) master
replicates 2f6b8ac8e9bf0f8156d42601a4eb03fba4c3063e
M: 96140038a4417ccc1e0b1f20a135263284aeae07 192.168.198.128:7006
slots: (0 slots) master
replicates 1b321b141945d3c3094f074d1a1b016cde333ce8
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.

(5)测试集群

redis01/redis-cli -h 192.168.25.153 -p 7002 -c
ps:-c参数不要忘记,表示以集群方式连接redis,不带能连上,但操作时会报错!
(6)关闭集群,使用脚本全部关闭,在redis-cluster目录下创建脚本
vim shutdownall.sh
添加如下信息:
redis01/redis-cli -p 7001 shutdown
redis02/redis-cli -p 7002 shutdown
redis03/redis-cli -p 7003 shutdown
redis04/redis-cli -p 7004 shutdown
redis05/redis-cli -p 7005 shutdown
redis06/redis-cli -p 7006 shutdown
chmod +x shutdownall.sh

在这里插入图片描述

关闭

./shutdownall.sh
ps -aux|grep redis
Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.8/FAQ
root 11616 0.0 0.0 103248 836 pts/0 S+ 16:07 0:00 grep redis

启动

./startall.sh
ps -aux|grep redis
Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.8/FAQ
root 11625 0.5 0.7 137436 7388 ? Ssl 16:08 0:00 ./redis-server *:7001 [cluster]
root 11629 0.0 0.7 137436 7388 ? Ssl 16:08 0:00 ./redis-server *:7002 [cluster]
root 11633 0.0 0.7 137436 7396 ? Ssl 16:08 0:00 ./redis-server *:7003 [cluster]
root 11637 0.0 0.7 137436 7380 ? Ssl 16:08 0:00 ./redis-server *:7004 [cluster]
root 11641 0.0 0.7 137436 7380 ? Ssl 16:08 0:00 ./redis-server *:7005 [cluster]
root 11645 0.0 0.7 137436 7384 ? Ssl 16:08 0:00 ./redis-server *:7006 [cluster]
root 11652 0.0 0.0 103248 836 pts/0 S+ 16:08 0:00 grep redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建redis集群,需要进行以下步骤: 1. 下载redis集群源码包并解压 2. 编译redis集群源码包 3. 创建redis集群配置文件 4. 启动redis集群 5. 验证redis集群是否正常工作 下面我们逐一介绍每个步骤的具体操作: 1. 下载redis集群源码包并解压 可以在redis官网上下载redis集群的源码包,下载地址为:https://redis.io/download。下载完成后,解压到指定的目录下。 2. 编译redis集群源码包 进入redis集群源码包所在的目录,使用以下命令编译redis集群: make 3. 创建redis集群配置文件 在redis集群源码包所在的目录下,创建一个名为redis_cluster.conf的配置文件,并添加以下内容: port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 说明: port:redis集群中的一个节点所使用的端口号。 cluster-enabled:是否启用集群模式。 cluster-config-file:集群配置文件的名称。 cluster-node-timeout:如果一个节点在指定的时间内没有响应,那么它就被认为是不可用的。 appendonly:是否启用AOF持久化。 根据实际需要,可以添加更多的配置项。 4. 启动redis集群redis集群源码包所在的目录下,启动redis集群,使用以下命令: ./src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 说明: ./src/redis-trib.rb:redis集群管理工具。 create:创建一个新的集群。 --replicas:指定每个主节点的从节点数量。 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005:指定redis集群中的所有节点。 5. 验证redis集群是否正常工作 使用以下命令验证redis集群是否正常工作: ./src/redis-trib.rb check 127.0.0.1:7000 说明: check:检查集群中的所有节点是否正常工作。 127.0.0.1:7000:指定一个节点进行检查。 如果所有节点都正常工作,那么redis集群搭建成功了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值