redis-cluster集群搭建

来源:互联网 发布:aix db2创建数据库实例 编辑:程序博客网 时间:2024/04/28 18:41

本人最近在搭建一套主从复制+高可用+多master的redis cluster集群,搭建环境是CentOS7,redis版本3.2.8。
提醒:一定要养成拍摄快照的习惯!

1、补充redis-trib.rb文件基本知识

redis-rib.rb是redis的集群管理工具,集成在redis的src目录下,是redis作者使用ruby脚本语言编写的,此工具提供了一下功能:
1、create:创建集群
2、check:检查集群
3、info:查看集群信息
4、fix:修复集群
5、reshard:在线迁移slot
6、rebalance:平衡集群节点slot数量
7、add-node:将新节点加入集群
8、del-node:从集群中删除节点
9、set-timeout:设置集群节点间心跳连接的超时时间
10、call:在集群全部节点上执行命令
11、import:将外部redis数据导入集群

2、搭建redis集群

我使用了三台虚拟机,每台两个节点,创建3个master、3个slave环境。
下载

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

解压

tar -zxf redis-3.2.8.tar.gz

安装gcc环境

yum install gcc

编译

cd redis-3.2.8make && make install

修改配置文件
将redis-conf文件复制到/etc/redis/目录下,文件名改为7001.conf,然后修改如下配置:

#自己定义的端口号port 7001#使该实例支持集群cluster-enabled yes#集群配置文件,不能人工编译,属于集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等cluster-config-file /etc/redis/redis-cluster/nodes-7001.conf#集群中节点能够失联的最长时间,如果超时会启动故障迁移cluster-node-timeout 15000#开启守护进程,可以后台运行daemonize yes#后台运行时会指定一个pid写入此文件pidfile /var/run/redis_7001.pid #持久化文件存放路径dir  /var/redis/7001#log文件存放路径logfile /var/log/redis/7001.log#绑定本机器的ipbind 192.168.8.133#开启aof持久化appendonly yes

配置完成后穿件相关的目录,每个redis实例配置文件只需替换7001,不同机器绑定各自的ip

将redis安装为服务
vim /lib/systemd/system/redis-7001.service

[Unit] Description=redis service Wants=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /etc/redis/7001.conf [Install] WantedBy=multi-user.target

重新载入
systemctl daemon-reload
设置开机启动
systemctl enable redis-7001
启动redis
systemctl start redis-7001
关闭防火墙,你也可以开放相应端口

#关闭systemctl stop firwalld#开机不会重启systemctl disable firwalld

这是成功安装一个redis实例,后面的安装与之类似。将所有redis实例安装完成并启动成功后,开始进行下一步。
安装ruby

yum install rubyyum install rubygemsyum install redis

可能会报此错误:

ERROR:  Could not find a valid gem 'redis' (>= 0), here is why:          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://rubygems.org/latest_specs.4.8.gz)

解决方案:

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem gem install redis

出现如下结果说明成功:

Successfully installed redis-3.3.0Parsing documentation for redis-3.3.0Installing ri documentation for redis-3.3.01 gem installed

将redis-trib.rb复制到/usr/local/bin目录下

cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin/

最重要一步:创建集群

redis-trib.rb create --replicas 1 192.168.8.132:7007 192.168.8.132:7008 192.168.8.129:7003 192.168.8.129:7004 192.168.8.133:7005 192.168.8.133:7006#replicas 1 代表每个master有一个slave

出现如下结果说明安装成功:

这里写图片描述
可能会出现的错误及解决方案

1、Sorry, can’t connect to node

确认一下此端口节点是否开启,端口是否开放,并确认配置文件bind绑定的是否是本机ip

2、Waiting for the cluster to join…一直停不下来:

原因一:确认一下所有节点是否启动,每个机器是否集群总线端口,
原因二:确认每个配置文件bind绑定的是本机ip,如果绑定回环ip可能会出现此结果;
原因三:如果以上都排除还是无法成功,那么可能是redis版本有问题,我开始时redis版本使用的是3.2.4一直出现这个问题,需要重新安装别的版本;

3、[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains somekey in database 0

可能是之前有安装过redis集群,此时需要将集群配置文件和本地的持久化文件删除,然后重启redis。