docker上部署redis(一主二从三哨兵)

常用docker命令:

docker ps 命令用于列出当前正在运行的容器。如果你想查看所有容器(包括已停止的),可以使用 docker ps -a

重启容器 docker restart 容器名/容器id

启动容器 docker start 容器名/容器id

注意点:

1. daemonize yes

  • 问题: 在 Docker 中运行 Redis 时,不应该使用 daemonize yes。Docker 容器期望应用程序在前台运行,而 daemonize yes 会使 Redis 作为一个守护进程在后台运行,导致容器立即退出。
  • 解决方案: 删除或注释掉 daemonize yes 这一行,或者改为 daemonize no

2. requirepass 和 masterauth

  • 问题requirepass 和 masterauth 都被设置为相同的密码,这可能会导致混淆。
  • 解决方案: 确保 masterauth 和 requirepass 设置正确,通常它们应该相同

3. replicaof 配置

  • 问题: `replicaof 主机ip 主机端口号

--privileged=true 给容器内root权限

--restart=always 随docker自启动  (--restart=no 关闭随docker自启动)

部署遇到问题:

could not connect to Redis at 192.168.80.131:6380: Connection timed out

遇到“could not connect to Redis at 192.168.80.131:6380: Connection timed out”错误通常意味着客户端无法与指定的 Redis 服务器建立连接。这可能是由多种原因引起的。以下是一些常见的排查步骤和解决方案:

### 1. **检查网络连接**
确保客户端和服务器之间的网络连接是通畅的。

- **Ping 测试**:
  ```bash
  ping 192.168.80.131
  ```
  如果 ping 不通,说明网络连接有问题。

- **Telnet 测试**:
  ```bash
  telnet 192.168.80.131 6380
  ```
  如果 telnet 无法连接,说明端口可能被防火墙阻拦或服务未启动。

### 2. **检查防火墙设置**
确保防火墙没有阻止 Redis 端口(6380)的流量。

- **检查服务器防火墙**:
  ```bash
  sudo ufw status
  sudo iptables -L
  ```
  如果防火墙规则阻止了 6380 端口,可以添加允许规则:
  ```bash
  sudo ufw allow 6380/tcp
  sudo iptables -A INPUT -p tcp --dport 6380 -j ACCEPT
  ```

- **检查客户端防火墙**:
  确保客户端的防火墙没有阻止连接到 192.168.80.131:6380。

### 3. **检查 Redis 服务状态**
确保 Redis 服务在服务器上正常运行。

- **查看 Redis 容器状态**:
  ```bash
  docker ps -a
  ```
  确认 `redis-slave1` 容器正在运行。如果没有运行,可以尝试启动它:
  ```bash
  docker start redis-slave1
  ```

- **查看 Redis 容器日志**:
  ```bash
  docker logs redis-slave1
  ```
  查看日志以获取更多错误信息。

### 4. **检查 Redis 配置**
确保 Redis 配置文件中没有错误,并且监听地址和端口设置正确。

- **检查配置文件**:
  确认 `redis_slave1.conf` 文件中的 `bind` 和 `port` 设置正确:
  ```conf
  bind 0.0.0.0
  port 6380
  ```

### 5. **检查 Docker 网络**
确保 Docker 网络配置正确,容器能够相互通信。

- **查看 Docker 网络**:
  ```bash
  docker network ls
  docker inspect <network_name>
  ```
  确认网络配置正确。

- **检查容器的 IP 地址**:
  ```bash
  docker inspect redis-slave1 | grep IPAddress
  ```
  确认容器的 IP 地址是否与配置文件中的 IP 地址一致。

### 6. **检查 SELinux(如果适用)**
如果你的系统启用了 SELinux,确保 SELinux 没有阻止 Redis 服务。

- **临时禁用 SELinux**:
  ```bash
  sudo setenforce 0
  ```
  如果问题解决,可以考虑永久修改 SELinux 配置。

### 7. **检查 DNS 解析**
确保 IP 地址解析正确,特别是在使用域名的情况下。

### 示例步骤

1. **Ping 测试**:
   ```bash
   ping 192.168.80.131
   ```

2. **Telnet 测试**:
   ```bash
   telnet 192.168.80.131 6380
   ```

3. **检查 Redis 容器状态**:
   ```bash
   docker ps -a
   docker logs redis-slave1
   ```

4. **检查配置文件**:
   ```bash
   cat /home/docker/redis/config/redis_slave1.conf
   ```

5. **检查 Docker 网络**:
   ```bash
   docker network ls
   docker inspect <network_name>
   docker inspect redis-slave1 | grep IPAddress
   ```

通过这些步骤,你应该能够找到并解决连接超时的问题。

成功解决无法通过端口6380、6381连接redis  

启动redis命令:

docker run -p 6381:6381 --name iredis \ -v /home/docker/redis/config/redis_slave_6381.conf:/etc/redis/redis_slave_6381.conf \ -v /home/docker/redis/data:/data \ -d redis:6.2.6 redis-server /etc/redis/redis_slave_6381.conf

解释

  1. docker run:

    • 作用: 启动一个新的Docker容器。
  2. -p 6381:6381:

    • 作用: 将主机的6381端口映射到容器的6381端口。
    • 解释: 这使得你可以通过主机的6381端口访问容器内部运行的Redis服务。
  3. --name iredis:

    • 作用: 为容器指定一个名称。
    • 解释: 容器名称为 iredis,方便后续管理和识别。
  4. -v /home/docker/redis/config/redis_slave_6381.conf:/etc/redis/redis_slave_6381.conf:

    • 作用: 将主机上的配置文件挂载到容器中。
    • 解释:
      • 主机路径: /home/docker/redis/config/redis_slave_6381.conf
      • 容器路径: /etc/redis/redis_slave_6381.conf
      • 这样做是为了让容器使用自定义的配置文件。
  5. -v /home/docker/redis/data:/data:

    • 作用: 将主机上的数据目录挂载到容器中。
    • 解释:
      • 主机路径: /home/docker/redis/data
      • 容器路径: /data
      • 这样做是为了持久化Redis的数据,即使容器停止或删除,数据也不会丢失。
  6. -d:

    • 作用: 以分离模式(后台)运行容器。
    • 解释: 容器将在后台运行,不会占用终端。
  7. redis:6.2.6:

    • 作用: 指定使用的Docker镜像及其标签。
    • 解释: 使用 Redis 镜像的 6.2.6 版本。
  8. redis-server /etc/redis/redis_slave_6381.conf:

    • 作用: 在容器启动时执行的命令。
    • 解释: 使用指定的配置文件 /etc/redis/redis_slave_6381.conf 启动 Redis 服务器。

总结

这个命令的作用是启动一个名为 iredis 的 Redis 容器,并进行以下配置:

  • 将主机的6381端口映射到容器的6381端口。
  • 使用自定义的配置文件 /home/docker/redis/config/redis_slave_6381.conf
  • 将主机上的数据目录 /home/docker/redis/data 挂载到容器的 /data 目录,以便持久化数据。
  • 以分离模式(后台)运行容器,使用 Redis 6.2.6 镜像。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值