全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1804|回复: 14

[经验] 关于firewall-cmd对docker无效的问题

[复制链接]
发表于 2023-7-19 21:19:53 | 显示全部楼层 |阅读模式
事情是这样的,搭建了mysql主从集群,分别位于两台机器上,并对数据库的3306端口做了映射,映射到主机的1089.搭建成功,主库和从库都可以通过1089访问,主从复制正常。后来,将docker的"iptables"值设置为false,让docker不添加iptables规则,主库和从库使用firewall-cmd放行1089端口。使用相同的步骤和配置搭建主从集群,搭建完成后客户端也可以正常通过1089端口连接到主库和从库,但是主库和从库间复制异常,登录从库查询从库状态,发现 Slave_IO_Running:一直处于Connecting状态,也就是从库连接不到主库。

大佬们,帮忙分析下问题出在哪里,谢谢。
发表于 2023-7-19 21:56:55 | 显示全部楼层
docker设置{"iptables": false}参数后重启,由firewalld管理规则。
同时还要在firewalld设置
firewall-cmd --permanent --zone="public" --add-rich-rule='rule family="ipv4" source address="172.17.0.0/16" accept'
规则来允许docker内部网络访问宿主机网络或者外网
发表于 2023-7-19 21:23:21 | 显示全部楼层
那就改回去,你不想让外网访问,映射端口时加上本地IP -p 127.0.0.1:8080:80
发表于 2023-7-19 21:24:37 | 显示全部楼层
根据您的描述,当您使用iptables为Docker添加规则时,主从复制正常工作。但是,当您将Docker的iptables设置为false,并使用firewall-cmd放行端口时,主库和从库之间的复制出现了问题。从库的`Slave_IO_Running`状态一直处于`Connecting`状态,即从库无法连接到主库。

这种情况可能是由于防火墙配置或网络连接问题导致的。请确保按照以下步骤进行排查:

1. 确认主库和从库的网络连接正常。确保主库和从库可以相互访问,并且没有任何网络层面的问题。

2. 检查主库和从库的防火墙配置。确保主库和从库的防火墙允许通过1089端口的流量。您可以使用以下命令检查防火墙规则:

   ```
   sudo firewall-cmd --list-all
   ```

   确认是否存在针对1089端口的允许规则。

3. 检查主库和从库的MySQL配置。确保在主库和从库的MySQL配置文件中,`bind-address` 参数设置为正确的 IP 地址,并且 `port` 参数设置为 1089。

4. 检查主库和从库的MySQL用户授权。确保在主库和从库上,使用正确的用户和密码进行授权,以便从库可以连接到主库。

5. 检查主库的二进制日志配置。在主库的MySQL配置文件中,确认以下参数是否正确设置:

   ```
   log-bin=mysql-bin
   server-id=1
   ```

   确保 `log-bin` 参数启用了二进制日志,并且 `server-id` 参数设置为唯一的值。

6. 检查从库的主从复制配置。在从库的MySQL配置文件中,确认以下参数是否正确设置:

   ```
   server-id=2
   relay-log=mysql-relay-bin
   ```

   确保 `server-id` 参数设置为唯一的值,并且 `relay-log` 参数启用了中继日志。

7. 检查从库的主从复制用户配置。在从库上,确保使用正确的用户和密码配置主从复制。

完成上述步骤后,重新启动主库和从库,并检查从库的状态是否正常。如果问题仍然存在,可以查看主库和从库的日志文件,以获取更多的错误信息来进行排查。

帮你问了ChatGPT
 楼主| 发表于 2023-7-19 21:25:25 | 显示全部楼层
32MB.CN 发表于 2023-7-19 21:23
那就改回去,你不想让外网访问,映射端口时加上本地IP -p 127.0.0.1:8080:80

我主要是想通过firewall-cmd来管理主机的防火墙。实现弄不清楚,为什么可以通过1089访问主库和从库,但从库却连不上主库
 楼主| 发表于 2023-7-19 21:26:47 | 显示全部楼层
朱元璋 发表于 2023-7-19 21:24
根据您的描述,当您使用iptables为Docker添加规则时,主从复制正常工作。但是,当您将Docker的iptables设置 ...

我也问过好几次GPT了,他给出的可能原因都不是,都排查了
发表于 2023-7-19 21:26:58 来自手机 | 显示全部楼层
docker本来就不遵守iptables 和ufw的规则,他自己有自己的一套,应该是在docker里设置他自己的规则。建议谷歌 有相应解决办法
 楼主| 发表于 2023-7-19 21:52:32 | 显示全部楼层
有知道的大佬吗
发表于 2023-7-19 22:14:55 | 显示全部楼层
本帖最后由 好得大恩 于 2023-7-19 22:18 编辑

只在docker设置{"iptables": false} 会导致容器内部无法访问外网
8楼老哥的思路应该是对的
也可以试试这两个方法,具体没实操过,以前搜来的别人思路

  1. systemctl edit docker.service
  2. [Service]
  3. ExecStartPre=/usr/sbin/iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
  4. ExecStopPost=/usr/sbin/iptables -t nat -D POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

  5. #或者直接执行该命令
  6. /usr/sbin/iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
复制代码


 楼主| 发表于 2023-7-19 22:24:48 | 显示全部楼层
rem 发表于 2023-7-19 21:56
docker设置{"iptables": false}参数后重启,由firewalld管理规则。
同时还要在firewalld设置
firewall-cmd  ...

source address="172.17.0.0/16"应该为source address="172.18.0.0/16"吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-5-11 12:55 , Processed in 0.070625 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表