1. # 拉取haproxy镜像
  2. docker pull haproxy:1.7.8-alpine
  3. mkdir /etc/haproxy
  4. cat >/etc/haproxy/haproxy.cfg<<EOF
  5. global
  6. log 127.0.0.1 local0 err
  7. maxconn 50000
  8. uid 99
  9. gid 99
  10. #daemon
  11. nbproc 1
  12. pidfile haproxy.pid
  13. defaults
  14. mode http
  15. log 127.0.0.1 local0 err
  16. maxconn 50000
  17. retries 3
  18. timeout connect 5s
  19. timeout client 30s
  20. timeout server 30s
  21. timeout check 2s
  22. listen admin_stats
  23. mode http
  24. bind 0.0.0.0:1080
  25. log 127.0.0.1 local0 err
  26. stats refresh 30s
  27. stats uri /haproxy-status
  28. stats realm Haproxy\ Statistics
  29. stats auth will:will
  30. stats hide-version
  31. stats admin if TRUE
  32. frontend k8s-https
  33. bind 0.0.0.0:8443
  34. mode tcp
  35. #maxconn 50000
  36. default_backend k8s-https
  37. backend k8s-https
  38. mode tcp
  39. balance roundrobin
  40. server lab1 192.168.105.92:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3
  41. server lab2 192.168.105.93:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3
  42. server lab3 192.168.105.94:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3
  43. EOF
  44. # 启动haproxy
  45. docker run -d --name my-haproxy \
  46. -v /etc/haproxy:/usr/local/etc/haproxy:ro \
  47. -p 8443:8443 \
  48. -p 1080:1080 \
  49. --restart always \
  50. haproxy:1.7.8-alpine
  51. # 查看日志
  52. docker logs my-haproxy
  53. # 浏览器查看状态
  54. http://192.168.105.92:1080/haproxy-status
  55. http://192.168.105.93:1080/haproxy-status
  56. http://192.168.105.94:1080/haproxy-status
  57. # 拉取keepalived镜像
  58. docker pull osixia/keepalived:1.4.4
  59. # 启动
  60. # 载入内核相关模块
  61. lsmod | grep ip_vs
  62. modprobe ip_vs
  63. # 启动keepalived
  64. # ens32为本次实验192.168.105.0/24网段的所在网卡
  65. docker run --net=host --cap-add=NET_ADMIN \
  66. -e KEEPALIVED_INTERFACE=ens32 \
  67. -e KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:['192.168.105.99']" \
  68. -e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.105.92','192.168.105.93','192.168.105.94']" \
  69. -e KEEPALIVED_PASSWORD=hello \
  70. --name k8s-keepalived \
  71. --restart always \
  72. -d osixia/keepalived:1.4.4
  73. # 查看日志
  74. # 会看到两个成为backup 一个成为master
  75. docker logs k8s-keepalived
  76. # 此时会配置 192.168.105.99 到其中一台机器
  77. # ping测试
  78. ping -c4 192.168.105.99
  79. # 如果失败后清理后,重新实验
  80. #docker rm -f k8s-keepalived
  81. #ip a del 192.168.105.99/32 dev ens32

测试Haproxy高可用


  1. #抓个包看看现在VIP在哪台机器上,然后去关掉这台机器
  2. tcpdump -nn host 224.0.100.100
  3. [root@master2 ~]# tcpdump -nn host 224.0.100.100
  4. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  5. listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
  6. 17:45:59.768033 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  7. 17:46:00.769503 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  8. 17:46:01.771062 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  9. ^C
  10. #现在VIP是在192.168.1.4这台主机上,关掉这台机器
  11. init 0
  12. #关掉之后发现192.168.1.5立马接管了。现在VIP是在1.5上
  13. [root@node3 ~]# tcpdump -nn host 224.0.100.100
  14. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  15. listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
  16. 17:48:25.031679 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  17. 17:48:26.033805 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  18. 17:48:27.035313 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  19. 17:48:28.036628 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  20. 17:48:29.039011 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  21. 17:48:30.041249 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  22. 17:48:31.043065 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  23. 17:48:32.045007 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  24. 17:48:33.046781 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  25. 17:48:34.048776 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  26. 17:48:35.051280 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 100, authtype simple, intvl 1s, length 20
  27. 17:48:35.929482 IP 192.168.1.4 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 0, authtype simple, intvl 1s, length 20
  28. 17:48:36.618749 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  29. 17:48:37.699849 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  30. 17:48:38.700669 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  31. 17:48:39.702840 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  32. 17:48:40.704254 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  33. 17:48:41.706221 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  34. 17:48:42.706478 IP 192.168.1.5 > 224.0.100.100: VRRPv2, Advertisement, vrid 6, prio 80, authtype simple, intvl 1s, length 20
  35. ^C
  36. 19 packets captured
  37. 326 packets received by filter
  38. 172 packets dropped by kernel
  39. #切换到master2,再创建个POD试试
  40. kubectl run curl --image=radial/busyboxplus:curl -i --tty
  41. date
  42. exit
  43. kubectl delete deployment curl
  44. [root@master2 ~]# kubectl run curl --image=radial/busyboxplus:curl -i --tty
  45. If you don't see a command prompt, try pressing enter.
  46. [ root@curl-87b54756-xfgrn:/ ]$ date
  47. Thu Sep 13 09:50:58 UTC 2018
  48. [ root@curl-87b54756-xfgrn:/ ]$
  49. [ root@curl-87b54756-xfgrn:/ ]$ exit
  50. Session ended, resume using 'kubectl attach curl-87b54756-xfgrn -c curl -i -t' command when the pod is running
  51. [root@master2 ~]# kubectl delete deployment curl
  52. deployment.extensions "curl" deleted

容器化haproxy+keepalived的更多相关文章

  1. centos7.4安装高可用(haproxy+keepalived实现)kubernetes1.6.0集群(开启TLS认证)

    目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...

  2. Consul集群版容器化部署与应用集成

    背景 由于公司目前的主要产品使用的注册中心是consul,consul需要用集群来保证高可用,传统的方式(Nginx/HAProxy)会有单点故障问题,为了解决该问题,我开始研究如何只依赖consul ...

  3. docker4dotnet #2 容器化主机

    .NET 猿自从认识了小鲸鱼,感觉功力大增.上篇<docker4dotnet #1 前世今生&世界你好>中给大家介绍了如何在Windows上面配置Docker for Window ...

  4. HaProxy+Keepalived+Mycat高可用群集配置

    概述 本章节主要介绍配置HaProxy+Keepalived高可用群集,Mycat的配置就不在这里做介绍,可以参考我前面写的几篇关于Mycat的文章. 部署图: 配置  HaProxy安装 181和1 ...

  5. haproxy +keepalived 原创

    Haproxy+keepalived 原理: HAProxy介绍及其定位 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.根 ...

  6. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  7. HaProxy+keepalived实现负载均衡

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  8. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  9. 面向UI编程:ui.js 1.0 粗糙版本发布,分布式开发+容器化+组件化+配置化框架,从无到有的艰难创造

    时隔第一次被UI思路激励,到现在1.0的粗糙版本发布,掐指一算整整半年了.半年之间,有些细节不断推翻重做,再推翻再重做.时隔今日,终于能先出来个东西了,这个版本很粗糙,主体功能大概能实现了,但是还是有 ...

随机推荐

  1. dubbo-源码阅读之javaspi&javasist简单使用

    dubbo可扩展的点的类的对象创建 都是用类似javaspi和javasist的思想来做的.所以看后面代码 先熟悉一下java的SPI和javasist的使用 如ServicesConfig的代码 p ...

  2. asp怎么实现二级联动下拉菜单

    rs为一级栏目的记录集 rs2为二级栏目的记录集 分别替换成你自己的记录集名称就好了 <script language="JavaScript"> var onecou ...

  3. C#--Task知识点

    5天玩转C#并行和多线程编程 TASK使用总结 Task是什么,字面意思是任务 表示一个异步操作.它是异步操作的首选方式.Task是FRAMEWORK4中的新特性,封装了以前的Thread,并管理Th ...

  4. 楼控-西门子insight BBMD设置

    BBMD设置的目的就是让两个不同网段的设备可以同时在一个系统中访问的操作. 比如你有两个bacnet的网络,但是一个是192.168.0.1-192.168.0.255的网段,另一个是10.0.0.1 ...

  5. Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected

    首先说一下5.3貌似没有这个问题, 可是眼下最新版的luasocket 3.0 rc1仅仅能支持5.2, 5.3调用的话程序会崩溃(不知道是不是我没配置好) 出现这个问题的解决办法, 想必网上有非常多 ...

  6. Ruby 读取文件

    Ruby 读取文件 一次全读出来 textAll = File.read("fileName.txt") puts textAll 一次读取一行 file = File.open( ...

  7. POJ 1442 Black Box(优先队列)

    题目地址:POJ 1442 这题是用了两个优先队列,当中一个是较大优先.还有一个是较小优先. 让较大优先的队列保持k个.每次输出较大优先队列的队头. 每次取出一个数之后,都要先进行推断,假设这个数比較 ...

  8. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第0步---知识点总结&amp;效果预览&amp;设计思路

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏.这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码:第二能够说 ...

  9. 兼容chrome和ie的音乐播放

    兼容chrome和ie的音乐播放(Ie7 Ie8 Ie9 均測试过 ) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  10. JQuery常用的api[最好是系统地学习一下《锋利的JQuery》]

    text http://api.jquery.com/text/ Get the combined text contents of each element in the set of matche ...