centos redis 集群搭建
Redis集群详解
Redis有三种集群模式,分别是:
- 主从模式
- Sentinel模式
- 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持久化,我后续再写一篇相关的资料或找度娘了解了。。