注:这篇文章参考网络,有些称呼都变了,比如阿里云上的现在是弹性ip

  1. 包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP。这样也就让自己搭建HA成为了可能,有幸拿到了内测权限体验了一下。(classical网络依然不支持)
  2. 测试环境:
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6 VPC192.168.1.0/24
  9. ECS:
  10. nginx1192.168.1.1
  11. nginx2:192.168.1.2
  12. HAVIP:192.168.1.3
  13. 绑定到havip的公网EIP121.43.187.37
  14. 配置完毕后的拓扑如下:
  15. 环境搭建完毕后,登陆主备ECS服务器,分别配置nginx+keepalived
  16. [root@Nginx1 ~]# yum install nginx keepalived y
  17. MASTER服务器(nginx1)配置文件/etc/keepalived/keepalived.conf内容以及解释如下:
  18. ! Configuration File for keepalived
  19. #配置global_defs,主要用于标示机器,以及故障时通知
  20. global_defs {
  21. router_id Nginx1
  22. }
  23. #配置vrrp_script,主要用于健康检查,以及检查失败后执行的动作。
  24. vrrp_script chk_nginx {
  25. #健康检查脚本,当脚本返回值不为0时认为失败
  26. script "/etc/keepalived/ck_ng.sh"
  27. #检查频率,以下配置每2秒检查1次
  28. interval 2
  29. #当检查失败后,将vrrp_instance的priority减小5
  30. weight -5
  31. #连续监测失败3次,才认为真的健康检查失败。并调整优先级
  32. fall 3
  33. #连续监测2次成功,就认为成功。但不调整优先级
  34. rise 2
  35. }
  36. #定义对外提供服务的VIP vrrp_instance配置
  37. vrrp_instance VI_1 {
  38. #指定vrrp_instance的初始状态,是MASTER还是BackUP主要还是看优先级。
  39. state MASTER
  40. #指定vrrp_instance绑定的网卡,最终会通过指定的网卡宣告VIP
  41. interface eth0
  42. #发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP
  43. unicast_src_ip 192.168.1.1
  44. #相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。
  45. virtual_router_id 55
  46. #本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
  47. priority 101
  48. #心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其他机器,自己还活着。
  49. advert_int 1
  50. #定义主从的验证方式以及密码,一般使用PASS(最长8位,超过了只会识别前8位作为密码)
  51. authentication {
  52. auth_type PASS
  53. auth_pass aliyun
  54. }
  55. #VIP,在阿里云下就是刚才创建的HAVIP
  56. virtual_ipaddress {
  57. 192.168.1.3
  58. }
  59. #本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
  60. track_script {
  61. chk_nginx
  62. }
  63. }
  64. BACKUP服务器(nginx2)的配置需要修改:
  65. state MASTER改为 state BACKUP
  66. unicast_src_ip 192.168.1.1改为backup服务器实际的IP unicast_src_ip 192.168.1.2
  67. priority 101改小一些,比如 priority 100
  68. 其它保持一致即可
  69. 为了实现nginx服务异常的时候能够自动切换,需要自己写一个脚本,脚本没有硬性的要求,能够实现目标即可,这里 监控nginx进程数为例:
  70. vim /etc/keepalived/ck_ng.sh
  71. #!/bin/bash
  72. #检查nginx进程是否存在
  73. count=$(ps -C nginx --no-heading|wc -l)
  74. #进程数等于0的时候
  75. if [ "${count}" = "0" ]; then
  76. #尝试启动一次nginx,停止2秒后再次检测
  77. service nginx start
  78. sleep 2
  79. count=$(ps -C nginx --no-heading|wc -l)
  80. if [ "${count}" = "0" ]; then
  81. #如果启动没成功,就杀掉keepalive触发主备切换
  82. /etc/init.d/keepalived stop
  83. fi
  84. fi
  85. #增加脚本的执行权限
  86. chmod +x vim /etc/keepalived/ck_ng.sh
  87. #分别启动nginx1和nginx2的nginx&keepalived服务:
  88. [root@Nginx1 ~]# /etc/init.d/nginx start;/etc/init.d/keepalived start
  89. Starting nginx: [ OK ]
  90. Starting keepalived: [ OK ]
  91. 测试:
  92. NGINX1/192.168.1.1priority 101NGINX2/192.168.1.2priority100,这时候访问HAVIP绑定的EIPhttp://121.43.187.37/可以看到访问到了服务器NGINX1,
  93. HAVIP控制台查看,192.168.1.1的服务器为主服务器
  94. 这时候我们KILLnginx1服务器的nginx服务
  95. 查看日志,发送了移除VIP的报文:
  96. Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) sending 0 priority
  97. Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) removing protocol VIPs.
  98. Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_healthcheckers[25018]: Netlink reflector reports IP 192.168.1.3 removed
  99. 这时候访问http://121.43.187.37/,可以看到访问自动切换到了NGINX2
  100. HAVIP控制台查看,192.168.1.2的服务器为主服务器
  101. 重新启动nginx1nginxkeepalive服务
  102. 查看日志可以看到keepalive重新发送了IP宣告的报文
  103. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Entering MASTER STATE
  104. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) setting protocol VIPs.
  105. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3
  106. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_healthcheckers[25609]: Netlink reflector reports IP 192.168.1.3 added
  107. Oct 23 17:22:19 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3
  108. 重新访问http://121.43.187.37/测试,重新访问到了服务器NGINX1,到HAVIP控制台查看,192.168.1.1的服务器重新夺回了控制权,成为了为主服务器
  109. 这样就实现了阿里云环境下的HA切换。
  110. 实际测试,阿里云的多个HAVIP可以绑定到同样的两台机器,可以配置多组vrrp_instance来实现双主。或者两台服务器同时为两个业务服务,避免资源浪费。同时能够做到主备

文件下载地址

阿里云下配置keepalive,利用HAVIP实现HA的更多相关文章

  1. 阿里云下Linux服务器安装Mysql、mongodb

    阿里云下Linux服务器安装Mysql.mongodb 一.MySQL的安装和配置 1.安装rpm包 rpm -Uvh http://dev.mysql.com/get/mysql-community ...

  2. 阿里云服务器 配置 tomcat 发布spring boot项目 的具体操作 【使用公网ip】

    1.前言 spring boot 转成war包 后用tomcat发布的具体操作在我另一篇随笔有详细记载,不论是window系统还是Linux系统,tomcat的发布配置都是一样的,所以这里不具体讲这个 ...

  3. 阿里云Maven配置,Maven仓库配置,Maven镜像配置

    阿里云Maven配置,Maven仓库配置,Maven镜像配置 ======================== 蕃薯耀 2018年1月29日 http://www.cnblogs.com/fanshu ...

  4. 阿里云linux配置ftp服务

    阿里云linux配置ftp服务 一.ftp服务安装 运行以下命令安装ftp yum install -y vsftpd 运行以下命令打开及查看etc/vsftpd cd /etc/vsftpd ls ...

  5. 阿里云安装配置mysql(centos版)

    这种是利用yum下载的也可以使用xftp上传 1,安装mysql数据库 a)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-re ...

  6. 为阿里云域名配置免费SSL支持https加密访问简单教程

    阿里云之前有免费ssl入口申请,现在已经关闭了.那么现在怎么为自己的域名配置https呢? 首先打开阿里云域名控制台,如以下界面.(这里暂且用我的这个域名讲解吧)  如上图点击ssl证书,点击单域名免 ...

  7. 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]

    前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...

  8. 阿里云服务器端配置TensorFlow & jupyter

    在阿里云上搭建爬取某信的公众号文章的程序时,发现需要验证码验证,技穷之后考虑做一个验证码识别程序,所以开始在服务器上搭建机器学习平台,背景,服务器上已经有其他应用在跑着了,所以不想停服,初始环境:ce ...

  9. 阿里云 nginx配置ssl证书实现https访问

    一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...

随机推荐

  1. AI2(App Inventor 2) 离线版

    介绍 我们的目标:搭建一个本地多用户的App Inventor 2 服务器目的:课堂教学,社团活动,兴趣学习优势:管理权限(用户管理,账号切换,资源打包),网络链接速度快,拥有配套服务.注意:每次退出 ...

  2. SQLZOO练习5--join(表的连接)

    game表: id mdate stadium team1 team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 June 20 ...

  3. vue2,vue指令和选项

    vue特点 mvvm框架 响应式(声明式) 组件化(支持自定义组件) 丰富的指令(Dom功能的抽象) 基于选项(template,data,computed,watch,methods) vue文档集 ...

  4. 初次使用 eolink 感受

    最近总有前端小伙伴来找我抱怨,"后端接口出来太晚,影响我的任务进度"."后端接口改了也不通知我一下,到冒烟测试的时候报一堆的错".我拉后端小伙伴了解情况,结果问 ...

  5. Hadoop-HA 搭建高可用集群Hadoop Zookeeper

    Hadoop Zookeeper 搭建(一) 一.准备工作 VMWARE虚拟机 CentOS 7 系统 虚拟机1:master 虚拟机2:node1 虚拟机3:node2 时间同步 ntpdate n ...

  6. Educational Codeforces Round 132 (C,D) 题解 cf#1709

    昨晚打了这把EDU,赛后看了dalao们的C题代码豁然开朗恍然大悟 实在是太巧妙了 这场来说,D题的通过率比C题高太多了(估计很多人都在C题卡了然后没做D 先放题目链接 题目链接 C - Recove ...

  7. SPFA算法(SLF优化)2022.7.8更新

    SPFA可能会被卡掉,能用dijkstra就别用SPFA,代码较长,但我已尽力做到解释,请耐心看下去,存储为邻接表存储. #include<bits/stdc++.h> #define i ...

  8. mysql8.0二进制安装遇到的问题

    公司新项目需要用CentOS8.0以上的系统和mysql8.0:于是在虚拟机上开始操作测试: 一实验环境 1.系统版本:CentOS8.32.数据库版本:mysql-8.0.233.数据库下载链接:h ...

  9. php static 和self区别

    static(关键字) 类似于 self(关键字) , 但它指向的是被调用的类(Document) 而不是包含类(DomainObject) , static 和 self 的区别: <?php ...

  10. 使用.NET简单实现一个Redis的高性能克隆版(三)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...