1. keepalived原理介绍

  1. 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,Keepalived通过请求一个vip来达到请求真是IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用HA功能。那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是keepalived实现的基础,那么首先我们来看看VRRP协议。

注:搞运维的要有足够的耐心,不理解协议就很难透彻的掌握keepalived的了

2. VRRP协议

  1. 虚拟路由网关冗余协议,它将多个路由器划分成一组,将一组路由器虚拟成一个路由器,对外只能使用一个漂移IP进行通信;当某一个路由器宕机,那么这个IP就会被另一个优先级较高的路由器抢占;master会向这一组路由器直接通过组播地址来进行通道自己的身份信息和优先级,当有路由器优先级比他高,就会将自己的优先级告知当前master,然后抢占;

3.Keepalived配置文件

一、全局配置

  1. 1.全局定义配置
  2. global_defs { #定义全局配置上下文
  3. notification_email { #发给谁
  4. root@localhost
  5. }
  6. notification_email_from keepalived@localhost #发通知的源地址
  7. smtp_server 127.0.0.1 #用哪个smtp服务器
  8. router_id lvs_master #当前主机标识,注意一个vrrp组内标识唯一
  9. }
  10. 2.静态路由配置
  11. static_ipaddress
  12. {
  13. 192.168.1.1/24 brd + dev eth0 scope global #相当于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
  14. 192.168.1.2/24 brd + dev eth1 scope global #就是给eth1配置IP地址
  15. }
  16. static_routes
  17. {
  18. src $SRC_IP to $DST_IP dev $SRC_DEVICE #路由和ip同理,一般这个区域不需要配置
  19. src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
  20. }

二、VRRP配置

  1. 1.VRRP同步组配置
  2. vrrp_sync_group VG_1 {
  3. group {
  4. VI_1 #实例名
  5. VI_2 #实例名
  6. }
  7. notify_master /path/to/to_master.sh #表示当切换到master状态时,要执行的脚本
  8. notify_backup /path_to/to_backup.sh #表示当切换到backup状态时,要执行的脚本
  9. notify_fault "/path/fault.sh VG_1"
  10. notify /path/to/notify.sh #切换就执行的脚本
  11. smtp_alert #表示切换时给global defs中定义的邮件地址发送邮件通知
  12. }
  13. 2.VRRP实例配置
  14. vrrp_instance VI_1 {
  15. state MASTER #初始化时的状态,最终状态需要竞选优先级来确定
  16. interface ens33 #将共享的虚拟IP配置在哪一个网卡
  17. virtual_router_id 10 #虚拟路由器ID,ID相同则在一个组内
  18. priority 100 #优先级,0-255.0表示不可用,越高越优先
  19. advert_int 1 #检查时间
  20. authentication { #认证
  21. auth_type PASS
  22. auth_pass 1111
  23. }
  24. virtual_ipaddress { #对外展现的漂移IP
  25. 192.168.10.100
  26. }
  27. }

三、LVS配置

  1. virtual_server 192.168.10.100 80 { #virtual server IP port|virtual server fwmark int 用什么来调度
  2. delay_loop 6 #service polling的delay时间,即服务轮询的时间间隔
  3. lb_algo rr #调度算法,rr | wrr | sh | dh | lc | wlc | lblc
  4. lb_kind DR #LVS集群模式
  5. persistence_timeout 0 #保持连接时长
  6. protocol TCP #健康检查用的是TCP还是UDP
  7. sorry_server 127.0.0.1 80 #备用机,就是当所有后端realserver节点都不可用时,就用这里设置的,也就是临时把所
  8. real_server 192.168.10.13 80 { #RS地址加端口
  9. weight 1 #权重
  10. notify_up <STRING> | <QUOTED-STRING> #检查服务器正常(UP)后,要执行的脚本
  11. notify_down <STRING> | <QUOTED-STRING> #检查服务器失败(down)后,要执行的脚本
  12. HTTP_GET #健康检查方式
  13. {
  14. url{ #要坚持的URL,可以有多个
  15. path /index.html #路径
  16. digest <STRING> #md5生成的hash码,检测时将网页内容hash,与之比对;
  17. status_code 200 #返回状态码
  18. }
  19. connect_port 80 #监控检查的端口
  20. connect_timeout 3 #连接超时时间
  21. nb_get_retry 3 #重连次数
  22. delay_before_retry 2 #重连间隔
  23. }
  24. }
  25. }
  26. #康检测方式:
  27. TCP_CHECK {
  28. connect_port 80
  29. bindto 192.168.1.1
  30. connect_timeout 4
  31. }
  32. #网页MD5生成方式 curl -s URL | md5sum

4. Keepalive+LVS-DR

  1. 1.环境:(Director_master:192.168.10.11),(Director_master:192.168.10.12),(RS1:192.168.10.12),(RS2:192.168.10.13;
  2. 2.搭建LVS-DR(只需要配置好两个RS即可,LVS配置会由Keepalive自动生成)
  3. 3.配置keepalive
  4. global_defs {
  5. notification_email {
  6. root@localhost
  7. }
  8. notification_email_from keepalived@localhost
  9. smtp_server 127.0.0.1
  10. router_id lvs_master
  11. }
  12. vrrp_instance VI_1 {
  13. state MASTER
  14. interface ens33
  15. virtual_router_id 10
  16. priority 100
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass 1111
  21. }
  22. virtual_ipaddress {
  23. 192.168.10.100
  24. }
  25. }
  26. virtual_server 192.168.10.100 80 {
  27. delay_loop 6
  28. lb_algo rr
  29. lb_kind DR
  30. persistence_timeout 0
  31. protocol TCP
  32. real_server 192.168.10.13 80 {
  33. weight 1
  34. TCP_CHECK {
  35. connect_port 80
  36. connect_timeout 3
  37. nb_get_retry 3
  38. delay_before_retry 3
  39. }
  40. }
  41. real_server 192.168.10.14 80 {
  42. weight 1
  43. TCP_CHECK {
  44. connect_port 80
  45. connect_timeout 3
  46. nb_get_retry 3
  47. delay_before_retry 3
  48. }
  49. }
  50. }