Redis部署cluster集群模式及常规命令

本文使用三台服务器搭建6个redis实例,详细介绍在CentOS7.2下创建和管理Redis-Cluster集群的方法,希望我的经验对大家有帮助。

系统环境

基于CentOS7.2操作系统部署。

服务器IP 主机名 应用
10.10.10.1 REDIS-A Redist
ruby
10.10.10.2 REDIS-B
10.10.10.3 REDIS-C

安装redis和ruby

安装redis

也可以选择在Redis官网下载安装包后编译安装,本文只介绍yum安装方法。

yum -y install epel-release
yum -y install redis redis-trib

# 查找redis-trib.rb文件所在的rpm
# yum provides "*/redis-trib*"

安装rvm

CentOS 7.2 yum源的ruby版本是2.0.0,如果直接安装的话,在执行“gem install redis”时会报错:

redis requires Ruby version >= 2.2.2.

因此,必须通过rvm安装更新版本的ruby,依次执行如下命令:

# 导入rvm公钥
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
# 安装rvm
curl -sSL https://get.rvm.io | bash -s stable
# 使rvm生效
source /usr/local/rvm/scripts/rvm

安装ruby

# 查看支持的ruby版本
rvm list known
# 选择安装合适的ruby版本
rvm install 2.5.1
# 使ruby生效
rvm use 2.5.1
# 查看当前版本
ruby -v

现在终于可以执行安装过程中最关键的操作了:

gem install redis

配置环境

每台服务器配置两个redis实例,从7000~7005一共6个实例。

创建实例目录

# 10.10.10.1
mkdir -p /data/RedisCluster/700{0,1}
# 10.10.10.2
mkdir -p /data/RedisCluster/700{2,3}
# 10.10.10.3
mkdir -p /data/RedisCluster/700{4,5}

创建配置文件

基本配置redis.conf如下:

# 每个实例的端口号不同
port 7000
# 后台运行
daemonize yes
# 启用集群模式
cluster-enabled yes
# 禁用保护模式
protected-mode no
# 绑定当前主机
# 与protected-mode二选一
# bind 10.10.10.1
# 每个实例的配置文件路径
cluster-config-file /data/RedisCluster/7000/redis.conf
# 节点超时时间
cluster-node-timeout 6000
# 槽全覆盖,避免当节点宕机但槽未全覆盖时导致集群故障
cluster-require-full-coverage no
# 日志文件
logfile /data/RedisCluster/7000/logs/redis7000.log

依次在每台服务器上启动redis-server 7000~7005实例:

# 以redis7000为例
redis-server /data/RedisCluster/7000/redis.conf

创建集群

关闭防火墙或者开放相应的端口,然后在任意一台服务器上运行以下命令:

redis-trib create --replicas 1 10.10.10.1:7000 10.10.10.1:7001 10.10.10.2:7002 10.10.10.2:7003 10.10.10.3:7004 10.10.10.3:7005

成功创建redis集群。本人偷懒,将所有实例放在一台虚拟机上的…

查看某redis实例状态:

redis-cli -h 10.10.10.1 -c -p 7000
info replication

管理集群

redis-cluster通过redis-trib进行集群管理。本人直接安装redis-trib的软件包,而不是“ruby redis-trib.rb”脚本方式,因此可以直接执行redis-trib命令。

检查redis集群是否可用

操作集群

# 创建集群
# 一个redis集群最少3个主节点,每个节点1个从节点。最好先创建主节点,然后再添加从节点至对应的主节点
redis-trib create --replicas [m-s-ratio] [node-1] [node-2] [node-3] ...

# 检测集群
# 检测集群slot状态,如果没有分配完则表示集群有问题
redis-trib check [ip]:[port]

# 查看集群信息
# 查看key分布、slot数量和slave状态
redis-trib info [ip]:[port]

操作节点

# 删除节点
# 只能删除没有分配slot的节点,从集群中删出之后直接关闭实例
redis-trib del-node [ip]:[port] [node-id]

# 添加主节点
redis-trib add-node [new-node-ip]:[port] [dest-node-ip]:[port]

# 添加从节点
redis-trib add-node --slave --master-id [master-node-id] [new-node-ip]:[port] [dest-node-ip]:[port]

操作slot

# 平衡slot
redis-trib rebalance [ip]:[port]

# 迁移slot
redis-trib reshard [ip]:[port]
# redis-trib reshard --from [src-node-id] --to [dest-node-id] --slots [slots-quantity] [ip]:[port]

故障迁移

需要redis4以上版本才支持故障迁移。

redis-cli -h [ip] -p [port]
cluster failover
cluster nodes

原创文章禁止转载:技术学堂 » Redis部署cluster集群模式及常规命令

精彩评论

5+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏