Linux搭建redis集群

1.安装redis 

# 由于安装 redis 需进行编译
# 我们需要先安装 gcc 环境,如果已经存在 gcc 则忽略
yum -y install gcc gcc-c++ kernel-devel
# 如果为内网环境无法 yum 安装,可通过 rpm 包安装
# 这里我们就不进行演示了
# 注意:rpm 涉及依赖,需要找到各种依赖包
# 解压缩 redis-4.0.8.tar.gz 包
tar -zxvf redis-4.0.8.tar.gz
# 将 redis-4.0.8 移至 /usr/local/下
mv redis-4.0.8 /usr/local/
# 切换至解压后的 redis-4.0.8 目录
cd /usr/local/redis-4.0.8
# 编译
make
# 如果提示zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
# 执行:make MALLOC=libc
# 切换至 src 目录
cd src
# 编译且安装
make install

2.修改配置文件

# 打开 redis 配置文件
vim /usr/local/redis-4.0.8/redis.conf

 (1)修改redis-4.0.8/redis.conf文件中的daemonize属性为yes

Linux搭建redis集群_第1张图片

(2)注释掉bind 127.0.0.1,该属性将导致redis只能从本地发起访问,其他域名或IP无法访问

或设置绑定ip,即服务器实际ip

Linux搭建redis集群_第2张图片

(3)修改端口(按实际需要修改);修改redis-4.0.8/redis.conf文件中的port属性   默认端口6379

Linux搭建redis集群_第3张图片

3.创建集群文件

# 切换至 redis-4.0.8 目录
cd /usr/local/redis-4.0.8
# 创建 redis_cluster 集群目录
mkdir redis_cluster
# 切换至 redis_cluster 目录
cd redis_cluster/
# 创建 7000-7005 目录
mkdir {7000..7005}
# 查看 7001-7005 目录是否存在
ls
7000  7001  7002  7003  7004  7005
# 拷贝 redis.conf 配置文件到 7000目录
cp /usr/local/redis-4.0.8/redis.conf 7000/
# 修改 7000 下 redis.conf 配置文件
vim 7000/redis.conf

(1)修改端口(按实际需要修改);即redis-4.0.8/redis.conf中的port属性,这里我们改为7000

Linux搭建redis集群_第4张图片

(2)开启aof持久化以及aof持久化生成的文件

Linux搭建redis集群_第5张图片

(3)开启集群功能

Linux搭建redis集群_第6张图片

(4)集群节点的配置文件

Linux搭建redis集群_第7张图片

# 切换至 7000 目录下
cd 7000/
# 将 redis.conf 分别复制到 7001-7006 目录
cp redis.conf ../7001
cp redis.conf ../7002
cp redis.conf ../7003
cp redis.conf ../7004
cp redis.conf ../7005
cp redis.conf ../7006
# 将 7001-7005 各个 redis.conf 配置文件端口
# 以及aof持久化生成的文件和集群节点的配置文件修改为对应的端口号
# 即 7001-7005
# 或者依次打开 7001-7005 目录依次修改
# 可采用 sed 和 vim
sed -i "s/7000/7001/g" ../7001/redis.conf
sed -i "s/7000/7002/g" ../7002/redis.conf
sed -i "s/7000/7003/g" ../7003/redis.conf
sed -i "s/7000/7004/g" ../7004/redis.conf
sed -i "s/7000/7005/g" ../7005/redis.conf
# 查看各个配置文件是否更改成功
cat ../7001/redis.conf | grep 7001
cat ../7002/redis.conf | grep 7002
cat ../7003/redis.conf | grep 7003
cat ../7004/redis.conf | grep 7004
cat ../7005/redis.conf | grep 7005
# 切换至 redis_cluster 目录
cd ../redis_cluster/
# 分别启动 7001-7005 的 redis
redis-server 7000/redis.conf
redis-server 7001/redis.conf
redis-server 7002/redis.conf
redis-server 7003/redis.conf
redis-server 7004/redis.conf
redis-server 7005/redis.conf
# 查看 redis 是否启动
ps -ef| grep redis
root      18839      1  0 22:58 ?        00:00:00 redis-server 192.168.112.34:7000 [cluster]
root      18843      1  0 22:58 ?        00:00:00 redis-server 192.168.112.34:7001 [cluster]
root      18847      1  0 22:58 ?        00:00:00 redis-server 192.168.112.34:7002 [cluster]
root      18851      1  0 22:59 ?        00:00:00 redis-server 192.168.112.34:7003 [cluster]
root      18855      1  0 22:59 ?        00:00:00 redis-server 192.168.112.34:7004 [cluster]
root      18859      1  0 22:59 ?        00:00:00 redis-server 192.168.112.34:7005 [cluster]
root      18865   2891  0 22:59 pts/1    00:00:00 grep --color=auto redis

4.部署集群

(1)源码安装ruby依赖,返回安装软件目录

# 将下载好的 ruby 源码包上传至服务器
# 解压 ruby 安装包
tar -zxvf ruby-3.0.3.tar.gz -C /usr/local/
# 也可通过 yum 安装 ruby
# 这里我们二选一 自行选择
# yum -y install ruby
# 移动至 ruby-3.0.3 目录
cd /usr/local/ruby-3.0.3/
# 编译安装
./configure
make
make install
# 查看 ruby 版本
ruby -v
# 出现以下信息则表示安装成功
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]

(2)安装集群管理工具

# 将下载好的 redis-4.0.3.gem 上传至 /usr/local/redis-4.0.8/
# 切换至 /usr/local/redis-4.0.8 目录
cd /usr/local/redis-4.0.8/
# 安装集群管理工具
gem install -l redis-4.0.3.gem
# 输出以下内容则表示成功
Successfully installed redis-4.0.3
Parsing documentation for redis-4.0.3
Installing ri documentation for redis-4.0.3
1 gem installed

(3)将集群管理程序复制到/usr/local/bin/

cp /usr/local/redis-4.0.8/src/redis-trib.rb /usr/local/bin/redis-trib

(4)创建集群

redis-trib create --replicas 1 192.168.112.34:7000 192.168.112.34:7001 192.168.112.34:7002 192.168.112.34:7003 192.168.112.34:7004 192.168.112.34:7005
# 输出以下内容
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.112.34:7000
192.168.112.34:7001
192.168.112.34:7002
Adding replica 192.168.112.34:7003 to 192.168.112.34:7000
Adding replica 192.168.112.34:7004 to 192.168.112.34:7001
Adding replica 192.168.112.34:7005 to 192.168.112.34:7002
M: 2f4dbcd260b4a532754cadce92dfe40346f474a9 192.168.112.34:7000
 slots:0-5460 (5461 slots) master
M: b363376598db2e278fd3d79013ceb7e0570e17ee 192.168.112.34:7001
 slots:5461-10922 (5462 slots) master
M: d3cbd564a1393dd4f5e46f0f0206b093a1983c54 192.168.112.34:7002
 slots:10923-16383 (5461 slots) master
S: f33ea1093ac495e16e9c0f71f1bf8209ffe39f4f 192.168.112.34:7003
 replicates 034c9b6e9e42f4dcadc752df4a53260b4d2f474a
S: c79bf2c6bf3c9dc41995d886a451a166c3095c1b 192.168.112.34:7004
 replicates eb7e0570ed793376cb36278fd3598db2e01e17e3
S: 587f8445440a4c954d60bea22c75944532c5c1b2 192.168.112.34:7005
 replicates d3d83cbd563de41939b093c546f0a4a14f5f0206
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 192.168.112.34:7000)
M: 2f4dbcd260b4a532754cadce92dfe40346f474a9 192.168.112.34:7000
 slots:0-5460 (5461 slots) master
 1 additional replica(s)
M: d3cbd564a1393dd4f5e46f0f0206b093a1983c54 192.168.112.34:7002
 slots:10923-16383 (5461 slots) master
 1 additional replica(s)
M: b363376598db2e278fd3d79013ceb7e0570e17ee 192.168.112.34:7001
 slots:5461-10922 (5462 slots) master
 1 additional replica(s)
S: f33ea1093ac495e16e9c0f71f1bf8209ffe39f4f 192.168.112.34:7003
 slots: (0 slots) slave
 replicates 0346e92df4a532e42f4dbccadc754d260f474a9b
S: c79bf2c6bf3c9dc41995d886a451a166c3095c1b 192.168.112.34:7004
 slots: (0 slots) slave
 replicates 376598db2e01e17eeb36278fd3d7933ceb7e0570
S: 587f8445440a4c954d60bea22c75944532c5c1b2 192.168.112.34:7005
 slots: (0 slots) slave
 replicates e46f0a194a1393dd4f5f020683b093c54d3cbd56
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 注意:
# #######
#这里需要注意给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
#--replicascas参数制定集群中每个主节点配置几个从节点,这里设置为1.节点列表顺序用于确定主从角色,先主节点之后是从节点

(5)检查集群完整性

redis-trib check 192.168.112.34:7000

(6)测试

# 连接 7000 redis
redis-cli -h 192.168.112.34 -p 7000 -c
192.168.112.34:7000> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:414
cluster_stats_messages_received:414
# 添加数据
set 123456
-> Redirected to slot [10439] located at 192.168.112.34:7001
OK

5.添加或移除节点

(1)添加从节点

# 切换至 /usr/local/redis/redis_cluster/ 目录
cd /usr/local/redis-4.0.8/redis_cluster/
# 创建 7006 节点目录
mkdir 7006
# 将 7000 配置文件拷贝至 7006
cp 7000/redis.conf 7006/
# 修改配置文件内容
sed -i "s/7000/7006/g" 7006/redis.conf
# 启动 7006 节点
redis-server 7006/redis.conf
# 将创建集群时候产生的 hash 值复制
redis-trib.rb add-node --slave --master-id 2f4dbcd260b4a532754cadce92dfe40346f474a9 192.168.112.34:7006 192.168.112.34:7000

Linux搭建redis集群_第8张图片

 (2) 添加主节点

# 创建 7007 节点目录
mkdir 7007
# 将 7000 配置文件拷贝至 7007
cp 7000/redis.conf 7007/
# 修改配置文件内容
sed -i "s/7000/7007/g" 7007/redis.conf
# 启动 7006 节点
redis-server 7007/redis.conf
# 槽点重新分配
redis-trib.rb reshard 192.168.112.34:7000
# 添加槽点后按照提示输入
Source node #1: all
Do you want to proceed with the proposed reshard plan(yes/no)? yes
# 出现 7007 则表示成功

 (3)删除节点

# 删除 7005 节点
redis-trib.rb del-node 192.168.112.34:7000 587f8445440a4c954d60bea22c75944532c5c1b2

你可能感兴趣的:(linux,redis)