说明:今天要说的内容是nginx+keeplived 反向代理层
为什么是nginx+keeplived 反向代理而不用Heartbeat+drbd.
keeplived 用多与前端负载,heartbeat+drbd的方式多用于后端的负载
1 用户层: 说一下 用户通过安卓手机 苹果手机 与电脑 访问相同的网站,但是看到的内容不同(专门针对手机,PC设计不同的WEB页面),保障用户访问页面最优
2 反向代理层:后端域名有多个,业务有多个。用户反问到反向代理 只会交给主keeplived,就会造成备keeplived资源浪费,来解决一下这个问题
3 闹裂:预防的几点要素,解决方案
4 单数据中心;多数据中心;阿里云 展望公司服务部署
先来说第一个问题,在配置文件里做了一个if判断,通过数据包头部,proxy_pass 给不同的服务器
server { listen 80; server_name blog.etiantian.org; location / { if ($http_user_agent ~* "android") { proxy_pass http://android_pools; } if ($http_user_agent ~* "iphone") { proxy_pass http://iphone_pools; } proxy_pass http://pc_pools; include extra/proxy.conf; } access_log off; }
第二个问题,解决keeplived 的浪费资源的问题。解决这个问题,首先是思路问题。
本来打算扣字的,画图了,一图胜千言
这里就不粘配置文件了。
第三个问题 闹裂 参照小米公司 珊瑚山庄
生产应用中发生,不过是没有实现预防罢了
导致闹裂的原因:
1 高可用服务器之前心跳线链路故障,导致无法互相检查心跳
2 高可用服务器上开启防火墙,阻挡了心跳检测
3 高可用服务器上网卡地址等信息配置不正常,导致发送心跳失败
4 其他服务器配置不当原因,如心跳方式不同,心跳广播冲突,软件BUG等
通俗的说:另一个人以为你挂了,结果只是网络延迟等其他原因,没有检测到你,这时候就接管你的工作。
既然说到了,会有一个延迟时间的替换,那么就可以手动修改参数 延迟等待时间(主挂掉,备5分钟在替换主干活)
当然,一般不用修改延迟时间,看业务在什么级别了。
放置闹裂的方案:
1 加冗余线路
2 检测到闹裂时,强行关闭心跳检测(远程关闭主节点,控制电源电路fence)
3 做好闹裂的监控报警
4 报警后,备节点在接管时设置比较长时间去接管,给运维人员足够的时间去处理(人为处理)
5 启动磁盘锁,正在服务的一方锁住磁盘,闹裂发生时,让对方完全抢不走“共享磁盘资源”
来说最后一个问题。单数据中心,多数据中心 阿里云业务
单数据中心 :
存在单点,业务好坏,都看供应商给你的一根网线。出现机房断电,意外故障,机房事故,务必要承受业务停止响应的情况。
1 网络故障:用户暂停机房所有访问。
2 机器意外故障:被淹,意外被其他乙方公司勿操作
3 数据被甲方,或乙方U盘拷贝
多数据中心 :
双点业务负载均衡,自己架设DNS 服务器,在用户访问的同时加了一层
暂时没有接触过多数据中心 公司。都是业务存在单数据中心,可能在这里经验有限
1 用户联通,移动,电信,访问DNS 在通过DNS 转发到 不同数据中心数据(维护成本)
阿里云业务:
把公司业务放在另一家公司去允许,从安全等角度上是考虑的一点
价格,短时间内看,阿里云 在中小公司使用情况来说 没有出现问题
如 阿里提升价格,等大规模宕机 情况无法预测
虽都可以通过备份机制 来把单数据中心,阿里云应用 备份至线下服务器,但其中并不能保证数据完整性。
说了那么多,虽然不是很专业。多写 多说 就专业了。
手机&&PC