Redis集群搭建的方式有多种,例如使用zookeeper(以前的redis经常配合zookeeper来做集群,因为原来没有官方的支持)等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构(又叫分布式结构),每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
redis-cluster的优势
1、官方推荐
2、去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。
3、管理方便,后续可自行增加或摘除节点,移动分槽等等。
4、简单,易上手。
实验准备
准备全新的三台机器,一台机器两个角色,六个节点的集群。正常在公司应该是一个节点,一个redis。
现在是3个节点,6个redis。
6个redis怎么做?
把端口分开就行了,每一个端口代表一个redis,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同。
操作
环境为三台服务器:centos7.9
(一)在安装集群之前,需要在服务器上安装ruby环境(三台机器相同操作)。
yum install centos-release-scl-rh 安装ruby yum源
[root@redis1 src]# yum search ruby 查看ruby的主包
[root@redis1 src]# yum install -y rh-ruby26-ruby
[root@redis1 src]# scl enable rh-ruby26 bash 刷新环境
[root@redis1 src]# ruby -v 查看ruby版本
[root@redis1 src]# gem install redis 安装redis的库
三台机器相同操作
(二)安装redis (三台机器相同操作)
(三)创建节点目录(三台机器相同操作,注意端口号的不一样)
[root@redis1 redis-6.2.6]# mkdir data在redis的安装目录下,创建一个date的目录(存放数据的目录)
[root@redis1 redis-6.2.6]# mkdir cluster创建一个cluster的目录,存放不同节点的配置文件的目录
cd cluster/ 注意下面这三行不一样
[root@redis1 cluster]# mkdir 7000 7001
[root@redis2 cluster]# mkdir 7001 7002
[root@redis3 cluster]# mkdir 7002 7000
systemctl stop redis 先关掉服务
(四)拷贝配置文件 控制节点操作,把这个配置文件分别拷到上面创建的六个目录里面
1
[root@redis1 cluster]# cd ..
[root@redis1 redis-6.2.6]# cp redis.conf cluster/7000
[root@redis1 redis-6.2.6]# cp redis.conf cluster/7001
2
[root@redis2 cluster]# cd ..
[root@redis2 redis-6.2.6]# cp redis.conf cluster/7001
[root@redis2 redis-6.2.6]# cp redis.conf cluster/7002
3
[root@redis3 cluster]# cd ..
[root@redis3 redis-6.2.6]# cp redis.conf cluster/7002
[root@redis3 redis-6.2.6]# cp redis.conf cluster/7000
(五)修改集群配置文件(主要是端口和ip,三台机器相同操作)
bind 192.168.22.156 改成自己的ip # **绑定局域网ip,使得三台服务器可相互访问 daemonize yes // redis后台运行,原来是用的&,修改为yes
pidfile /var/run/redis_7000.pid // pid文件,运行多个实例时,需要指定不同的pid文件,一共6个端口,先改7000
port 7000 // 监听端口,运行多个实例时,需要指定不同的端口
tcp-backlog 511 日志服务器的端口
tcp-keepalive 0 长链接
loglevel notice // 日志等级
logfile /var/log/redis_7000.log // 日志文件位置 运行多实例时,需要修改不同的端口
databases 16 // 可用数据库数
dir /root/redis-6.2.6/data //存放数据的目录
appendonly yes // redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
appendfilename "appendonly.aof" // AOF文件名称
appendfsync everysec // 表示对写操作进行累积,每秒同步一次
no-appendfsync-on-rewrite yes // AOF 自动重写
auto-aof-rewrite-percentage 80-100 // 重写百分比
auto-aof-rewrite-min-size 64mb
打开注释并修改的如下:
先看看有没有默认配置,没有把它打开
#如下为集群配置 cluster-enabled yes #启用集群
cluster-config-file nodes-7000.conf #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 5000 #集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-slave-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长,注意新版本此选项为:cluster-replica-validity-factor
#cluster-migration-barrier 1
cluster-require-full-coverage yes #集群中的所有slot(16384个)全部覆盖,才能提供服务
提示 可以在一台服务器上面修改好了scp到每台服务器对应的目录下面,然后修改ip和端口还有pid号日志存放文件和配置文件中的cluster-config-file nodes-7000.conf对应不同的端口!
[root@redis1 7000]# vim redis.conf
[root@redis1 7000]# cp redis.conf ../7001/
cp:是否覆盖"../7001/redis.conf"? yes
[root@redis1 7000]# scp redis.conf 192.168.22.169:/root/redis-6.2.6/cluster/7001
[root@redis1 7000]# scp redis.conf 192.168.22.169:/root/redis-6.2.6/cluster/7002
[root@redis1 7000]# scp redis.conf 192.168.22.170:/root/redis-6.2.6/cluster/7000
[root@redis1 7000]# scp redis.conf 192.168.22.170:/root/redis-6.2.6/cluster/7002
[root@redis1 cluster]# cd 7001
[root@redis1 7001]# vim redis.conf
[root@redis2 7002]# vim redis.conf
[root@redis2 7001]# vim redis.conf
[root@redis3 7000]# vim redis.conf
[root@redis3 7002]# vim redis.conf
(六)启动三台机器上面的每个节点(三台机器相同操作)
[root@redis1 redis-6.2.6]# cd src/
[root@redis1 src]# ./redis-server ../cluster/7000/redis.conf
[root@redis1 src]# ./redis-server ../cluster/7001/redis.conf
[root@redis2 redis-6.2.6]# cd src/
[root@redis2 src]# ./redis-server ../cluster/7001/redis.conf
[root@redis2 src]# ./redis-server ../cluster/7002/redis.conf
[root@redis3 redis-6.2.6]# cd src/
[root@redis3 src]# ./redis-server ../cluster/7000/redis.conf
[root@redis3 src]# ./redis-server ../cluster/7002/redis.conf
(七)创建集群(在控制节点上面操作即可,剩余机器不用操作)
Redis是根据IP和Port的顺序,确定master和slave的,所以要排好序,再执行。
在第一台机器执行。
[root@redis1 src]# ./redis-cli --cluster create 192.168.22.156:7000 192.168.22.156:7001 192.168.22.169:7001 192.168.22.169:7002 192.168.22.170:7002 192.168.22.170:7000 --cluster-replicas 1
已经好了。去查看验证一下。
(八)查看集群状态可连接集群中的任一节点,此处连接了集群中的节点
登录集群客户端,-c标识以集群方式登录。 cluster info //查看集群信息
设置lisi,他把东西存在5798这个槽了,到了169的7001节点上,不管它到哪,都可以get,也可以在其他机器查。
不管在哪查,它都能帮你去真正存储数据的那台机器上查询数据。
检查集群状态:任意服务器都可以检查
实验成功。
【注意】少熬夜,多看书