Linux下部署和管理redis集群方法详解

本文使用三台服务器搭建6个redis实例,详细介绍在CentOS 7.2下创建和管理Redis集群的方法。安装过程中,有很多坑哦,希望我的教程对大家有所帮助。

系统环境

操作系统:CentOS 7.2 x64

服务器IP:10.10.10.1、10.10.10.2、10.10.10.3

安装redis和ruby

需要在三台服务器上安装redis、ruby,安装过程不多讲(saltstack、ansible)。

安装redis

安装redis前需要安装Fedora的yum仓库,也可以直接在redis官网下载安装包后源码安装(点击查看源码安装方法),如此便不用安装epel-release 。

yum -y install epel-release

yum -y install redis redis-trib

附:yum安装,很可能没有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,依次执行如下命令:

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 #使rvm生效

安装ruby

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

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

gem install redis

配置环境

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

创建实例目录

mkdir -p /data/RedisCluster
mkdir /data/RedisCluster/700{0,1}

依次在另外两台服务器创建集群目录7002、7003和7004、7005。

创建配置文件

基本配置(redis.conf)如下,每个实例的端口号和集群所在文件夹名相同即可:

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

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

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

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

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

感谢您的支持与帮助

支付宝扫一扫打赏

微信扫一扫打赏