centos redis 集群搭建

Redis集群详解

Redis有三种集群模式,分别是:

  1. 主从模式 
  2. Sentinel模式
  3. Cluster模式

现在我想介绍的是Cluster模式的搭建方式:

Cluster模式介绍

sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。

cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。

使用集群,只需要将redis配置文件中的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

cluster集群特点:

  •  多个redis节点网络互联,数据共享
  •  所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
  •  不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
  •  支持在线增加、删除节点
  •  客户端可以连接任何一个主节点进行读写

环境配置:

操作系统:centos7.4

三台服务器IP和端口:

10.0.0.60    7001、7002

10.0.0.61    7003、7004

10.0.0.62    7005、7006

操作步骤:

1、下载最新版本redis,我现在用的是:redis-6.0.9.tar.gz,下载到/software下面,下载过程不在这里说明,自己可以去官网上下载,再上传到指定的目录

2、解压文件:

cd /software
tar -zxvf redis-6.0.9.tar.gz

3、安装redis的环境配置基本库,执行下面的命令安装:

yum -y install gcc gcc-c++ make tcl
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash

4、编译安装redis:

cd /software/redis-6.0.9/src
make && make install

5、创建用户和群组

groupadd redis
useradd redis -s /sbin/nologin -g redis

若出现多次创建时会提示有目录存在或mail目录存在,可以使用以下命令做删除用户目录 :

rm -rf /home/redis/
rm -f /var/spool/mail/redis 

6、创建数据目录和配置文件目录

mkdir /software/redis-6.0.9/cluster

#在10.0.0.60机器上创建以下目录 
mkdir -p /data/redis/cluster/redis_7001
mkdir -p /data/redis/cluster/redis_7002

#在10.0.0.61机器上创建以下目录 
mkdir -p /data/redis/cluster/redis_7003
mkdir -p /data/redis/cluster/redis_7004

#在10.0.0.62机器上创建以下目录 
mkdir -p /data/redis/cluster/redis_7005
mkdir -p /data/redis/cluster/redis_7006

7、对每台服务器的目录进行授予读取权限:

chown -R redis:redis /data/redis
chown -R redis:redis /software/redis-6.0.9

8、******设置配置文件******这一步骤很重要********************

10.0.0.60服务器上,若是61或62,则拷贝相应端口的配置文件名称,如61就是7003和7004,而62服务器就是7005和7006配置文件:

cp /software/redis-6.0.9/redis.conf  /software/redis-6.0.9/cluster/redis_7001.conf

cp  /software/redis-6.0.9/redis.conf  /software/redis-6.0.9/cluster/redis_7002.conf

配置文件内容以下,红色部分为根据每个实例需调整的地方:

bind 10.0.0.60
port 7001
daemonize yes
pidfile "/var/run/redis_7001.pid"
logfile "/software/redis-6.0.9/cluster/redis_7001.log"
dir "/data/redis/cluster/redis_7001"
masterauth 123456
requirepass 123456
appendonly no
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

比如是7002这个实例,则IP不用调整,其它跟端口有关系的部分都要由7001调整为7002

如下为10.0.0.61:7003实例的配置文件,当然前提是你配置的目录路径和我是一样的,若是不一样也得做相应调整

bind 10.0.0.61
port 7003
daemonize yes
pidfile "/var/run/redis_7003.pid"
logfile "/software/redis-6.0.9/cluster/redis_7003.log"
dir "/data/redis/cluster/redis_7003"
masterauth 123456
requirepass 123456
appendonly no
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000

9、若是防火墙有开启的就要开始端口了,因为我是一台服务器有两个实现,故两个端口都要开放

比如我的10.0.0.60服务器是7001和7002端口则需开放这两个端口

firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
#这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17001和17002
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
#重新更新防火墙状态
firewall-cmd --reload

若是服务器是10.0.0.61的就是开放7003和7004两个端口加上集群的端口:17003和17004

firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
#这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17003和17004
firewall-cmd --zone=public --add-port=17003/tcp --permanent
firewall-cmd --zone=public --add-port=17004/tcp --permanent
#重新更新防火墙状态
firewall-cmd --reload

若是服务器是10.0.0.62的就是开放7005和7006两个端口加上集群的端口:17005和17006

firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --zone=public --add-port=7006/tcp --permanent
#这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17005和17006
firewall-cmd --zone=public --add-port=17005/tcp --permanent
firewall-cmd --zone=public --add-port=17006/tcp --permanent
#重新更新防火墙状态
firewall-cmd --reload

10、进入各服务器的目录下,启动redis服务器,下面是在10.0.0.60服务器上的命令,若是其它服务器,则调整对应的配置文件名称即可,即调整红色部分的内容:

cd /software/redis-6.0.9/src
#若是在服务器61上,则是redis_7003.conf和redis_7004.conf,若是在服务器62上则是:redis_7005.conf和redis_7006.conf redis
-server ../cluster/redis_7001.conf redis-server ../cluster/redis_7001.conf

11、终于到创建集群的时刻了,以前低版本的还要安装ruby,若你的是低版本的,可在找下度娘,因为我现在用的是最新版本:6.0.9,所以可以直接创建集群:

redis-cli -a 123456 --cluster create 10.0.0.60:7001 10.0.0.60:7002 10.0.0.61:7003 10.0.0.61:7004 10.0.0.62:7005 10.0.0.62:7006 --cluster-replicas 1

 

 出现以上界面就表示创建成功了。。。

注意问题:

1、若出现这样的错误,就是你的服务器有端口未开放引起的。

 

 2、若出现这样的界面,则是因为创建过一次集群失败后,未将原来集群的初始化信息删除,需使用以下两个命令登陆各服务器的实例上执行:如下图二,一定要记住是每台服务器的实例都要登陆进行执行这两个命令:

 

图二:

 3、还有一个问题,就是若启动服务器失败,有可能是持久化文件配置有问题,可以尝试删除数据目录下:/data/redis/cluster/redis_7001,里面以*.rdb或*.aof结尾的文件,删除后再重新启动reis服务,我开始有遇到过这个问题,原因 是我开始是开启AOF持久化,后面关闭使用软件默认的RDB持久化,导到启动失败了。至于什么是RDB和AOF持久化,我后续再写一篇相关的资料或找度娘了解了。。

 

posted @ 2021-01-15 15:51  aaron616  阅读(228)  评论(0编辑  收藏  举报