Redis中怎么搭建一个横向集群
更新:HHH   时间:2023-1-7


本篇文章为大家展示了Redis中怎么搭建一个横向集群,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1.概述:

在redis3.0版本之前只支持主从复制(纵向集群),纵向集群解决了读的压力,但是写的操作只能在主库上完成。redis3.0版本之后包括3.0可以支持横向集群,本文章尝试介绍redis的横向集群以及如何在真实环境中搭建。

2.实现原理:

Redis集群中有16384个哈希槽,而每一个key都是哈希槽的一部分,所以只要计算出key的哈希槽,就知道这个key对应16384中的哪一个,计算原理是对key的CRC16取模16384,而Redis群集中的每个节点都负责哈希槽的子集,有多少个节点就把哈希槽分成几片。比如有A,B,C 3个节点集群,哈希槽的分配大概如下:

  • 节点A包含从0到5500的哈希槽。

  • 节点B包含从5501到11000的哈希槽。

  • 节点C包含从11001到16383的哈希槽。

比如我的key是name计算出的 哈希槽 是 100,100这个哈希槽在节点A,所以自然的redis就把这个值存到节点A的redis服务器上,获取数据也是先计算key的哈希槽,然后再去对应的节点获取数据,从而读写都实现了集群。

3.搭建横向集群

实例基础环境:centos7系统 ,redis版本5.0.6(目前的最新版本)

实例情况:创建6个redis服务器,3台主库3台从库,即每台主库分配一台从库,如果主库发生故障,则从库可以进行故障转移升级为主库

1.下载安装redis

# 下载redis安装包到 /usr/local/src目录下
cd /usr/local/src
# 各个版本下载地址:http://download.redis.io/releases
wget http://download.redis.io/releases/redis-5.0.6.tar.gz
# 解压
tar zxf redis-5.0.6.tar.gz
# 进入redis-5.0.6的源码目录
cd redis-5.0.6/
# 编译redis
make

把新建六个目录,用来存放6台redis服务和对应的配置文件

cd /data
mkdir redis1 redis2 redis3 redis4 redis5 redis6

把编译后的redis-server和redis.conf文件分别复制到新建的六个redis目录

cd /usr/local/src/redis-5.0.6
cp redis.conf /data/redis1
cp redis.conf /data/redis2
cp redis.conf /data/redis3
cp redis.conf /data/redis4
cp redis.conf /data/redis5
cp redis.conf /data/redis6
cd /usr/local/src/redis-5.0.6/src
cp redis-server /data/redis1
cp redis-server /data/redis2
cp redis-server /data/redis3
cp redis-server /data/redis4
cp redis-server /data/redis5
cp redis-server /data/redis6

分别配置这六台服务器的redis.conf

需要修改的参数如下:

port 每台服务器对外的端口这里我为每台分别分配如下 6001 6002 6003 6004 6005 6006

cluster-enabled yes 打开这个配置且值为yes,指定redis为集群节点启动

cluster-config-file nodes.conf 指定节点配置文件

daemonize yes 让每台redis以守护态启动(后台启动)

分别修改每台redis服务器的配置文件

cd /data/redis1
vim redis.conf

redis1服务器redis.conf配置修改如下

port 6001
daemonize yes
pidfile /var/run/redis_6001.pid
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000

redis2服务器redis.conf配置修改如下

port 6002
daemonize yes
pidfile /var/run/redis_6002.pid
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000

redis3,redis4,redis5,redis6以此类推修改对应的配置文件

配置好六台服务器之后,分别启动六台redis服务器

cd /data/redis1
./redis-server redis.conf
cd /data/redis2
./redis-server redis.conf
cd /data/redis3
./redis-server redis.conf
cd /data/redis4
./redis-server redis.conf
cd /data/redis5
./redis-server redis.conf
cd /data/redis6
./redis-server redis.conf

这时我们六台服务全部启动了,下一步就是将这六台服务器创建成一个集群

使用redis-cli创建集群

cd /usr/local/src/redis-5.0.6/src/
./redis-cli --cluster create \
127.0.0.1:6001 \
127.0.0.1:6002 \
127.0.0.1:6003 \
127.0.0.1:6004 \
127.0.0.1:6005 \
127.0.0.1:6006 \
--cluster-replicas 1

此时控制台提示输入yes,输入yes回车即可

出现以下说明创建成功!

创建集群完毕后会提示All 16384 slots covered

接下来用命令行工具测试:

[root@VM_0_10_centos src]# ./redis-cli -c -p 6001
127.0.0.1:6001> set name liuhaizhuang
-> Redirected to slot [5798] located at 127.0.0.1:6002
OK
127.0.0.1:6002> get name
"liuhaizhuang"
127.0.0.1:6002>

我们发现从6001这个服务器保存的数据,系统自动分配到6002这个服务器中了,说明横向集群搭建完毕!

2.集群配置参数说明

# 如果是yes,则启用Redis Cluster支持,如果是no,则redis会独立启动
cluster-enabled <yes/no>
# 这个文件是redis集群节点每次发生更改时都会自动持久保存集群配置的文件,用户不可编辑
cluster-config-file <filename>
# Redis群集节点不可用的最长时间(如果在设置的时间内,不当做失败处理)
cluster-node-timeout <milliseconds>
# 如果设置为0,则从服务器将始终尝试对主服务器进行故障转移,而不管主服务器和从服务器之间的链接保持断开状态的时间长短,如果该值为正,则将最大断开时间计算为节点超时值乘以此选项提供的系数
cluster-slave-validity-factor <factor>
# 一个主机将保持连接的最小数量的从机
cluster-migration-barrier <count>
#如果设置为yes,默认情况下,如果某个节点未覆盖一定比例的key空间,集群将停止接受写入。如果该选项设置为no,即使仅可以处理有关key子集的请求,群集仍将提供查询。
cluster-require-full-coverage <yes/no>

上述内容就是Redis中怎么搭建一个横向集群,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注天达云行业资讯频道。

返回大数据教程...