运维之道 | Redis 集群搭建

Redis 集群搭建

集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机。同时每个节点至少有一个备份节点,所以下面最少需要创建使用6台主机,才能完成Redis Cluster 集群搭建(主节点、备份节点由redis-cluster集群自动确定)
在这里插入图片描述

一、主机规划

本次实验将所有主备节点规划至一台虚拟机上

集群 IP Port
Master-1 127.0.0.1 7001
Master-2 127.0.0.1 7002
Master-3 127.0.0.1 7003
Backup-1 127.0.0.1 7004
Backup-2 127.0.0.1 7005
Backup-3 127.0.0.1 7006

二、Redis 安装

运维之道 | Redis 安装部署

三、Redis 集群环境部署

因为 redis-trib.rb 是由 ruby 语言编写的所以需要安装 ruby 环境

否则在执行下述四-7步 命令会出现 /usr/bin/env: ruby: 没有那个文件或目录 错误

  • 安装 ruby
[root@localhost src]# wget https://cache.ruby-china.com/pub/ruby/2.6/ruby-2.6.0.tar.bz2
[root@localhost src]# tar xvjf ruby-2.6.0.tar.bz2
[root@localhost ruby-2.6.0]# ./configure && make && make install 
  • 安装 rubygem
[root@localhost src]# wget http://rubygems.org/downloads/redis-3.3.0.gem
[root@localhost src]# gem install-I redis-3.3.0.gem
[root@localhost src]# gem list--check redis gem
  • 安装 redis-trib.rb
[root@localhost src]# cp ${REDIS_HOME}/src/redis-trib.rb /usr/local/bin

ruby包下载库(原本可通过RVM安装ruby,但因为pgp公钥无法使用,便使用源码安装)
RVM安装ruby方法
gem install redis


四、Redis 集群部署

1、创建redis节点安装目录
[root@localhost ~]# mkdir /usr/local/redis_cluster
2、在节点目录下创建节点文件夹
[root@localhost redis_cluster]# pwd
/usr/local/redis_cluster

[root@localhost redis_cluster]# mkdir {7001..7006}
[root@localhost redis_cluster]# ls
7001  7002  7003  7004  7005  7006

PS:为方便测试,以端口号规划文件夹

3、将redis.conf配置文件分别拷贝至7001-7006文件夹下
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7001
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7002
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7003
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7003
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7004
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7005
[root@localhost redis-3.0.7]# cp redis.conf /usr/local/redis_cluster/7006
4、分别修改7001-7006文件夹下的配置文件
bind 192.168.182.10                    ///绑定服务器IP地址
port 7001                              ///修改端口号,以此来区分redis实力
daemonize yes 						   ///进程后台运行
pidfile /var/run/redis-7001.pid 	   ///修改pid进程文件名,以端口号命名
logfile /usr/local/redis_cluster/7001/redis-7001.log ///修改日志文件名称,以端口号命名
cluster-enabled yes 				   ///开启集群
cluster-config-file nodes-7001.conf    ///配置每个节点的配置文件,以端口号命名
cluster-node-timeout 15000  	   	   ///配置集群节点的超时时间,可改可不改
appendonly yes 						   ///启动AOF增量持久化策略,可改可不改
appendfsync always 					   ///发生改变就记录日志

上述为7001节点的配置文件,7002-7006按上述修改即可,只需修改端口号

:%s/7001/700x/g

在vim编辑窗口中执行上述命令,替换每一行中所有端口号 7001 为 7002 - 6


5、将redis安装目录中redis-server启动文件拷贝到7001-7006文件夹中
  • 将存放redis-server启动文件的src目录拷贝至7001-7006目录下
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7001/
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7002/
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7003/
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7004/
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7005/
[root@localhost redis-3.0.7]# cp -r src/ /usr/local/redis_cluster/7006/
6、启动7001-7006redis节点服务
  • 启动服务
[root@localhost redis_cluster]# ./7001/src/redis-server ./7001/redis.conf 
[root@localhost redis_cluster]# ./7002/src/redis-server ./7002/redis.conf   
[root@localhost redis_cluster]# ./7003/src/redis-server ./7003/redis.conf   
[root@localhost redis_cluster]# ./7004/src/redis-server ./7004/redis.conf   
[root@localhost redis_cluster]# ./7005/src/redis-server ./7005/redis.conf   
[root@localhost redis_cluster]# ./7006/src/redis-server ./7006/redis.conf
  • 查看进程,服务是否正常启动
[root@localhost redis_cluster]# ps -ef | grep redis
root    10063    1  0 19:25 ?      00:00:00 ./7001/src/redis-server *:7001 [cluster]
root    10073    1  0 19:25 ?      00:00:00 ./7002/src/redis-server *:7002 [cluster]
root    10085    1  0 19:25 ?      00:00:00 ./7003/src/redis-server *:7003 [cluster]
root    10101    1  0 19:25 ?      00:00:00 ./7004/src/redis-server *:7004 [cluster]
root    10110    1  0 19:25 ?      00:00:00 ./7005/src/redis-server *:7005 [cluster]
root    10127    1  0 19:26 ?      00:00:00 ./7006/src/redis-server *:7006 [cluster]
7、创建集群

Redis 官方提供了 redis-trib.rb 集群创建工具,将该工具从安装目录拷贝至/usr/local/bin 目录下,后期可直接执行

[root@localhost src]# pwd
/usr/local/src/redis-3.0.7/src

[root@localhost src]# cp redis-trib.rb /usr/local/bin/   
  • 执行创建集群命令redis-trib.rb create --replicas 1
[root@localhost ~]# redis-trib.rb create --replicas 1 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 127.0.0.1:7006
  • redis-cluster集群自动分配主备节点
[root@localhost ruby-2.6.0]# redis-trib.rb create --replicas 1 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 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 706751e512da31bfa57913a6bd7d2dfa9b7613dc 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: aa0311afdfa0841bbbeb4bb2b5cf30d9bb0e89b3 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: d881ddb03725ea83573d228ebac72063671a8b4c 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 048c459e013c5e479348c1f54a84d8793d0fd04b 127.0.0.1:7004
   replicates 706751e512da31bfa57913a6bd7d2dfa9b7613dc
S: b88d19049a552912a59d554727034df7b9f18903 127.0.0.1:7005
   replicates aa0311afdfa0841bbbeb4bb2b5cf30d9bb0e89b3
S: 6a98961c76ede3e65e1c8f013e4d3360d95e8dce 127.0.0.1:7006
   replicates d881ddb03725ea83573d228ebac72063671a8b4c
  • yes 分配策略
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 127.0.0.1:7001)
M: 706751e512da31bfa57913a6bd7d2dfa9b7613dc 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: aa0311afdfa0841bbbeb4bb2b5cf30d9bb0e89b3 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: d881ddb03725ea83573d228ebac72063671a8b4c 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
M: 048c459e013c5e479348c1f54a84d8793d0fd04b 127.0.0.1:7004
   slots: (0 slots) master
   replicates 706751e512da31bfa57913a6bd7d2dfa9b7613dc
M: b88d19049a552912a59d554727034df7b9f18903 127.0.0.1:7005
   slots: (0 slots) master
   replicates aa0311afdfa0841bbbeb4bb2b5cf30d9bb0e89b3
M: 6a98961c76ede3e65e1c8f013e4d3360d95e8dce 127.0.0.1:7006
   slots: (0 slots) master
   replicates d881ddb03725ea83573d228ebac72063671a8b4c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

五、Redis 集群测试

1、通过info查看replication信息
[root@localhost ~]#redis-cli -h 127.0.0.1 -c -p 7001
127.0.0.1:7001> info replication
# Replication
role:master					///主节点信息
connected_slaves:1
slave0:ip=127.0.0.1,port=7004,state=online,offset=1569,lag=1		///备节点信息
master_repl_offset:1569
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1568
2、数据测试
[root@localhost ~]# redis-cli -h 127.0.0.1 -c -p 7001		///登录70001节点
127.0.0.1:7001> set mykey villian							///在当前master节点赋值
-> Redirected to slot [14687] located at 127.0.0.1:7003		///重定向至7003节点,进行增加数据
OK															///通过7003节点节点,发现7006是从节点
127.0.0.1:7003> keys *
1) "mykey"
127.0.0.1:7003> quit										///退出
[root@localhost ~]# redis-cli -h 127.0.0.1 -c -p 7006		///进入到7006节点查看该数据是否存在
127.0.0.1:7006> keys *
1) "mykey"

在这里插入图片描述


资料:https://www.imooc.com/article/288695
资料:http://gudaoyufu.com/?p=1230#redis_sentinel
视频:https://www.bilibili.com/video/av49517046?p=33
redis-cluster 管理工具redis-trib.rb详解
Redis详解 - 主从复制原理
redis cluster - 集群原理
redis cluster - 集群常用命令

发布了97 篇原创文章 · 获赞 10 · 访问量 3376

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103929174