原文:https://my.oschina.net/xshuai/blog/917097

摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.net/xyang81/article/details/52554398可以看更多介绍 Keepalived的介绍可以百度一堆一堆的资料。一定要看看哦。 1.基于上一篇博客总结,再次安装一个虚拟机当backup服务器,这个服务器只安装Keepalived+Nginx即可 2.Master还是上一篇博文的虚拟机,环境是Tomcat+JDK+Nginx+Keepalived 3.每个Nginx服务器都安装Keepalived

基于 Nginx+Tomcat+Redis负载均衡Session共享来实现后续的功能

个人微信小程序。是关于人工智能的。应用是百度大脑 和 腾讯优图的人脸识别

  • 一张简单的图说下大概的意思

  • 安装Keepalived到CentOS虚拟机环境(2个虚拟机都安装)

使用的版本为keepalived-1.2.24.tar.gz 为了方便安装,在系统里面提前下载好相关的库

  1. yum -y install libnl libnl-devel
  2. yum install -y libnfnetlink-devel

然后就开始解压编译安装吧

  1. tar -zxvf keepalived-1.2.24.tar.gz
  2. cd keepalived-1.2.24.tar.gz
  3. ./configure --prefix=/usr/local/keepalived
  4. make
  5. make install

然后继续配置Keepalived

  1. mkdir /etc/keepalived
  2. cp /usr/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
  3. cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
  4. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
  5. 添加到开机自启
  6. chkconfig keepalived on
  7. 如果提示keepalived: command not found 解决方法如下
  8. ln -s /usr/local/keepalived/sbin/keepalived /sbin/
  9. 如果遇权限不足 执行以下命令
  10. chmod 755 /etc/init.d/keepalived
  11. 相关操作
  12. service keepalived start #启动服务
  13. service keepalived stop #停止服务
  14. service keepalived restart #重启服务
  15. 请不要着急去启动Keepalived
  • Keepalived的配置文件说明

  1. 引用于http://blog.csdn.net/xyang81/article/details/52554398
  2. keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。
  3. 一个功能比较完整的常用的keepalived配置文件,主要包含三块:
  4. 全局定义块、VRRP实例定义块和虚拟服务器定义块。
  5. 全局定义块是必须的,如果keepalived只用来做ha
  6. 虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板:
  7. #全局定义块
  8. global_defs {
  9. # 邮件通知配置
  10. notification_email {
  11. email1
  12. email2
  13. }
  14. notification_email_from email
  15. smtp_server host
  16. smtp_connect_timeout num
  17. lvs_id string
  18. router_id string ## 标识本节点的字条串,通常为hostname
  19. }
  20. #VRRP 实例定义块
  21. vrrp_sync_group string {
  22. group {
  23. string
  24. string
  25. }
  26. }
  27. vrrp_instance string {
  28. state MASTER|BACKUP
  29. virtual_router_id num
  30. interface string
  31. mcast_src_ip @IP
  32. priority num
  33. advert_int num
  34. nopreempt
  35. smtp_alert
  36. lvs_sync_daemon_interface string
  37. authentication {
  38. auth_type PASS|AH
  39. auth_pass string
  40. }
  41. virtual_ipaddress { # Block limited to 20 IP addresses @IP
  42. @IP
  43. @IP
  44. }
  45. }
  46. #虚拟服务器定义块
  47. virtual_server (@IP PORT)|(fwmark num) {
  48. delay_loop num
  49. lb_algo rr|wrr|lc|wlc|sh|dh|lblc
  50. lb_kind NAT|DR|TUN
  51. persistence_timeout num
  52. protocol TCP|UDP
  53. real_server @IP PORT {
  54. weight num
  55. notify_down /path/script.sh
  56. TCP_CHECK {
  57. connect_port num
  58. connect_timeout num
  59. }
  60. }
  61. real_server @IP PORT {
  62. weight num
  63. MISC_CHECK {
  64. misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
  65. }
  66. }
  67. real_server @IP PORT {
  68. weight num
  69. HTTP_GET|SSL_GET {
  70. url {
  71. # You can add multiple url block path alphanum
  72. digest alphanum
  73. }
  74. connect_port num
  75. connect_timeout num
  76. nb_get_retry num
  77. delay_before_retry num
  78. }
  79. }
  80. }
  81. 全局定义块
  82. 1email通知(notification_emailsmtp_serversmtp_connect_timeout):
  83. 用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,
  84. 建议用第三独立监控服务,如用nagios全面监控代替。
  85. 2lvs_idlvs负载均衡器标识,在一个网络内,它的值应该是唯一的。
  86. 3router_id:用户标识本节点的名称,通常为hostname
  87. 4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,
  88. keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,
  89. 因此很容易遗漏结尾处的花括号,这点需要特别注意。
  90. VRRP实例定义块
  91. vrrp_sync_group:同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。
  92. 即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪
  93. group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致
  94. vrrp_instancevrrp实例名
  95. 1> state:实例状态,只有MASTER BACKUP两种状态,并且需要全部大写。
  96. 抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,
  97. BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。
  98. 当失效的MASTER所在的服务恢复时,BACKUPMASTER恢复到BACKUP状态。
  99. 2> interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。
  100. 如:eth0eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
  101. 3> mcast_src_ip:本机IP地址
  102. 4> virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,
  103. 可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
  104. 5> priority:节点优先级,取值范围0254MASTER要比BACKUP
  105. 6> advert_intMASTERBACKUP节点间同步检查的时间间隔,单位为秒
  106. 7> lvs_sync_daemon_inteface:负载均衡器之间的监控接口,
  107. 类似于 HA HeartBeat 的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,
  108. 它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,
  109. lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口
  110. 8> authentication:验证类型和验证密码。类型主要有 PASSAH 两种,通常使用PASS类型,
  111. 据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTERBACKUP使用相同的密码才能正常通信。
  112. 9> smtp_alert:有故障时是否激活邮件通知
  113. 10> nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,
  114. BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,
  115. 升级为MASTERBACKUP服务又自动降为BACKUP
  116. 把工作权交给原MASTER。当配置了nopreempt
  117. MASTER从挂掉到恢复,不再将服务抢占过来。
  118. 11> virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。
  119. 虚拟服务器virtual_server定义块
  120. virtual_server:定义一个虚拟服务器,这个ipvirtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。
  121. 1> delay_loop:健康检查时间间隔,单位:秒
  122. 2> lb_algo:负载均衡调度算法,互联网应用常用方式为wlcrr
  123. 3> lb_kind:负载均衡转发规则。包括DRNATTUN 3种,一般使用路由(DR)转发规则。
  124. 4> persistence_timeouthttp服务会话保持时间,单位:秒
  125. 5> protocol:转发协议,分为TCPUDP两种
  126. real_server:真实服务器IP和端口,可以定义多个
  127. 1> weight:负载权重,值越大,转发的优先级越高
  128. 2> notify_down:服务停止后执行的脚本
  129. 3> TCP_CHECK:服务有效性检测
  130. * connect_port:服务连接端口
  131. * connect_timeout:服务连接超时时长,单位:秒
  132. * nb_get_retry:服务连接失败重试次数
  133. * delay_before_retry:重试连接间隔,单位:秒
  • Keepalived+Nginx配置实现高可用负载均衡

  • 服务器IP配置信息

VIP(虚拟IP) IP 主机名 Nginx端口
192.168.110.138 192.168.110.128 nginx_master 80
192.168.110.138 192.168.110.130 nginx_backup 80

想了解更多内容移步:http://freeloda.blog.51cto.com/2033581/1280962

Nginx安装上个博文中有给出

  • 配置Keepalived(抢占模式配置) 增加VIP 启动服务

  • MASTER(192.168.110.128)配置信息

  1. global_defs {
  2. router_id nginx_master #hostname
  3. }
  4. vrrp_script chk_nginx {
  5. script "/etc/keepalived/nginx_check.sh" #检测nginx的脚本
  6. interval 2 #每2秒检测一次
  7. weight -20 #如果某一个nginx宕机 则权重减20
  8. }
  9. vrrp_instance VI_1 {
  10. state MASTER #状态 MASTER BACKUP
  11. interface eth0 #绑定的网卡
  12. virtual_router_id 51 #虚拟路由的ID号,两个节点设置必须一样
  13. mcast_src_ip 192.168.110.128 #本机的IP
  14. priority 90
  15. advert_int 1
  16. # 设置验证信息,两个节点必须一致
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111
  20. }
  21. # 虚拟IP,两个节点设置必须一样。
  22. virtual_ipaddress {
  23. 192.168.110.138
  24. }
  25. # nginx存活状态检测脚本
  26. track_script {
  27. chk_nginx
  28. }
  29. }
  • BACKUP(192.168.110.130)配置信息

  1. global_defs {
  2. router_id nginx_backup #hostname
  3. }
  4. vrrp_script chk_nginx {
  5. script "/etc/keepalived/nginx_check.sh" #检测nginx的脚本
  6. interval 2 #每2秒检测一次
  7. weight -20 #如果某一个nginx宕机 则权重减20
  8. }
  9. vrrp_instance VI_1 {
  10. state BACKUP #状态 MASTER BACKUP
  11. interface eth0 #绑定的网卡
  12. virtual_router_id 51
  13. mcast_src_ip 192.168.110.130
  14. priority 90
  15. advert_int 1
  16. authentication {
  17. auth_type PASS
  18. auth_pass 1111
  19. }
  20. virtual_ipaddress {
  21. 192.168.110.138
  22. }
  23. track_script {
  24. chk_nginx
  25. }
  26. }
  • 创建Nginx服务检测脚本

  1. 原文地址http://blog.csdn.net/xyang81/article/details/52556886
  2. #!/bin/bash
  3. A=`ps -C nginx --no-header | wc -l`
  4. if [ $A -eq 0 ];then
  5. /opt/nginx/sbin/nginx #尝试重新启动nginx
  6. sleep 2 #睡眠2秒
  7. if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
  8. killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
  9. fi
  10. fi
  • 启动Keepalived服务 service keepalived start 看是否在MASTER绑定了VIP地址

MASTER 信息 (可以看到虚拟IP 192.168.110.138绑定在了MASTER服务器上面)

BACKUP信息

  • 手动关闭MASTER模拟主服务器宕机,再看网络信息

MASTER 信息 (看到虚拟IP已经不存在 证明已经转移目标主机)

BACKUP信息(虚拟IP 192.168.110.138已经转移到BACKUP服务器)

  • 查看项目是否正常,Session是否共享

使用是虚拟IP进行访问 登录没错

轮询Tomcat服务器也没有重新登录

Redis也是一个唯一的Session

Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)的更多相关文章

  1. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)-转帖篇

    原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...

  2. 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!

    写在前面 最近出版了<海量数据处理与大数据技术实战>,详情可以关注 冰河技术 微信公众号,查看<我的<海量数据处理与大数据技术实战>出版啦!>一文. 也有不少小伙伴 ...

  3. Nginx+keepalived双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  4. Nginx+keepalived 双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  5. Nginx+keepalived双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  6. Nginx+keepalived 双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  7. Nginx+keepalived双机热备(默认路径安装)- 基础篇

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  8. Keepalived+HAProxy 搭建高可用负载均衡

    转载自:https://mp.weixin.qq.com/s/VebiWftaRa26x1aA21Jqww 1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技 ...

  9. Keepalived+lvs 搭建高可用负载均衡

    本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...

随机推荐

  1. 图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用

     图解 TCP/IP  第六章 TCP与UDP   笔记6.1 传输层的作用   传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程 ...

  2. iOS Programming Web Services and UIWebView

    iOS Programming Web Services and UIWebView The work is divided into two parts. The first is connecti ...

  3. R in action读书笔记(3)-第六章:基本图形

    第六章  基本图形 6.1条形图 条形图通过垂直的或水平的条形展示了类别型变量的分布(频数).函数:barplot(height) 6.1.1简单的条形图 6.1.2推砌条形图和分组条形图 如果hei ...

  4. PHP到浏览器的缓存机制

    参考地址:http://www.cnblogs.com/godok/p/6341300.html 所有的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”. 但是 ...

  5. 玩一把redis源码(一):为redis添加自己的列表类型

    2019年第一篇文档,为2019年做个良好的开端,本文档通过step by step的方式向读者展示如何为redis添加一个数据类型,阅读本文档后读者对redis源码的执行逻辑会有比较清晰的认识,并且 ...

  6. 通过 GCC 学习 OpenMP 框架

     OpenMP 框架是使用 C.C++ 和 Fortran 进行并发编程的一种强大方法.GNU Compiler Collection (GCC) V4.4.7 支持 OpenMP 3.0 标准,而 ...

  7. IIS更改根目录

    服务器中打开IIS管理器,选择网站,再选展开后的站点,点击右边高级设置,最后更改弹框中的物理地址即可:

  8. Android中notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别

     看下源码中对于这两个方法   public void notifyDataSetChanged () 该方法内部实现了在每个观察者上面调用onChanged事件.每当发现数据集有改变的情况,或者读取 ...

  9. jq进度条

    <!doctype html><html><head><meta charset="utf-8"><title>JQue ...

  10. HDU - 2058 The sum problem(思路题)

    题目: Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the ...