Linux绑定IP与net.ipv4.ip_nonlocal_bind不存在
如何允许Linux进程绑定到Linux系统或服务器上尚不存在的IP地址?
您需要设置net.ipv4.ip_nonlocal_bind
,它允许进程将bind()绑定到非本地IP地址,这对于诸如Nginx,HAProxy,keepalived等负载平衡器的应用程序非常有用。
本教程说明如何使用net.ipv4.ip_nonlocal_bind Linux内核选项绑定不存在的IP地址。
为什么在Linux操作系统下使用net.ipv4.ip_nonlocal_bind?
HAProxy充当负载平衡器(LB)和基于TCP和HTTP的应用程序的代理服务器。
同样,Keepalived软件使用VRRP协议为Linux提供了高可用性(HA)和负载平衡功能。
它充当IP故障转移(虚拟IP)软件,将流量路由到正确的后端。
我们可以将HAProxy(或Nginx)与Keepalived结合使用,为我们的应用程序构建一个两节点高可用性集群。
但是,HAPorxy,Nginx和Keepalived中的LB需要具有绑定到非本地IP地址的能力。
问题是我们可以一次将一个IP(虚拟IP)地址分配给一个节点。
因此,其他运行Nginx/HAProxy的节点将拒绝启动。
您通常会看到如下错误:
Nginx:无法绑定套接字。
我们希望允许正在运行的LB实例绑定到非本地的IP,以进行故障转移。
net.ipv4.ip_nonlocal_bind不存在的Linux绑定IP
使用sysctl命令查找net.ipv4.ip_nonlocal_bind的当前值:
# sysctl net.ipv4.ip_nonlocal_bind # sysctl net.ipv6.ip_nonlocal_bind
我们也可以如下使用cat命令:
cat /proc/sys/net/ipv4/ip_nonlocal_bind
要绑定Linux下尚不存在的IP,请运行:
sudo sysctl -w net.ipv4.ip_nonlocal_bind=1
Linux绑定IP net.ipv4.ip_nonlocal_bind
我们也可以使用以下语法:
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
对于IPv6:
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1
永久绑定到Linux中的非本地IP地址
编辑/etc/sysctl.conf或/etc/sysctl.d/99-custom.conf
sudo vi /etc/sysctl.d/99-custom.conf
追加以下行:
## allow Nginx to start and bind to non local IP ## net.ipv4.ip_nonlocal_bind=1
保存并关闭文件。
要加载更改,请运行:
sudo sysctl -f /etc/sysctl.d/99-custom.conf
了解sysctl命令选项
-w选项允许将值写入Linux内核变量。
-a选项显示所有变量。
有关更多信息,请执行以下man命令:
man sysctl
或者
sysctl --help
输出示例:
Options: -a, --all display all variables -A alias of -a -X alias of -a --deprecated include deprecated parameters to listing -b, --binary print value without new line -e, --ignore ignore unknown variables errors -N, --names print variable names without values -n, --values print only values of a variables -p, --load[=<file>] read values from file -f alias of -p --system read values from all system directories -r, --pattern <expression> select setting that match expression -q, --quiet do not echo variable set -w, --write enable writing a value to variable -o does nothing -x does nothing -d alias of -h -h, --help display this help and exit -V, --version output version information and exit
总结
您学习了如何将net.ipv4.ip_nonlocal_bind设置为1,以在Linux下配置高可用负载均衡器(LB)。