keepalived配置学习,解决vip无法ping通,虚拟服务器端口无法访问的问题

本文介绍如何解决在使用Keepalived配置虚拟服务器时遇到的VIP无法ping通及端口访问问题。主要包括:在配置文件中注释掉vrrp_strict选项以允许ping通VIP;对于端口访问问题,通过选择正确的lb_kind(NAT、DR或TUN)并配合相应配置实现正确映射。文章提供了实例配置及解决步骤,帮助读者理解并解决这类常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keepalived配置,解决vip无法ping通,虚拟服务器端口无法访问的问题

keepalived网上教程很多,通过yum install keepalived下载安装后,在/etc/keepalived/keepalived.conf默认配置很详细,很方便新手基于该配置修改成自己所想要的配置文件,相应keepalived配置教程很多,按照配置教程基于keepalived.conf修改很容易出现配置好的vip无法ping通,或者vip可ping通,但映射的端口无法访问。

  • vip无法ping通
    keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭,原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。
  • 映射端口无法访问
    vip可ping通后,访问vip映射端口无法访问,直接访问real_server的ip和端口可访问。
    解决这个问题需要对lvs相关知识进行初步了解,详见《LVS手册》http://www.linuxidc.com/Linux/2016-03/129233.htm
    在keepalived.conf中对virtual_server配置有
    lb_kind可以设置为NAT、DR、TUN。这个选项直接关系到你做的 virtual_server和real_server能否进行正确映射。

NAT模式和路由器NAT模式类似,用于访问client和real_server在不同网段实现通信。如果你在一个局域网内做负载均衡选用NAT,那恭喜你,你肯定是无法访问。可以做个NAT模式的测试,需要在keepalived主机上配置双网卡,分别在两个不同网段中,如keepalived主机网卡对client地址为10.0.0.0/24,对real_server的地址为192.168.2.0/24。vip设置为10.0.0.164,real_server为192.168.2.67,可采用下面的keepalived.conf配置

vrrp_instance VI_1 {
    state MASTER
    interface ens37
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.164/24
    }
}

virtual_server 10.0.0.164 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP
    real_server 192.168.2.67 80
   {
         weight 1
    }
}

配置正确后在keepalived主机上执行systemctl restart keepalived.service。从client上执行curl 10.0.0.164发现还是无法访问。这是由于real_server在接收到请求包后找不到路由进行数据返回,此时需要将keepalived主机作为网关,在real_server上添加回程路由route add default gw 192.168.2.65。192.168.2.65即为keepalived主机。考虑keepalived主机一般双机,因此此处可以用keepalived主机的虚拟IP。 现在再执行curl 10.0.0.164就可以正常返回。

DR模式是在局域网内最简单的映射模式,原理可参见《LVS手册》。但只在keepalived主机上配置lb_kind DR是无法访问到real_server的,DR模式会将目标地址为虚拟IP地址原封不动的传给real_server。real_server发现这不是我的IP,因此会丢弃掉该包,所以这边得欺骗一下real_server,让他认为这是他的地址。做法很简单,在real_server的lo回环口上添加那个虚拟IP,这样real_server就会认为自己就是VIP这台服务器。切记在lo上设置,不要在真实网卡上设置,道理留给大家思考。

ifconfig lo:0 192.168.2.100 netmask 255.255.255.0 up

参考
LVS+Keepalived使用总结
https://www.linuxidc.com/Linux/2016-03/129232.htm

<think>好的,我现在需要解决用户的问题:服务器使用虚拟IP访问数据库连接失败,有什么解决方案。首先,我得理解虚拟IP(VIP)在数据库访问中的作用。常,虚拟IP用于高可用性配置,比如主从切换时,应用无需更改配置,自动连接到新的主节点。当连接失败时,可能涉及网络配置VIP绑定、数据库设置等多个方面。 首先,我会参考用户提供的引用资料,特别是引用[3]和[4],因为它们提到了网络不和弹性云服务器的问题。根据引用[3],需要检查安全组规则、网络ACL、内部网卡信息以及端是否开放。引用[4]提到ping测试和联系技术支持。此外,引用[1]和[2]虽然主要关于数据库连接错误,但可能对排查步骤有帮助。 接下来,我需要整理一个排查流程。第一步是确认VIP是否正确配置。比如,检查VIP是否绑定到了正确的服务器网卡上,是否在同一个子网内。然后,检查网络连性,使用ping和telnet测试VIP的可达性和端开放情况。如果网络层不,需要查看安全组和ACL规则是否允许流量过。例如,安全组可能没有开放数据库端(如MySQL的3306)。 如果网络层没问题,接下来要看数据库的监听配置。数据库服务是否监听了VIP对应的IP地址?比如,MySQL的bind-address是否设置为0.0.0.0或包含VIP。另外,检查数据库用户权限,确保允许从VIP所在的服务器IP进行连接。防火墙设置,如iptables或firewalld,是否阻止了连接? 此外,还要考虑高可用组件的状态,比如Keepalived是否正常运行,确保VIP在活动节点上。如果VIP漂移到了备用节点,但应用配置未更新或备用节点数据库服务未启动,也会导致连接失败。 用户提到的引用[3]中提到了VPC对等连接和弹性公网IP,如果是跨VPC的情况,可能需要配置对等连接或绑定EIP。引用[4]建议在相同区域的ECS进行ping测试,如果,说明网络正常,否则联系技术支持。这可能涉及到云服务提供商的特定配置,需要用户检查云平台的相关设置。 可能的解决方案步骤包括: 1. 验证VIP配置是否正确绑定。 2. 检查网络连性(ping VIP)和端访问(telnet VIP port)。 3. 检查安全组、网络ACL是否允许数据库端。 4. 确认数据库服务监听VIP的IP,并检查防火墙规则。 5. 检查数据库用户权限是否允许远程连接。 6. 查看高可用组件的日志,确保VIP处于活动状态。 7. 联系云服务提供商技术支持,如问题仍未解决。 在整理这些步骤时,需要注意引用相关的内容,比如引用[3]提到的安全组和VPC对等连接,引用[4]的ping测试和联系支持。同时,用户可能遇到的常见错误如10060或11001(引用[1]),可能涉及网络不或DNS解析问题,需要根据具体情况排查。 最后,生成相关问题,帮助用户进一步理解可能涉及的方面,比如VIP工作原理、安全组配置方法、数据库监听设置等。</think>### 服务器使用虚拟IP访问数据库连接失败的解决方案 #### 1. **验证虚拟IP(VIP配置** - **检查VIP绑定状态** 确认虚拟IP已正确绑定到目标服务器的网卡,且处于活动状态。在Linux系统中可过命令 `ip addr` 查看网卡绑定的IP列表。若VIP未显示,需过高可用组件(如Keepalived)重新绑定[^3]。 - **确认子网一致性** 确保VIP与数据库服务器、应用服务器位于同一子网或VPC内。跨VPC需配置对等连接或过弹性公网IP(EIP)建立信[^3]。 #### 2. **排查网络连性** - **基础连测试** 在服务器上执行 `ping <VIP>`,若不则说明网络层存在问题。可能原因包括: - 安全组未放行ICMP协议或数据库端(如MySQL的3306)[^3][^4]。 - 网络ACL规则限制了流量[^3]。 - 云服务商网络配置错误(需联系技术支持)。 - **端访问测试** 使用 `telnet <VIP> <端>` 或 `nc -zv <VIP> <端>` 验证数据库端是否开放。若失败,需检查数据库监听配置及防火墙规则。 #### 3. **检查数据库服务配置** - **监听IP地址范围** 确保数据库服务监听了VIP对应的IP。例如: - MySQL需确认 `bind-address` 设置为 `0.0.0.0` 或包含VIP。 - Oracle需检查 `listener.ora` 中的 `HOST` 配置。 - **用户权限与白名单** 检查数据库用户是否允许从VIP所在服务器的IP远程连接。例如: ```sql -- MySQL示例 GRANT ALL PRIVILEGES ON *.* TO 'user'@'<VIP或IP段>' IDENTIFIED BY 'password'; ``` #### 4. **防火墙与安全策略** - **服务器防火墙** 临时关闭防火墙(`systemctl stop firewalld` 或 `ufw disable`)测试是否为拦截原因。若问题解决,需添加规则放行数据库端。 - **云平台安全组** 在云控制台检查安全组规则,确保入方向允许来源IP(服务器IP)访问目标端。 #### 5. **高可用组件状态** - **检查Keepalived等工具** 查看日志(如 `/var/log/messages`)确认VIP是否漂移异常。若主节点宕机但VIP未切换,需修复高可用配置。 - **数据库服务健康状态** 确保VIP绑定的节点上数据库服务正在运行(`systemctl status mysql`)。 #### 6. **其他可能原因** - **DNS解析问题** 若使用域名连接VIP,需确认DNS解析正确(`nslookup <域名>`)。 - **MTU不匹配** 某些网络环境下,MTU设置不一致会导致数据包分片失败,可尝试调整MTU值(如 `ifconfig eth0 mtu 1400`)[^4]。 --- ###
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值