Linux下搭建Redis集群

@Redis集群环境搭建

Linux下搭建Redis集群

搭建含三个节点的集群,每个节点有一主一备。

1、部署

linux目录结构
Linux下搭建Redis集群_第1张图片

1、按 Redis 文档中 Linux 环境搭建说明部署单个 Redis 服务。

2、创建 redis-cluster 目录

mkdir /home/redis/redis-cluster

3、复制原版 redis 为 redis 集群第一个节点

cp -r /home/redis/redis /home/redis/redis-cluster/7000

4、修改 redis.conf

daemonize yes
# bind 127.0.0.1 (注释掉,否则本地无法访问虚拟机redis端口)
protected-mode no
port 7000
requirepass zx123456
masterauth zx123456
cluster-enabled yes
cluster-config-file /home/redis/redis-cluster/nodes/nodes-7000.conf
cluster-node-timeout 5000
pidfile /home/redis/redis-cluster/pid/redis_7000.pid
logfile /home/redis/redis-cluster/logs/redis_7000.log
dir /home/redis/redis-cluster/dbfile
dbfilename dump7000.rdb

批量修改端口

perl -p -i -e "s/6379/7000/g" /home/redis/redis-cluster/7000/redis.conf

5、创建目录

mkdir /home/redis/redis-cluster/logs
mkdir /home/redis/redis-cluster/nodes
mkdir /home/redis/redis-cluster/pid
mkdir /home/redis/redis-cluster/dbfile
mkdir /home/redis/redis-cluster/backup
mkdir /home/redis/redis-cluster/backup/nodes
mkdir /home/redis/redis-cluster/backup/pid
mkdir /home/redis/redis-cluster/backup/dbfile

6、将7000节点复制成7份,分别为7001、7002、7003、7004、7005、7006、7007,并修改端口

1)、复制节点

cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7001
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7002
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7003
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7004
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7005
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7006
cp -r /home/redis/redis-cluster/7000 /home/redis/redis-cluster/7007

2)、修改端口

perl -p -i -e "s/7000/7001/g" /home/redis/redis-cluster/7001/redis.conf
perl -p -i -e "s/7000/7002/g" /home/redis/redis-cluster/7002/redis.conf
perl -p -i -e "s/7000/7003/g" /home/redis/redis-cluster/7003/redis.conf
perl -p -i -e "s/7000/7004/g" /home/redis/redis-cluster/7004/redis.conf
perl -p -i -e "s/7000/7005/g" /home/redis/redis-cluster/7005/redis.conf
perl -p -i -e "s/7000/7006/g" /home/redis/redis-cluster/7006/redis.conf
perl -p -i -e "s/7000/7007/g" /home/redis/redis-cluster/7007/redis.conf

7、启动6个节点,7000-7005

1)、创建启动节点批处理脚本

在 “/home/redis/redis-cluster/” 目录下创建批量启动所有节点脚本

cd /home/redis/redis-cluster/
vi start-all.sh

内容如下:

cd /home/redis/redis-cluster/7000/bin
./redis-server ../redis.conf

cd /home/redis/redis-cluster/7001/bin
./redis-server ../redis.conf

cd /home/redis/redis-cluster/7002/bin
./redis-server ../redis.conf

cd /home/redis/redis-cluster/7003/bin
./redis-server ../redis.conf

cd /home/redis/redis-cluster/7004/bin
./redis-server ../redis.conf

cd /home/redis/redis-cluster/7005/bin
./redis-server ../redis.conf
2)、启动脚本

sh start-all.sh
ps -ef | grep redis-server

如下图所示表示启动成功。
Linux下搭建Redis集群_第2张图片

8、创建集群

1)、备份数据

mv /home/redis/redis-cluster/dbfile/dump7000.rdb /home/redis/redis-cluster/backup/dbfile
mv /home/redis/redis-cluster/dbfile/dump7001.rdb /home/redis/redis-cluster/backup/dbfile
mv /home/redis/redis-cluster/dbfile/dump7002.rdb /home/redis/redis-cluster/backup/dbfile
mv /home/redis/redis-cluster/dbfile/dump7003.rdb /home/redis/redis-cluster/backup/dbfile
mv /home/redis/redis-cluster/dbfile/dump7004.rdb /home/redis/redis-cluster/backup/dbfile
mv /home/redis/redis-cluster/dbfile/dump7005.rdb /home/redis/redis-cluster/backup/dbfile

2)、启动集群

/home/redis/redis-cluster/7000/bin/redis-cli --cluster create 172.16.1.12:7000 172.16.1.12:7001 172.16.1.12:7002 172.16.1.12:7003 172.16.1.12:7004 172.16.1.12:7005 -a zx123456 --cluster-replicas 1

-a + 集群密码(masterauth )

9、测试

1)、登陆集群客户端

redis-cli -h 127.0.0.1 -p 7000 -c
auth zx123456

2)、查看集群信息

cluster info

如下图所示,则集群正常启动。
Linux下搭建Redis集群_第3张图片

3)、查看节点信息

cluster nodes

在这里插入图片描述

10、关闭集群和节点

关闭集群

redis-cli -p 7000 -c -a zx123456 shutdown

关闭节点

redis-cli -p 7000 -a zx123456 shutdown

11、动态扩展

1)、增加一个主节点

当前集群节点
在这里插入图片描述

①、将需要添加的新节点启动

新节点端口:7006、7007
Linux下搭建Redis集群_第4张图片
在这里插入图片描述

②、将新节点添加到集群中(默认为主节点,但无哈希槽)

redis-cli --cluster add-node : <已存在节点 ip>:<已存在节点端口> -a zx123456

ps:也可以登陆集群客户端,执行命令:

cluster meet 172.16.1.12 7006

在这里插入图片描述

④、移动哈希槽,选中任意一个 redis 服务即可

redis-cli --cluster reshard <任意一个节点 ip>:<任意一个节点 port> -a zx123456

需要移动多少哈希槽,输入

1000

在这里插入图片描述

移动到哪个节点,输入新节点的ID
在这里插入图片描述

指定移动哪几个点的哈希槽

1、all:所有的主节点中随机转移,凑够1000个哈希槽,然后输入 yes
2、ID + done:指定主节点移动

2)、增加一个从节点
①、将需要添加的新节点启动
②、将新节点添加到集群中(默认为主节点,但无哈希槽)
③、将已存在节点设为从节点或修改从节点所属的主节点

redis-cli -p -a zx123456 cluster replicate

在这里插入图片描述

3)、删除主节点
①、将主节点中哈希槽移动到其他主节点

redis-cli --cluster reshard <任意一个节点 ip>:<任意一个节点 port> -a zx123456

需要移动多少哈希槽,输入

1000

在这里插入图片描述
移动到哪个节点,输入节点的ID
在这里插入图片描述
从哪个节点移出,输入节点的ID

ID
done
yes

②、删除主节点

redis-cli -a zx123456 --cluster del-node <待删除节点 ip>:<待删除节点 port> <待删除节点 node-id>

4)、删除从节点

redis-cli -a zx123456 --cluster del-node <待删除节点 ip>:<待删除节点 port> <待删除节点 node-id>

12、其他部署方式

【1、redis-trib.rb】

1)、安装Ruby
①、下载

https://www.ruby-lang.org/en/downloads/

Linux下搭建Redis集群_第5张图片

②、上传

redis用户新建文件夹

cd /home/redis
mkdir ruby

上传至 ‘/home/redis/ruby’ 目录
Linux下搭建Redis集群_第6张图片

③、解压

cd /home/redis/ruby
tar -zxvf ruby-2.5.3.tar.gz

④、编译安装

cd ruby-2.5.3
./configure --prefix=/home/redis/ruby
make && make install

--prefix是将ruby安装到指定目录,也可以自定义
编译过程需要几分钟

⑤、设为全局命令

使用root用户,执行命令:

ln -s /home/redis/ruby/bin/ruby /usr/bin/ruby

⑤、验证

ruby -v

在这里插入图片描述

6)、安装rubygems
①、下载

https://rubygems.org/pages/download

Linux下搭建Redis集群_第7张图片

②、上传

redis用户新建文件夹

cd /home/redis
mkdir rubygems

上传至 ‘/home/redis/rubygems’ 目录
Linux下搭建Redis集群_第8张图片

③、解压

cd /home/redis/rubygems
tar -zxvf rubygems-2.7.8.tgz

④、编译安装

cd rubygems-2.7.8
ruby setup.rb

⑤、设为全局命令

使用root用户,执行命令:

ln -s /home/redis/rubygems/rubygems-2.7.8/bin/gem /usr/bin/gem

######⑤、验证

gem -v

在这里插入图片描述

七、将 redis-trib.rb 设为全局命令

redis 用户执行

cp /home/redis/redis-5.0.2/src/redis-trib.rb /home/redis/rubygems/rubygems-2.7.8/bin

root 用户执行

ln -s /home/redis/rubygems/rubygems-2.7.8/bin/redis-trib.rb /usr/bin/redis-trib

2、问题

1、linux 部署redis时,要求linux系统版本不能太低

2、启动集群时:[ERR] Node 127.0.0.1:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

在这里插入图片描述

【原因】:以前redis集群旧数据和配置信息没有清理干净。
【方案】

1、备份 .aof 、.rdb 、 nodes-xxx.cnf 文件然后删除
2、重启所有节点
3、重启集群

你可能感兴趣的:(Redis)