假设我们有两个服务器 A 和 B,具有“真实”和外部 IP,我们可以切换所谓的“故障转移 ip”(WXYZ)以指向 A 或 B 的特定外部 IP。这从“外部”工作并且是轻松完成。作为背景:故障转移 ip 配置为 /etc/network/interfaces 中的新条目:
auto eth0:0
iface eth0:0 inet static
address W.X.Y.Z
netmask 255.255.255.224
Run Code Online (Sandbox Code Playgroud)
现在让我们假设 WXYZ 被动态配置为使用硬件 A。现在我从 B 调用'curl domain.com',它使用正确的故障转移 ip WXYZ 但然后以某种方式解析到错误的外部 IP B(或本地主机?)而不是使用配置的一个A:
Trying W.X.Y.Z ...
* connect to W.X.Y.Z port 443 failed: Connection refused
* Failed to connect to domain.com port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to domain.com port 443: Connection refused
Run Code Online (Sandbox Code Playgroud)
当我启动本地 nginx 时,它可以成功 curl …
domain-name-system ubuntu failover high-availability hetzner
我之前有一些带有负载均衡器的码头服务器。现在我想在不停机的情况下更新我的应用程序。当一个码头停机并且不再可达时,负载均衡器会自动将其从列表中删除,所以这不是问题。
主要问题是避免停机时间:因此,我必须确保一次只有一个码头重新启动 - 或者确保至少有 N 个码头在线!
目前我正在使用一个简单的 bash 脚本,我需要手动等待一个码头重新上线,然后再重新启动下一个码头等等。
现在 bash 对于这类东西并不是很理想,我希望有更适合使整个任务自动化的工具。例如http://jetty-number-n.com/ping,如果第 n 个码头在线,我可以使用一个简单的 ping URL响应 OK (200)。
我如何解决这个任务以及使用哪种工具?
感谢@ceejayoz,我找到了 ansible 的滚动更新。但它仍然不是最理想的,因为我需要设置一个固定的超时时间。
我们的 linux 服务器上有 4GB,但我们目前只能使用 ~1.8GB 用于我们的 java 服务器,这是下面列出的第一个 java 进程。(200 MB 是免费的,所以我们可以最大使用 1.6GB + 0.2GB)
当我们使用更多时,机器会崩溃。所以我们指定 -Xmx1600m 和 -XX:MaxPermSize=200m 将服务器 RAM 限制为 1.8GB。但是我们需要更多的内存!剩下的内存去哪儿了?
这是根据内存使用情况排序的 top 程序输出(通过大“M”):
Mem: 4083952k total, 3857856k used, 226096k free, 169320k buffers
Swap: 2104504k total, 176k used, 2104328k free, 1939080k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28155 root 16 0 1835m 1.6g 7848 S 2 40.5 47:36.26 java
19609 root 16 0 45996 7052 3148 S 0 0.2 14:35.97 httpd2-prefork …Run Code Online (Sandbox Code Playgroud)