博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单点故障的解决方案
阅读量:7057 次
发布时间:2019-06-28

本文共 1383 字,大约阅读时间需要 4 分钟。

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

 

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

 

问题一

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


解决方案:

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

修改服务端配置

1
listen 10.1.1.23:7788;

2、修改内核参数

1
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

1
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


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

1
2
3
4
5
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
本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1729006,如需转载请自行联系原作者
你可能感兴趣的文章
spring boot 动态切换数据源 [转]
查看>>
我的友情链接
查看>>
IOS抓屏实现代码
查看>>
linux jenkins 2.89.1 安装部署 持续构建svn下maven项目并部署到tomcat
查看>>
NGINX+TOMCAT负载均衡
查看>>
我的友情链接
查看>>
基于类的QoS
查看>>
北漂感悟一
查看>>
Python 文件操作
查看>>
fastjson序列化时不输出值为null的字段
查看>>
安卓基本常用控件: View
查看>>
设计师应该关注的科技发展方向(一)
查看>>
小博老师解析Java核心技术 ——JDBC普通增删改操作
查看>>
我的友情链接
查看>>
ELK+filebeat日志分析系统部署文档
查看>>
写给开发者看的关系型数据库设计
查看>>
struct net_device网络设备结构体详解
查看>>
cacti监控 On RHEL6
查看>>
ORACLE监听能正常启动,但实例监听不到故障应急处理一例
查看>>
我的友情链接
查看>>