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 - 集群常用命令