redis集群模式搭建

可能会遇到的问题

1. Waiting for the cluster to join 一直等待

解决方法:参考 https://blog.csdn.net/truong/article/details/52531103
原因:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口。集群总线端口为redis客户端连接的端口 +10000,如redis端口为 7000,则集群总线端口为 17000

开放端口命令:
firewall-cmd --permanent --add-port=17000/tcp
firewall-cmd --permanent --add-port=17001/tcp
firewall-cmd --reload

所有服务器的点需要开通redis的客户端连接端口和集群总线端口
注意:iptables放开,如果有安全组,也要放开这两个端口

2.[ERR] Node 10.211.55.12:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法:参考 https://blog.csdn.net/vtopqx/article/details/50235737
1)将需要新增的节点下aof、rdb等本地备份文件删除;
2)同时将新Node的集群配置文件删除,即:删除 redis.conf 里面cluster-config-file 所对应文件夹中的文件;
3)重启redis

若再次添加新节点如果还是报错,则登录Node
./redis-cli–h x –p
对数据库进行清除:
127.0.0.1:7001> flushdb
重启redis

开始部署

1)统一安装在 /usr/local/myredis 目录下
2)3台服务器,每台服务器2个节点,3主3从,端口7000和7001

1.安装gcc

yum -y install gcc

2.下载redis安装包,不能连外网手动下载并上传到该文件目录下

手动下载地址http://download.redis.io/releases/redis-5.0.2.tar.gz

mkdir /usr/local/myredis
cd  /usr/local/myredis
wget http://download.redis.io/releases/redis-5.0.2.tar.gz

若出现:-bash: wget: 未找到命令,说明wget未安装
安装wget:yum -y install wget
重新执行 wget http://download.redis.io/releases/redis-5.0.2.tar.gz 命令

3.解压redis安装包:

tar -zxf redis-5.0.2.tar.gz

4.安装编译:

cd /usr/local/myredis/redis-5.0.2
make & make install

若报错:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
则执行:make MALLOC=libc

5.创建保存节点文件目录

mkdir -p ./rediscluster/node700{0,1}

6.编辑redis.conf文件

复制初始redis.conf文件并编辑

1.配置7000端口节点

cd rediscluster/node7000/
cp /usr/local/myredis/redis-5.0.2/redis.conf ./
vi redis.conf
#取消绑定ip,把 bind 127.0.0.1 注释
#bind 127.0.0.1
#修改保护模式为no,可以让非本机ip不加密码访问
protected-mode no
#修改为对应端口号
port 7000
#修改redis为后台启动
daemonize yes 
#更改数据存储目录,方便管理
dir /usr/local/myredis/rediscluster/node7000 
#开启集群,取消注释
cluster-enabled yes 
#取消注释并修改为对应名称
cluster-config-file nodes-7000.conf 
#集群超时参数,取消注释
cluster-node-timeout 15000 
#修改为数据同步,改为aof备份
appendonly yes 
#当主机和从机都down掉时,其它主节点是否可以写操作,no 可以,yes 不行,默认为yes。根据需求配置
#当主机和从机都down掉时并设置为no时,该主机所在槽位数据不可写。可能会造成数据丢失情况
cluster-require-full-coverage no

2.配置7001端口节点

把 7000 节点修改成功后的 redis.conf 文件复制到 7001 节点

复制并修改端口号

sed 's/7000/7001/g' /usr/local/myredis/rediscluster/node7000/redis.conf > /usr/local/myredis/rediscluster/node7001/redis.conf

7.开放端口

firewall方式:

firewall-cmd --permanent --add-port=7000/tcp
firewall-cmd --permanent --add-port=17000/tcp
firewall-cmd --permanent --add-port=7001/tcp
firewall-cmd --permanent --add-port=17001/tcp
firewall-cmd --reload

参数解释:
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、–permanent:表示设置为持久;

移除端口命令:firewall-cmd --permanent --remove-port=8080/tcp
注意:每次开放或移除端口都需要重新加载防火墙,否则会无效。
重启防火墙命令:firewall-cmd --reload
查看开放端口命令:firewall-cmd --list-all

注意:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口。集群总线端口为redis客户端连接的端口 +10000。否则会出现 Waiting for the cluster to join 一直等待问题。

8.启动和关闭reids节点

启动 redis

/usr/local/myredis/redis-5.0.2/src/redis-server /usr/local/myredis/rediscluster/node7000/redis.conf 
/usr/local/myredis/redis-5.0.2/src/redis-server /usr/local/myredis/rediscluster/node7001/redis.conf 

关闭redis,关闭7000端口redis集群节点

/usr/local/myredis/redis-5.0.2/src/redis-cli -p 7000 shutdown

其它服务器按相同步骤操作

9.创建集群

所有6个节点配置完成并成功启动后,开始创建集群

创建集群,指定副本数为1

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster create 10.211.55.12:7000 10.211.55.13:7000 10.211.55.14:7000 10.211.55.12:7001 10.211.55.13:7001 10.211.55.14:7001 --cluster-replicas 1

其中:
1)前3个地址默认为主机,槽位共有16384个,根据主机平均分配
2)--cluster-replicas 2 表示从服务器数量,有1台主2台从服务器,可根据具体情况更改

创建完成后启动集群, -c 是以集群模式启动,写操作时会自动切换对应hash值服务器

/usr/local/myredis/redis-5.0.2/src/redis-cli -c -p 7000 

10.相关命令

1)查看key值所属hash槽:cluster keyslot a
在这里插入图片描述
2)查询hash槽分布:cluster slots
在这里插入图片描述
3)查看集群节点信息:cluster nodes
在这里插入图片描述
4)查看集群状态信息:cluster info
在这里插入图片描述
5)查询集群中所有key

/usr/local/myredis/redis-5.0.2/src/redis-cli -c --cluster call 10.211.55.12:7000 keys \*

11.集群扩容

1.启动新节点:

/usr/local/myredis/redis-5.0.2/src/redis-server /usr/local/myredis/rediscluster/node7000/redis.conf 
/usr/local/myredis/redis-5.0.2/src/redis-server /usr/local/myredis/rediscluster/node7001/redis.conf 

2.添加主节点,默认为master

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster add-node 新的IP:端口 已存在的IP:端口(从建好集群中随便选择一个存在IP和端口)

3.添加从节点

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster add-node 新的IP:端口 已存在的IP:端口(从建好集群中随便选择一个存在IP和端口) --cluster-master-id 主节点ID(唯一标示,cluster nodes 命令可查看每个节点ID)

另外,如果添加的从节点之前保存有数据,必须删除,否则添加失败。删除从节点在redis.conf中配置的文件目录对应位置的文件。

4.添加完后没有槽位,需要手动分配槽位:

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster reshard 集群中任意一个IP:端口

执行完上述命令后按以下步骤执行
分配多少槽位 -》接收节点ID -》all/done,其中:

all:表示从已分配好槽位集群中平均拿出指定槽位,如500个,之前有3个主节点,则每个分 配 500/3
done:指定主节点IP均拿出指定槽位,如500个,指定已有槽位的2个主节点,则每个分配 500/2

5.示例

主:

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster add-node 10.211.55.15:7000 10.211.55.12:7000

从:

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster add-node 10.211.55.15:7001 10.211.55.12:7000 --cluster-master-id 61e034d4a7b592c96db3aff8d1e4751b3105ee0b

分配槽位:
在这里插入图片描述
其它命令:

从集群中删除从节点,后面为从节点的id。

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster del-node 192.168.1.172:6380 b97cde23f3c1a1b13e42728562180355b985831a

删除主节点,

先要把主节点的槽移到其他节点去 要迁移槽的主节点

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster reshard 192.168.1.172:6379

将槽均衡到其他节点

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster rebalance --cluster-threshold 1 192.168.1.172:6379

将集群外部redis实例中的数据导入到集群中去

/usr/local/myredis/redis-5.0.2/src/redis-cli --cluster import 192.168.1.172:6379 --cluster-from 192.168.1.172:6382 --cluster-copy

Cluster-from后面跟外部redis的ip和port

如果集群中已有同样的key,如果需要替换,可以cluster-copy和cluster-replace联用,这样集群中的key就会被替换为外部的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis集群模式是通过分片来实现数据的分布式存储和高可用性。下面是搭建Redis集群的步骤: 1. 下载Redis并解压缩: ``` $ wget http://download.redis.io/releases/redis-5.0.9.tar.gz $ tar xzf redis-5.0.9.tar.gz $ cd redis-5.0.9 ``` 2. 编译Redis: ``` $ make ``` 3. 复制Redis二进制文件: ``` $ cp src/redis-cli src/redis-server /usr/local/bin/ ``` 4. 创建Redis集群的配置文件: ``` $ mkdir /redis_cluster $ cd /redis_cluster $ touch redis-7000.conf redis-7001.conf redis-7002.conf redis-7003.conf redis-7004.conf redis-7005.conf ``` 5. 编辑配置文件: ``` # redis-7000.conf port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes # redis-7001.conf port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly yes # redis-7002.conf port 7002 cluster-enabled yes cluster-config-file nodes-7002.conf cluster-node-timeout 5000 appendonly yes # redis-7003.conf port 7003 cluster-enabled yes cluster-config-file nodes-7003.conf cluster-node-timeout 5000 appendonly yes # redis-7004.conf port 7004 cluster-enabled yes cluster-config-file nodes-7004.conf cluster-node-timeout 5000 appendonly yes # redis-7005.conf port 7005 cluster-enabled yes cluster-config-file nodes-7005.conf cluster-node-timeout 5000 appendonly yes ``` 6. 启动Redis集群: ``` $ redis-server redis-7000.conf $ redis-server redis-7001.conf $ redis-server redis-7002.conf $ redis-server redis-7003.conf $ redis-server redis-7004.conf $ redis-server redis-7005.conf ``` 7. 创建Redis集群: ``` $ redis-cli --cluster create 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 --cluster-replicas 1 ``` 该命令创建了一个包含6个节点和1个副本的Redis集群。 8. 测试Redis集群: ``` $ redis-cli -c -p 7000 127.0.0.1:7000> set foo bar OK 127.0.0.1:7000> get foo "bar" ``` 上述步骤完成后,就可以使用Redis集群模式进行数据的分布式存储和高可用性了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值