Redis 集群部署及踩过的坑

本文详细介绍了如何在单台CentOS 6.7服务器上通过不同端口启动多个Redis实例并组建集群的过程,包括配置文件编写、Ruby环境安装及集群创建中遇到的问题与解决方案。

本文目标

要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑。

安装准备

centos版本:6.7

redis版本:3.2.3

安装方式:源码安装

服务器:1台

操作步骤

此处默认已安装好单台redis,如果不会可以参照《centos上安装redis

 

1、启动Redis多个实例

我们在Redis安装目录下创建目录cluster,并编写7000.conf~7005.conf 6个配置文件,这6个配置文件用来启动6个实例,后面将使用这6个实例组成集群。

以7000.conf为例,配置文件需要填写如下几项:

分别启动6个实例

启动成功后,看一下进程

至此,ip=192.168.186.91机器上创建了6个实例,端口号为port=7000~7005。

 

2、安装ruby

1)yum安装ruby和依赖的包。

2)使用gem这个命令来安装redis接口

这一步骤中出现了bug,度娘告诉我是Ruby版本太低,需要升级版本。

3)升级Ruby的版本

安装rvm,我不知道这是个什么东西,但是感觉像是Ruby的一个包管理器。

这一操作得到了:

gpg2 –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

然后利用该密钥下载Ruby并升级。

接着,source环境,让rvm可用。

查看Ruby可用版本

可以看到最新的版本是2.4.1,本文安装2.3.0

至此,我们升级了Ruby的版本。

4)安装gem redis接口

5)安装rubygems

到目前为止,我们的Ruby和运行redis-trib.rb需要的环境安装完成了。

 

3、Redis集群搭建

有了Ruby执行环境,可以开始将之前的6个实例组建成集群了。

有三个master,有三个是slave。 后面跟上6个实例就好了,形式就是ip:port

【此处有坑】

第一坑

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

第二坑

踩完第一坑后,继续执行,发现了第二坑,还好有度娘,但是网上各种说法都有(主要参照了《极客on之路》的博客),发现错误的原因是redis数据库没有清除。

第三坑

还是度娘靠谱,在《redis 跨机器集群启动出错》博客中找到了答案。

这是由于之间创建集群没有成功,需要将nodes.conf和dir里面的文件全部删除。

然后重启redis服务。

 

4、验证集群状态

登录集群客户端,-c标识以集群方式登录

查看集群状态

<think>嗯,用户这次明确要配置Redis一主一从集群,看来他不需要复杂的多节点部署,而是追求最简单的高可用方案。之前提供的引用里其实有线索:引用[2]提到哨兵模式,引用[3]展示了从节点配置,但用户特意强调"一主一从",说明场景可能比较轻量。 用户可能是个开发者正在搭建测试环境,或者小项目需要故障转移能力。他跳过了动态扩容和3主3从的方案,说明当前需求很聚焦。要注意的是,他提到"集群"但实际要的是主从复制+哨兵,这里需要区分Redis Cluster和主从复制的概念差异——不过既然他明确说一主一从,按后者实现更合适。 从引用[2]提取关键步骤时发现,它用docker部署但省略了哨兵配置细节。引用[3]的非docker方式反而更清晰,但用户如果习惯docker就需要转换表述。所以决定融合两种方案:先演示原生安装保证原理透明,再用docker实现快速部署,这样覆盖不同用户偏好。 特别注意两个技术细节:一是主从的持久化配置差异(主节点关AOF可能更好),二是哨兵quorum设置为1的适用场景。用户没提性能要求,所以推荐默认异步复制,但准备在"注意事项"里补充同步复制的选项。 安全问题不能忽略。引用[1]的--privileged有风险,要特别标注替代方案;防火墙设置容易遗漏,需要分开放置在步骤里。用户上次(引用[1]提到问题解决),所以把常见错误如目录权限、端口冲突专门列出来。 最后生成的扩展问题其实是对用户潜在需求的预判:他部署完一主一从后,很可能接着要监控或扩容,提前准备这些方向能减少他后续提问成本。不过"性能调优"放在最后,毕竟初期使用者更关注可用性。 </think>以下是配置Redis一主一从集群的完整方法,结合原生部署和Docker方案: --- ### **一、原生部署方案(推荐测试环境)** #### 1. **主节点配置**(192.168.1.128) ```bash # 创建配置文件 cat > redis-master.conf << EOF bind 0.0.0.0 port 6379 daemonize yes requirepass YourMasterPassword # 主节点密码 masterauth YourMasterPassword # 从节点访问主节点的密码 appendonly yes EOF # 启动主节点 redis-server redis-master.conf ``` #### 2. **从节点配置**(192.168.1.129) ```bash # 创建配置文件 cat > redis-slave.conf << EOF bind 0.0.0.0 port 6379 daemonize yes replicaof 192.168.1.128 6379 # 指定主节点IP和端口 masterauth YourMasterPassword # 主节点密码 requirepass YourSlavePassword # 从节点自身密码(可选) appendonly yes EOF # 启动从节点 redis-server redis-slave.conf ``` #### 3. **验证主从同步** ```bash # 连接主节点写入数据 redis-cli -h 192.168.1.128 > SET test_key "hello" # 连接从节点查询数据 redis-cli -h 192.168.1.129 > GET test_key # 应返回"hello" ``` --- ### **二、Docker部署方案(适合生产环境)** #### 1. **主节点容器** ```bash docker run -d --name redis-master \ -p 6379:6379 \ -v $(pwd)/master-data:/data \ redis:latest \ redis-server --requirepass "YourMasterPassword" \ --appendonly yes ``` #### 2. **从节点容器** ```bash docker run -d --name redis-slave \ -p 6380:6379 \ -v $(pwd)/slave-data:/data \ redis:latest \ redis-server --replicaof redis-master 6379 \ --masterauth "YourMasterPassword" \ --requirepass "YourSlavePassword" \ --appendonly yes ``` > **注意**:若跨主机部署,需将`--replicaof redis-master`替换为主节点实际IP --- ### **三、哨兵模式配置(实现自动故障转移)** #### 哨兵配置文件(sentinel.conf) ```conf sentinel monitor mymaster 192.168.1.128 6379 1 sentinel auth-pass mymaster YourMasterPassword sentinel down-after-milliseconds mymaster 5000 sentinel parallel-syncs mymaster 1 ``` #### 启动哨兵 ```bash redis-sentinel sentinel.conf ``` > **关键参数说明**: > - `down-after-milliseconds`: 主节点失联判定时间(毫秒) > - `parallel-syncs`: 故障转移时同时同步的新从节点数[^2] --- ### **四、验证高可用性** 1. **模拟主节点故障** ```bash docker stop redis-master ``` 2. **观察哨兵日志** ```log +switch-master mymaster 192.168.1.128 6379 192.168.1.129 6379 ``` 3. **从节点自动升级为主节点** ```bash redis-cli -h 192.168.1.129 info replication # 输出中 role:master 表示切换成功 ``` --- ### **注意事项** 1. **防火墙配置**:确保主从节点间端口互通(默认6379, 哨兵端口26379) 2. **数据持久化**:建议同时开启`appendonly yes`和`save 900 1`双重保障 3. **密码安全**:主从节点密码需一致,否则同步失败[^3] 4. **容器网络**:Docker部署时建议使用自定义网络 `--network redis-net` > **预警**: > - 若从节点无法连接主节点,检查主节点`bind 0.0.0.0`配置 > - Docker挂载目录需赋予`chmod -R 777`权限(或匹配容器内redis用户UID)[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值