企业网站定制开发Redis-Cluster集群搭建

一,官方cluster分区

Redis3.0之后,Redis企业网站定制开发官方提供了完整的集群解决方案。
企业网站定制开发方案采用的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。称为RedisCluster。
Redis5.0前采用redis-trib企业网站定制开发企业网站定制开发进行集群的创建和管理,需要支持
Redis5.0企业网站定制开发可以直接使用Redis-cli进行集群的创建和管理

二,部署架构




三,集群搭建

RedisCluster最少需要三台主服务器,三台从服务器。端口号分别为:7001~7006

mkdir -p /root/redis-cluster/7001cd /root/redis/redis-5.0.5/srcmake install PREFIX=/root/redis-cluster/7001cp /root/redis/redis-5.0.5/redis.conf /root/redis-cluster/7001/bin
  • 1
  • 2
  • 3
  • 4

第一步:创建7001实例,并编辑redis.conf文件,修改port为7001。cluster-enable yes
注意:创建实例,即拷贝单机版安装时,生成的bin目录,为7001目录。





第二步:复制7001,创建7002~7006实例,修改端口

cp -r /root/redis-cluster/7001/* /root/redis-cluster/7002cp -r /root/redis-cluster/7001/* /root/redis-cluster/7003cp -r /root/redis-cluster/7001/* /root/redis-cluster/7004cp -r /root/redis-cluster/7001/* /root/redis-cluster/7005cp -r /root/redis-cluster/7001/* /root/redis-cluster/7006
  • 1
  • 2
  • 3
  • 4
  • 5

第三步:创建start.sh,启动所有的实例

cd 7001/bin./redis-server redis.confcd ..cd ..cd 7002/bin./redis-server redis.confcd ..cd ..cd 7003/bin./redis-server redis.confcd ..cd ..cd 7004/bin./redis-server redis.confcd ..cd ..cd 7005/bin./redis-server redis.confcd ..cd ..cd 7006/bin./redis-server redis.confcd ..cd ..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

chmod u+x start.sh (赋写和执行的权限)
./start.sh(启动RedisCluster)

第四步:创建Redis集群(创建时Redis里不要有数据)

# cluster-replicas : 1 1从机 前三个为主[root@localhost bin]# ./redis-cli --cluster create 192.168.159.139:7001 192.168.159.139:7002 192.168.159.139:7003 192.168.159.139:7004192.168.159.139:7005 192.168.159.139:7006 --cluster-replicas 1
  • 1
  • 2
  • 3



命令客户端连接集群
命令:

./redis-cli -h 127.0.0.1 -p 7001 -c
  • 1

注意:-c 表示是以redis集群方式进行连接

[root@localhost redis-cluster]# cd 7001[root@localhost 7001]# ./redis-cli -h 127.0.0.1 -p 7001 -c127.0.0.1:7001> set name1 aaa-> Redirected to slot [12933] located at 127.0.0.1:7003OK127.0.0.1:7003>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


查看集群的命令:
(1)查看集群状态

cluster info
  • 1


(2)查看集群中的节点:

cluster nodes
  • 1





四,集群节点扩容

添加主节点
先创建7007节点 和7008节点(无数据),扩展一主一从

mkdir -p /root/redis-cluster/7007cd /root/redis/redis-5.0.5/srcmake install PREFIX=/root/redis-cluster/7007cp /root/redis/redis-5.0.5/redis.conf /root/redis-cluster/7007/bin
  • 1
  • 2
  • 3
  • 4


添加7007结点作为新节点,并启动
执行命令

[root@localhost bin]# cd 7001/bin[root@localhost bin]# ./redis-cli --cluster add-node 192.168.159.139:7007192.168.159.139:7001
  • 1
  • 2
  • 3


查看集群结点发现7007已添加到集群中

cluster nodes
  • 1


hash槽重新分配(数据迁移)
添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。查看集群中槽占用情况

cluster nodes
  • 1

redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况

给刚添加的7007结点分配槽

第一步:连接上集群(连接集群中任意一个可用结点都行)

./redis-cli --cluster reshard 192.168.72.128:7007
  • 1

第二步:输入要分配的槽数量, 输入:3000,表示要给目标节点分配3000个槽

How many slots do you want to move (from 1 to 16384)? 3000
  • 1

第三步:输入接收槽的结点id

PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:50b073163bc4058e89d285dc5dfc42a0d1a222f2
  • 1
  • 2

第四步:输入源结点id
输入:all

第五步:输入yes开始移动槽到目标结点id
输入yes


查看结果

添加从节点

添加7008从结点,将7008作为7007的从结点
命令:

./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave --cluster-master-id 主节点id
  • 1
  • 2

举例:

./redis-cli --cluster add-node 192.168.159.139:7008 192.168.159.139:7007 --cluster-slave --cluster-master-id ae12faaec70f71c887cf0ccdeef2c95278472c88 
  • 1
  • 2

ae12faaec70f71c887cf0ccdeef2c95278472c88 是7007结点的id,可通过cluster nodes查看。

注意:如果原来该结点在集群中的配置信息已经生成到cluster-config-file指定的配置文件中(如果
cluster-config-file没有指定则默认为nodes.conf),这时可能会报错:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (checkwith CLUSTER NODES) or contains some key in database 0
  • 1
  • 2

解决方法是删除生成的配置文件nodes.conf,删除后再执行./redis-cli --cluster add-node 指令

查看集群中的结点,刚添加的7008为7007的从节点:

缩容
./redis-cli --cluster del-node 192.168.127.128:70086be94480315ab0dd2276a7f70c82c578535d6666
  • 1
  • 2

删除已经占有hash槽的结点会失败,报错如下:

[ERR] Node 192.168.127.128:7008 is not empty! Reshard data away and try again.
  • 1

需要将该结点占用的hash槽分配出去。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发