设为首页 收藏本站
查看: 1234|回复: 0

[经验分享] Keepalived简介及安装

[复制链接]

尚未签到

发表于 2018-12-30 11:49:26 | 显示全部楼层 |阅读模式
  1. 什么是Keepalived?
  keepalived是一个类似与layer3,4,5交换机制的软件,也就是我们平时说的第3,4,5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后keepalived自动将web服务器加入到服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.
  2. Keepalived作用
  负载均衡方案
  高可用性HA
  实现对是小机器/服务的故障隔离
  负载均衡器间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现
  3. Keepalived体系结构
  Keepalived大致分为两层结构: 用户空间(User space)和内核空间(kernel space)

  WatchDog    负责监控checkers和VRRP进程的状况
  Checkers        负责真实服务器的健康检查healthchecking,是Keepalived最主要的功能.换句话说--可以没有VRRP Stack,但健康检查healthchecking是一定要有的.
  CRRP Stack        负责负载均衡器之间失败切换FailOver. 如果只用一个负载均衡器,则VRRP不是必须的.
  IPVS wrapper        用来发送设定的规则到内核ipvs代码
  Netlink Reflector        用来设定vrrp 的vip地址等
  3. Keepalived的安装
  [root@clust1 keepalived-1.2.1]# ln -s /usr/src/kernels/2.6.18-238.el5-i686/ /usr/src/linux
  ## 否则 Use IPVS Framework : No
  [root@clust1 keepalived-1.2.1]# ./configure --prefix=/opt/keepalived121/
  [root@clust1 keepalived-1.2.1]# make
  [root@clust1 keepalived-1.2.1]# make install
  [root@clust1 keepalived-1.2.1]# cd /opt/keepalived121/
  # 设置 service 方式启动服务
  [root@clust1 keepalived121]# mkdir /etc/keepalived
  [root@clust1 keepalived121]# cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  [root@clust1 keepalived121]# cp etc/sysconfig/keepalived /etc/sysconfig/
  [root@clust1 keepalived121]# cp etc/keepalived/keepalived.conf /etc/keepalived/
  [root@clust1 keepalived121]# cp sbin/keepalived /usr/sbin/
  #启动进程
  [root@clust1 keepalived121]# service keepalived start
  Starting keepalived: [ OK ]
  [root@clust1 keepalived121]# ps aux | grep keep
  root 15417 0.0 0.2 5032 576 ? Ss 19:58 0:00 keepalived -D
  root 15418 0.0 0.5 5104 1452 ? S 19:58 0:00 keepalived -D
  root 15419 0.0 0.3 5104 972 ? S 19:58 0:00 keepalived -D
  Keepalived正常运行时,共启动3个进程,其中一个进程是父进程,负责监控其子进程,一个是vrrp子进程,另外一个是checkers子进程.
  4. Keepalived的配置文件
  位置:
  [root@clust1 keepalived121]# cat /etc/keepalived/keepalived.conf
  Keepalived的所有配置都在一个配置文件里设置,支持的配置项也比较多,可以分为三类:
  a. 全局配置(Global configuration)
  就是对整个Keepalived起作用的配置,不管是否使用LVS
  b. VRRPD配置
  是Keepalived的核心
  c. LVS配置
  只在使用Keepalived来配置和管理LVS时需要使用,如果仅使用Keepalived来做HA,LVS的配置完全是不需要的
  4.1 全局配置
  全局配置包括两个子配置: 全局定义(global definition), 静态地址路由(static ipaddress routes)
  A: 全局定义主要设置Keepalived的通知机制和标识:
  global_defs {
  notification_email {
  acassen@firewall.loc
  failover@firewall.loc
  sysadmin@firewall.loc
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 192.168.200.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  }
  notification_email : 指定Keepalived在发生事件时,需要发送Email到的对象,可以有多个,每行一个
  smtp_* : 指定发送email的smtp服务器
  route_id : 运行Keepalived的机器的一个标识
  B: 静态地址和路由
  所谓静态,就是说不会随vrrpd instance的开/关的变化的,VIP就不是static的,会随着vrrp而添加/删除,这个配置可以用来给服务器配置静态的IP地址/路由
  静态地址和路由的配置结构:
  static_ipaddress {
  192.168.1.1/24 brd + dev eth0 scope global
  }
  static_routes {
  src $SRC_IP to $DST_IP dev $SRC_DEVICE
  .....
  src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
  }
  4.2 VRRPD配置
  VRRPD的配置也包括两个部分: VRRP同步组(synchronization group), VRRP实例(VRRP instance)
  A: VRRP同步组
  如果机器或路由有两个网段,一个内网一个外网,每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么外网出现问题时,VRRPD认为自己仍然健康,那么不会发送Master和Backup的切换,sync group就是为了解决这个问题,可以把两个实例都放进一个sync group. 这样group里任何一个实例出现问题都会发生切换.
  VRRP同步组的配置结构:
  vrrp_sync_group VG_1 {
  group {
  inside_network
  outside_network
  }
  notify_master /path/to/to_master.sh
  notify_backup /path/to/to_backup.sh
  notify_fault "/path/fault.sh VG_1"
  notify /path/to/notify.sh
  smtp_alert
  }
  # notify_master : 指定当切换到master时,执行的脚本,这个脚本可以传入参数
  # smtp_alert : 使用global_defs里面定义的邮件地址和smtp服务器在切换后发送邮件通知
  B: VRRP实例
  VRRP实例表示在上面开启了VRRP协议,这个实例说明了VRRP的一些特性.
  VRRP实例的配置结构:
  vrrp_instance VI_1 {
  state MASTER# 实例的初始状态
  interface eth0# 实例绑定的网卡
  dont_track_primary# 忽略VRRP的interface错误
  lvs_sync_daemon_interface eth0# 绑定eth0作为lvs同步的
  track_interface {# 设置额外的监控,里面的任意一个出现问题,都会进入fault状态
  eth0
  eth1
  }
  mcast_src_ip # 发送多播包地址,默认使用绑定的网卡
  garp_master_delay 10# 在切换到master状态后,延迟进行gratuitous ARP请求
  virtual_router_id 51# VRID标记
  priority 100# 高优先级竞选为master,至少高backup 50
  advert_int 1# 检查间隔
  authentication {# 设置验证
  auth_type PASS# 认证方式,支持PASS和AH
  auth_pass 1111# 认证的密码
  }
  virtual_ipaddress {   # 虚拟IP
  # /brddevscopelabel
  192.168.200.16
  192.168.200.17
  192.168.200.18
  }
  }
  C: 检查服务是否正常配置:
  vrrp_script chk_http_port {
  script "killall -0 httpd"  #检查httpd服务是否正常
  # script "/tcp/127.0.0.1/80"
  interval 1  #检查时间间隔
  }
  使用:
  在vrrp_instance里面
  track_script {
  chk_http_port
  }
  4.3 LVS配置
  LVS的配置有两个部分: 虚拟主机组(virtual server group), 虚拟主机(virtual server)
  A: 虚拟主机组
  可选的,目的是为了让一台RealServer上的某个service可以属于多个virtual server并且只做一次健康检查
  virtual_server_group  {
  # VIP port
  
  
  .....
  fwmark
  }
  B: 虚拟主机   --虚拟服务器定义部分
  virtual_server 10.10.10.3 1358 { # 设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
  delay_loop 3# 设置健康检查时间,单位是秒
  lb_algo rr # 设置负载调度算法
  lb_kind NAT # 设置LVS实现负载均衡的机制,可以有NAT,TUN和DR三个模式
  nat_mask 255.255.255.0
  persistence_timeout 50# 会话保持时间,单位的秒
  protocol TCP# 指定转发协议类型,有tcp和udp两种
  sorry_server  # 备机IP端口,所有的real server失效后启用
  # 节点服务器配置部分
  real_server 192.168.200.4 1358 { # 配置服务节点,需要指定real server的真实IP地址和端口,ip与端口之间用空格隔开
  weight 1# 配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,
  # 设置权值的大小可以为不同性能的服务器分配不同的负载,
  # 可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值
  # 这样就合理的利用和分配了系统资源
  inhibit_on_failure# 健康检查失败后,将weight设置为0,不从IPVS里面删除
  TCP_CHECK {# realserver的状态检查设置部分,单位是秒
  connect_timeout 10# 10秒无响应超时
  nb_get_retry 3# 重试次数
  delay_before_retry 3# 重试间隔
  }
  HTTP_GET {
  url {
  path /testurl/test.jsp
  digest 640205b7b0fc66c1ea91c463fac6334d
  }
  url {
  path /testurl2/test.jsp
  digest 640205b7b0fc66c1ea91c463fac6334d
  }
  url {
  path /testurl3/test.jsp
  digest 640205b7b0fc66c1ea91c463fac6334d
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  }
  5. 测试

  clust3 -> keepalived.conf
  [root@clust3 keepalived-1.2.1]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  global_defs {
  router_id Haweb_1
  }
  vrrp_sync_group VGM {
  group {
  VI_HA
  }
  }
  vrrp_instance VI_HA {
  state MASTER
  interface eth1
  lvs_sync_daemon_interface eth1
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.98.155/24 dev eth1
  }
  }
  clust4 -> keepalived.conf
  [root@clust4 keepalived-1.2.1]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  global_defs {
  router_id Haweb_1
  }
  vrrp_sync_group VGM {
  group {
  VI_HA
  }
  }
  vrrp_instance VI_HA {
  state BACKUP
  interface eth1
  lvs_sync_daemon_interface eth1
  virtual_router_id 51
  priority 90
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.98.155/24 dev eth1
  }
  }
  # 查看日志输出
  [root@clust4 keepalived-1.2.1]# tail -f /var/log/messages
  # stop master/backup查看IP地址变化
  [root@clust4 keepalived-1.2.1]# ip a
  # cluster3 -> service keepalived stop
  # 浏览器输入 192.168.98.155 看现实的哪台服务器的页面内容
  # cluster3 -> service keepalived start
  # 浏览器输入 192.168.98.155 看现实的哪台服务器的页面内容
  问题:
  1. Keepalived抢占问题如何优化?
  两台服务器组成高可用集群,分别处于Master和Backup状态,当Master出现故障时由Backup来接管所有任务,那么当Master恢复时,Master会抢回所有权.虽然是高可用,但是对客户来说,来回的切换是比较烦恼的事.
  解决: 可将两服务器均设置成backup状态是因为 nopreempt(不抢占)只支持backup模式,而让那一台成为master,这个由优先级priority来决定


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657554-1-1.html 上篇帖子: CentOS6.6高可用集群LVS+Keepalived-jedy 网络技术&linux学习 下篇帖子: Keepalived+lvs/DR 的 HA 集群、Keepalived实现web服务的HA集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表