redis 6个节点(3主3从),始终一个节点不能启动

文章讲述了在尝试启动Redis节点时遇到的问题,由于内存不足导致进程被杀。通过检查日志和机器内存,发现内存已满。解决方法是升级机器配置并重启Redis服务。

在这里插入图片描述
redis节点,始终有一个节点不能启动起来

1.修改了配置文件 protected-mode no,重启

修改了配置文件 protected-mode no,重启redis问题依然存在

2、查看/var/log/message的redis日志

Aug 21 07:40:33 redisMaster kernel: Out of memory: Kill process 31814 (redis-server) score 193 or sacrifice child
Aug 21 07:40:33 redisMaster kernel: Killed process 31814 (redis-server) total-vm:1675000kB, anon-rss:1537180kB, file-rss:0kB, shmem-rss:0kB

3、查看机器内存


              total        used        free      shared  buff/cache   available
Mem:           7552        7202         131           0         217         119

说明机器内存没有了,所以会杀死节点

4、升配置机器,重启redis,节点能够启动成功

cd /data/cluster/7001  && redis-server redis.conf
cd /data/cluster/7002  && redis-server redis.conf
cd /data/cluster/7003  && redis-server redis.conf
cd /data/cluster/7004  && redis-server redis.conf
cd /data/cluster/7005  && redis-server redis.conf
cd /data/cluster/7006  && redis-server redis.conf
<think>我们正在讨论的是Redis Sentinel的配置,特别是如何启动多个Redis服务以实现高可用。根据用户的问题,我们需要启动3Redis节点一个节点,两个从节点)和3个Sentinel节点,总共6个服务。下面我将详细说明步骤。 ### 步骤1:安装Redis 首先,确保在所有服务器上安装了Redis。如果还没有安装,可以使用以下命令(以Ubuntu为例): ```bash sudo apt update sudo apt install redis-server ``` 安装完成后,Redis服务会自动启动,但我们需要配置多个实例,因此先停止默认服务: ```bash sudo systemctl stop redis-server ``` ### 步骤2:配置Redis从实例 我们需要配置一个节点和两个从节点。假设我们有三个服务器(或同一服务器的三个端口): - 节点:192.168.1.100:6379 - 从节点1:192.168.1.101:6379 - 从节点2:192.168.1.102:6379 #### 节点配置(192.168.1.100) 编辑节点的配置文件(通常为`/etc/redis/redis.conf`): ```conf bind 0.0.0.0 port 6379 daemonize yes logfile "/var/log/redis/redis.log" dir /var/lib/redis # 其他配置保持默认 ``` #### 从节点配置(192.168.1.101和192.168.1.102) 在每个从节点的配置文件中,除了上述基本配置外,还需要指定节点: ```conf slaveof 192.168.1.100 6379 ``` #### 启动Redis节点 分别启动三个Redis节点: ```bash redis-server /path/to/redis.conf ``` 验证从状态: ```bash redis-cli -h 192.168.1.100 info replication # 应显示role:master和两个slave ``` ### 步骤3:配置Sentinel 我们需要三个Sentinel节点,每个节点监控同一个节点。Sentinel默认端口是26379。 #### Sentinel配置(每个节点) 创建三个Sentinel配置文件(例如`sentinel1.conf`, `sentinel2.conf`, `sentinel3.conf`),内容如下: ```conf port 26379 daemonize yes logfile "/var/log/redis/sentinel.log" sentinel monitor mymaster 192.168.1.100 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000 sentinel parallel-syncs mymaster 1 ``` 注意: - `mymaster`是节点的别名。 - `2`表示需要至少两个Sentinel同意才能判断节点失效。 ### 步骤4:启动Sentinel 分别启动三个Sentinel节点: ```bash redis-sentinel /path/to/sentinel1.conf redis-sentinel /path/to/sentinel2.conf redis-sentinel /path/to/sentinel3.conf ``` ### 步骤5:验证配置 检查Sentinel状态: ```bash redis-cli -p 26379 sentinel master mymaster sentinel slaves mymaster sentinel sentinels mymaster ``` ### 服务启动总结 我们总共启动6个服务: - 3Redis服务(一个节点,两个从节点) - 3个Sentinel服务 ### 注意事项 1. **资源分配**:每个服务都需要独立的配置文件,避免端口冲突。 2. **高可用部署**:建议将Sentinel节点部署在不同的物理服务器上,避免单点故障[^2][^4]。 3. **防火墙设置**:确保节点之间的端口(6379和26379)可访问。 ### 故障转移验证 可以手动停止节点Redis服务,观察Sentinel日志,看是否自动选举新的节点。 ### 相关问题 1. 如何配置Redis Sentinel的自动故障转移? 2. Redis Sentinel和Redis Cluster有什么区别? 3. 如何监控Redis Sentinel集群的健康状态?</think>### 配置 Redis Sentinel 启动多服务指南 在 Redis Sentinel 架构中,启动 **3Redis 节点 + 3 个 Sentinel 节点** 需要启动 6 个独立服务。以下是详细操作流程: --- #### 一、服务启动清单 | 服务类型 | 数量 | 端口示例 | 配置文件示例 | |----------------|------|--------------|--------------------| | Redis 节点 | 1 | 6379 | `redis-master.conf`| | Redis节点 | 2 | 6380, 6381 | `redis-slave1.conf`<br>`redis-slave2.conf`| | Sentinel 节点 | 3 | 26379, 26380, 26381 | `sentinel1.conf`<br>`sentinel2.conf`<br>`sentinel3.conf`| --- #### 二、分步操作流程 1. **启动 Redis 节点** ```bash redis-server /path/to/redis-master.conf ``` 配置文件关键项: ```conf bind 0.0.0.0 port 6379 daemonize yes requirepass your_redis_password # 节点密码 ``` 2. **启动 Redis节点** ```bash redis-server /path/to/redis-slave1.conf # 端口 6380 redis-server /path/to/redis-slave2.conf # 端口 6381 ``` 从节点配置需指向节点: ```conf slaveof 127.0.0.1 6379 # 节点IP和端口 masterauth your_redis_password # 节点密码 ``` 3. **启动 Sentinel 节点** ```bash redis-sentinel /path/to/sentinel1.conf # 端口 26379 redis-sentinel /path/to/sentinel2.conf # 端口 26380 redis-sentinel /path/to/sentinel3.conf # 端口 26381 ``` Sentinel 配置示例: ```conf port 26379 sentinel monitor mymaster 127.0.0.1 6379 2 # 监控节点 sentinel auth-pass mymaster your_redis_password sentinel down-after-milliseconds mymaster 5000 # 5秒无响应判为宕机 ``` --- #### 三、关键配置说明 1. **Sentinel 集群要求** - 至少需要 **3 个 Sentinel 节点** 才能触发自动故障转移(quorum=2)[^4] - 节点应部署在不同物理服务器避免单点故障[^2] 2. **从复制验证** ```bash redis-cli -p 6379 info replication # 查看节点状态 redis-cli -p 6380 info replication # 查看从节点同步 ``` 3. **Sentinel 状态检查** ```bash redis-cli -p 26379 sentinel masters # 查看监控的节点 redis-cli -p 26379 sentinel slaves mymaster # 查看从节点列表 ``` --- #### 四、高可用验证测试 1. **模拟节点宕机** ```bash redis-cli -p 6379 DEBUG SEGFAULT # 强制节点崩溃 ``` 2. **观察故障转移** - Sentinel 日志将显示选举新节点过程 - 剩余从节点自动切换同步目标[^4] 3. **客户端重连** 客户端通过 Sentinel 获取新节点地址: ```bash redis-cli -p 26379 sentinel get-master-addr-by-name mymaster ``` --- #### 五、最佳实践建议 1. **端口隔离** Redis 服务端口(6379~)与 Sentinel 端口(26379~)需分开防火墙策略 2. **资源分配** 每个服务需独立 CPU/Memory 资源,避免资源竞争[^3] 3. **配置同步** 使用 Ansible/Puppet 批量管理配置文件,确保参数一致性 4. **监控告警** 对 Sentinel 的 `+odown`(客观宕机)事件设置告警 > **部署拓扑示例** > ```mermaid > graph LR > Client-->Sentinel1[Sentinel:26379] > Client-->Sentinel2[Sentinel:26380] > Client-->Sentinel3[Sentinel:26381] > subgraph Redis Cluster > Master[Master:6379]-->Slave1[Slave:6380] > Master-->Slave2[Slave:6381] > end > Sentinel1-.监控.->Master > Sentinel2-.监控.->Master > Sentinel3-.监控.->Master > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值