单点故障的解决方案

单点故障在运维过程中时常出现,单点故障这里仅指程序自身设计问题导致无法扩展,而不是因为资金预算不到位造成的单点。

 

下面简单介绍两种情景下,解决单点故障的运维方案。

 

问题一

某服务端程序对外提供服务,监听在某个端口对外提供服务,在整个运维环境中只能存在一份,无法扩展,同时要保证它的高可用性。这里假设服务端IP 10.1.1.23 ,端口为7788 。


解决方案:

1、在服务端搭建keeeplived高可用环境,让程序监听在VIP上,让VIP在两台或多台主机间漂移

修改服务端配置

listen 10.1.1.23:7788;

2、修改内核参数

sysctl -w net.ipv4.ip_nonlocal_bind=1

这个参数允许程序监听在一个不存在的地址上而不报错。


3、在各个节点上开启相应的程序。


点评:这种问题比较常见,可通过高可用软件或者负载均衡软件来解决。



问题二

某客户端程序在整个运维环境中只能存在一份,无法扩展,同时需要保证它的高可用性。客户端程序固定连接上游的某个服务端。这里假设上游服务器IP10.1.1.23端口为1123,客户端本地IP10.1.1.34 VIP10.1.1.45 。

 

解决方案:

1、搭建keepalived高可用环境,让VIP在两台或多台主机间漂移。

 

2、修改客户端本地出站到上游服务端的源IPVIP

iptables -t nat -A POSTROUTING -o eth0 -s 10.1.1.34 -d 10.1.1.23 --dports 1123 -j SNAT --to-source 10.1.1.45

 

如果VIP在本地,那么本机和上游就可以通讯;反之,如果VIP不在本地,与上游就无法通讯;

总之就是在多客户端与服务端之间建立一个阻塞式的通道。


(存疑:fail-over时,由于客户端IPVIP保持不变,可利用tcp协议重连机制来重新建立连接。)


点评:这种问题比较奇葩,但还是有解决方案,解决方案也算是一种奇葩,特事特办。


总结

既然是单点故障,那必定得容忍fail-over时可能造成的数据丢失,剩下的就是数据同步问题了,尽量减少fail-over造成的损失。



相关资料

1、一个主机上存在多个IP的情况下,网卡上的第一个IPprimary IP,其它IPsecondary IP

primary IP 无法修改,除非卸载IP

当该主机为客户端时,发往服务端的请求会固定从primary IP 出站

当该主机为服务端时,客户端请求哪个IP,流量就会从哪个IP出站


2iptables 执行流程中,nat表优先于filter

wKioL1aAm5jTmsStAAWaLhj92x0956.jpg


3linux内核关于tcp重连的一些参数

net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值