redis配置文件daemonize、protected-mode

博客主要讲述Redis远程连接时的问题,在守护进程模式下指定配置文件开启服务,会提示端口被占用。解决办法是先将redis.conf中的daemonize设置为no,再进行后续操作。

1、protected-mode

#protected-mode yes
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会
本地进行访问,拒绝外部访问。要是开启了密码 和bind,可以开启。否 则最好关闭,设置为no。

2、daemonize

 redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启
 守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项
 pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
    当daemonize选项设置成no时,当前界面将进入redis的命令行界面,
    exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

但是会有个问题,当远程连接redis服务器时,在守护进程模式下,当需要指定配置文件的开启服务时如: ./redis-server …/redis.conf,这时就会提示端口被占用

2556:C 21 Jun 2019 00:51:06.780 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2556:C 21 Jun 2019 00:51:06.780 # Redis version=5.0.4,bits=64,commit=00000000,
modified=0,pid=2556, just started 2556:C 21 Jun 2019 00:51:06.780 # Configuration loaded

解决办法是现将redis.conf中daemonize设置为no再进行如下操作。

#找到该进程号,强制杀死
ps -ef | grep -i redis
kill -9 2557

在这里插入图片描述

<think>我们正在处理一个Redis Sentinel配置错误的问题。用户在执行`redis-sentinel sentinel26379.conf -sentinel`时遇到了错误: ``` *** FATAL CONFIG FILE ERROR (Redis 7.4.4) *** Reading the configuration file, at line 12 >>> '"-sentinel"' Bad directive or wrong number of arguments ``` 错误信息指出在配置文件的第12行有一个无效的指令或参数数量错误。但是,注意用户启动命令中包含了`-sentinel`参数,而实际上`redis-sentinel`命令已经是以哨兵模式运行,不需要再添加`-sentinel`参数。这可能是导致错误的原因之一。 然而,错误信息中提到了配置文件的第12行,所以我们需要检查配置文件。根据错误信息,第12行是`"-sentinel"`,这显然不是一个有效的配置指令。 另外,参考引用[1][2][3][4]中提供的配置示例,Sentinel配置文件中应该包含`port`、`sentinel monitor`等指令,而不会出现`-sentinel`这样的内容。 因此,问题可能有两个: 1. 启动命令中多余的`-sentinel`参数被错误地传递给了Redis Sentinel,导致它试图解析这个参数作为配置文件的一部分(或者可能是命令行参数解析的问题)。 2. 配置文件本身第12行确实有错误。 但是,错误信息明确指出了是在读取配置文件时出错,并且显示的内容是`"-sentinel"`,这通常意味着配置文件中的某一行写的是`-sentinel`(可能是作为一个指令),但Redis Sentinel配置中并没有这样的指令。 让我们结合引用内容分析: 引用[1][3][4]都展示了Sentinel配置文件的内容,其中包含`port`、`daemonize`、`sentinel monitor`等指令,没有出现`-sentinel`。 因此,我们推测配置文件的第12行可能是由于某种原因写入了`-sentinel`这个字符串。可能的原因包括: -配置文件中错误地添加了命令行参数。 - 配置文件被错误地编辑,导致多了一行无效内容。 另外,注意用户启动命令:`redis-sentinel sentinel26379.conf -sentinel`。这里,`-sentinel`作为命令行参数传递,但`redis-sentinel`命令的语法应该是: ``` redis-sentinel /path/to/sentinel.conf ``` 不需要额外的`-sentinel`参数。所以,这个多余的参数可能会被Redis Sentinel解释为另一个配置文件的路径,或者导致解析错误。 但是,错误信息中明确提到是配置文件中的第12行,所以问题更可能是配置文件本身的问题。 ### 解决方案 1. **修正启动命令**:去掉多余的`-sentinel`参数,使用正确的命令格式: ```bash redis-sentinel sentinel26379.conf ``` 2. **检查配置文件**:打开`sentinel26379.conf`,检查第12行(或者附近行)是否有无效内容。特别注意是否有类似`-sentinel`这样的行。如果有,删除该行。 根据引用[1][2][3][4]中的配置示例,一个基本的Sentinel配置文件应该类似这样: ```conf port 26379 daemonize no logfile "" dir /tmp sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 ``` 请确保配置文件中的每一行都是有效的配置指令,且参数数量正确。 3. **特别注意**:`sentinel monitor`指令后面必须跟4个参数(主节点名称、IP、端口、法定人数)。其他`sentinel`指令的参数数量也要检查。 4. **如果问题仍然存在**,请逐行检查配置文件,确保没有拼写错误和无效指令。可以使用`redis-sentinel /path/to/sentinel.conf --test`来测试配置文件(但是注意,Redis Sentinel可能不支持`--test`参数,Redis服务器支持`redis-server /path/to/redis.conf --test`)。对于Sentinel,我们通常只能通过启动来测试。 ### 修正后的步骤 1. 编辑配置文件,删除第12行的`-sentinel`(或任何导致该错误的行)。 2. 使用正确的命令启动: ```bash redis-sentinel sentinel26379.conf ``` ### 验证 启动后,使用以下命令连接Sentinel端口(默认26379)并检查状态: ```bash redis-cli -p 26379 > sentinel master mymaster ``` 应该能够看到监控的主节点信息。 ### 常见错误预防 - 不要在配置文件中包含命令行参数(如`-sentinel`)。 - 确保所有`sentinel`指令的参数数量正确,特别是`sentinel monitor`需要4个参数。 - 启动命令不要加多余的参数。 通过以上步骤,应该能解决该配置错误。 ### 相关问题 §§相关问题§§ 1. Redis Sentinel 监控多个主节点时如何配置? 2. 如何验证 Redis Sentinel 故障转移是否正常工作? 3. Redis Sentinel 和 Keepalived 在实现高可用方面的区别是什么?</think>### Redis Sentinel 配置文件解析错误解决方案 根据您遇到的 `Bad directive or wrong number of arguments` 错误和引用内容,以下是根本原因分析和解决方案: #### 错误原因分析 1. **无效指令或参数错误**(核心问题): - 配置文件中包含 Redis Sentinel 不支持的指令(如 `maxmemory`, `save` 等 Redis 服务器专用配置)[^3] - `sentinel monitor` 指令参数数量不正确(必须包含 **4 个参数**:主节点名/IP/端口/法定人数)[^1][^3] - 指令拼写错误(如 `daemon` 应为 `daemonize`)或多余字符(如引号或尖括号)[^4] 2. **配置行格式错误**: - 引用[1][3]显示错误指向第12行 `"-sentinel"`,表明该行包含无效内容 - 可能原因:错误添加了命令行参数到配置文件,或复制粘贴导致格式错乱 3. **版本兼容性问题**: - Redis 7.4.4 对配置文件格式要求更严格(引用[5]显示旧版本可能容忍某些错误) #### 解决方案(逐步操作) ##### 步骤 1:修正配置文件 ```conf # 正确的最小化配置模板(基于引用[1][3]) port 26379 daemonize no # Docker环境必须设为no dir "/tmp" # Sentinel工作目录 logfile "" # 输出到标准输出 # 核心配置(必须4个参数!) sentinel monitor mymaster 127.0.0.1 6379 2 # 其他必要参数 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes ``` **关键修改点**: 1. 删除所有 Sentinel 不支持的配置项(如 `maxmemory`, `save`, `databases` 等)[^3] 2. 确保 `sentinel monitor` 行有且仅有 **4 个参数**(引用[1][3][4]) 3. 检查第12行并删除无效内容 `"-sentinel"`(可能是错误添加的命令行参数) 4. 避免使用引号包裹配置值(除非必要路径包含空格) ##### 步骤 2:修正启动命令 ```bash # 正确命令(去掉多余的 -sentinel 参数) redis-sentinel /path/to/sentinel26379.conf # Docker 环境正确命令(基于引用[1][2]) docker run -d --name sentinel26379 \ -v /myredis/sentinel26379.conf:/etc/redis/sentinel.conf \ -p 26379:26379 \ redis:7.4.4 \ redis-sentinel /etc/redis/sentinel.conf ``` **关键修改点**: 1. 删除命令末尾的 `-sentinel`(`redis-sentinel` 命令已隐含哨兵模式) 2. 确保容器内路径映射一致(如 `/etc/redis/sentinel.conf`) ##### 步骤 3:验证配置有效性 ```bash # 检查配置文件语法 redis-sentinel /path/to/sentinel.conf --test-mode # 连接Sentinel验证状态 redis-cli -p 26379 > SENTINEL master mymaster 1) "name" 2) "mymaster" 3) "ip" 4) "127.0.0.1" # 应显示正确IP ``` #### 配置注意事项 1. **参数数量规则**: - `sentinel monitor` → 必须4个参数 - `sentinel down-after-milliseconds` → 必须2个参数 - `sentinel auth-pass` → 必须2个参数(如果主节点有密码)[^1] 2. **禁止使用的配置项**: ```conf # 以下配置会导致错误(Sentinel不支持) maxmemory 1gb # 服务器专用 save 900 1 # 服务器专用 databases 16 # 服务器专用 appendonly yes # 服务器专用 ``` 3. **多节点部署**(引用[1][3]): - 复制配置文件到 `sentinel26379.conf`, `sentinel26380.conf`, `sentinel26381.conf` - 修改每个文件的 `port` 值和 `sentinel monitor` 中的法定人数(quorum) - 法定人数计算公式:`quorum = ceil(N/2) + 1`(N为Sentinel节点数) #### 验证故障转移 ```bash # 手动触发主节点下线 redis-cli -p 26379 > SENTINEL failover mymaster # 观察日志显示完成故障转移 +sdown master mymaster 127.0.0.1 6379 +vote-for-leader # 选举新主 +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 # 主从切换 ``` 通过以上步骤,您应该能解决配置文件解析错误并成功启动 Sentinel 集群。如果仍有问题,请提供配置文件第10-14行内容以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值