本篇文章为大家展示了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中怎么搭建一个横向集群,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。