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

[经验分享] linux负载均衡软件LVS-使用LVS+keepalived

[复制链接]

尚未签到

发表于 2015-9-4 08:56:50 | 显示全部楼层 |阅读模式
5.安装配置keepalived
  Keepalived 是运行在 lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换 FailOver.lvs 结合 keepalived,就实现了 3 层、4 层、5/7 层交换的功能。下面进行LVS第二种用法,LVS+keepalived。其中ipvsadm的安装及验证同本文第4.2章节(这种方式不需要配置Director Server),Real Server的配置及验证同本文第4.4章节
  *所有Director Server需要安装keepalived(已经安装了ipvsadm的主机)
5.1 准备工作
  地址规划:与第一种方式类似。
  服务器名
  IP地址
  网关
  虚拟设备名
  虚拟IP
  Director Server:主
  192.168.98.75
  192.168.98.1
  eth0
  192.168.98.77
  Director Server:备
  192.168.98.118
  192.168.98.1
  eth0
  192.168.98.77
  Real Server 1
  192.168.98.74
  192.168.98.1
  lo:0
  192.168.98.77
  Real Server 2
  192.168.98.117
  192.168.98.1
  lo:0
  192.168.98.77
  Real Server n
  …
  …
  ..
  ..
5.2 安装keepalived
  1. 解压keepalived-1.1.17.tar.gz软件包:
  [iyunv@localhost ~]# tar zxvf keepalived-1.1.17.tar.gz
  2. 切换目录:
  [iyunv@localhost ~]# cd keepalived-1.1.17
  3. 配置configure
  [iyunv@localhost ~]# ./configure –prefix=/usr/local/keepalived
  因为 keepalived 运行在 ipvs 之上,因此这两个软件一定要安装在一个系统里面。如果 configure 操作能正常进行,运行完毕后将有如下的汇总输出:
  Keepalived configuration
  ------------------------
  Keepalived version : 1.1.17
  Compiler : gcc
  Compiler flags : -g -O2
  Extra Lib : -lpopt -lssl -lcrypto
  Use IPVS Framework : Yes
  IPVS sync daemon support : Yes
  Use VRRP Framework : Yes
  Use LinkWatch : No
  Use Debug flags : No
  4. 编译安装
  [iyunv@localhost ~]# make
  [iyunv@localhost ~]# make install
5.2.1 安装keepalived验证
  Keepalived 安装完成后,会在安装目录/usr/local/keepalived 生成 bin,etc,sbin,share 这 4 个目录。其中 etc 为配置文件所在的目录,进入这个目录,看看里面都有些什么?
  [iyunv@ localhost ~]# cd /usr/local/keepalived/etc/
  [iyunv@ localhost etc]# ll
  total 24
  drwxr-xr-x 3 root root 4096 May 30 15:24 keepalived
  drwxr-xr-x 3 root root 4096 May 30 15:24 rc.d
  drwxr-xr-x 2 root root 4096 May 30 15:24 sysconfig
  还有子目录,这里着重关注一下 keepalived 目录,它的下面包含一个完整的配置文件keepalived.conf(实际上是一个样例)以及一些单独的配置样例文件。
  [iyunv@ localhost etc]# cd keepalived/
  [iyunv@ localhost keepalived]# ll
  total 16
  -rw-r--r-- 1 root root 3562 May 30 15:24 keepalived.conf
  drwxr-xr-x 2 root root 4096 May 30 15:24 samples
  [iyunv@ localhost keepalived]# tree -l
  .
  |-- keepalived.conf
  `-- samples
  |-- client.pem
  |-- dh1024.pem
  |-- keepalived.conf.HTTP_GET.port
  |-- keepalived.conf.SMTP_CHECK
  |-- keepalived.conf.SSL_GET
  |-- keepalived.conf.fwmark
  |-- keepalived.conf.inhibit
  |-- keepalived.conf.misc_check
  |-- keepalived.conf.misc_check_arg
  |-- keepalived.conf.quorum
  |-- keepalived.conf.sample
  |-- keepalived.conf.status_code
  |-- keepalived.conf.track_interface
  |-- keepalived.conf.virtual_server_group
  |-- keepalived.conf.virtualhost
  |-- keepalived.conf.vrrp
  |-- keepalived.conf.vrrp.localcheck
  |-- keepalived.conf.vrrp.lvs_syncd
  |-- keepalived.conf.vrrp.routes
  |-- keepalived.conf.vrrp.scripts
  |-- keepalived.conf.vrrp.static_ipaddress
  |-- keepalived.conf.vrrp.sync
  |-- root.pem
  `-- sample.misccheck.smbcheck.sh
  1 directory, 25 files
5.3 配置keepalived
5.3.1 开启路由转发功能
  首先开启路由转发功能:
  [iyunv@ localhost ~]#echo "1">/proc/sys/net/ipv4/ip_forward
5.3.2 keepalived.conf配置
  主服务器的配置文件:
  /usr/local/keepalive/etc/keepalived/keepalived.conf
  #global define
  global_defs {
  router_id LVS_TEST_1 #本服务器的名称,备份组内唯一
  }
  ############################################
  # vvrp_instance define #
  ############################################
  vrrp_instance DR_CACHE { #VRRP热备实例名
  state MASTER #热备状态,MASTER(主);BACKUP(备份)
  interface eth0 #承载VIP地址的物理接口
  lvs_sync_daemon_inteface eth0 #负载均衡器之间的监控接口(DR模式中同interface)
  virtual_router_id 51 #虚拟路由器的ID号,组内保存一致
  priority 180 #优先级,数值越大优先级越高,MASTER应该高于BACKUP
  advert_int 5 #主备之间的通告间隔秒数(心跳频率)
  authentication { #认证信息,每个热备组保持一致
  auth_type PASS #认证类型,主备切换时的验证
  auth_pass 123 #密码字串
  }
  virtual_ipaddress { #指定虚拟地址(VIP),可以有多个
  192.168.98.77
  }
  }
  #############################################
  # virtual machine setting #
  #############################################
  # setting port 2200 forward
  virtual_server 192.168.98.77 2200 { #虚拟服务器地址(VIP)、端口,中间用空格隔开
  delay_loop 6 #健康检查的间隔时间(秒)
  lb_algo wlc #lvs 调度算法,这里使用加权最少链接
  lb_kind DR #lvs 负载均衡机制,这里使用直连路由
  persistence_timeout 20 #同一IP连接20秒内被分配到同一台服务器(会话保持时间)
  protocol TCP #用 TCP 协议检查 realserver 状态
  real_server 192.168.98.74 2200 { #第一个real server节点的地址、端口
  weight 100 #权重
  TCP_CHECK { #健康检查方式
  connect_timeout 3 #故障重试秒数(即连接超时)
  nb_get_retry 3 #重试延迟(即重试次数)
  delay_before_retry 3 #重试间隔(秒)
  connect_port 2200 #检查的目标端口
  }
  }
  real_server 192.168.98.117 2200 {
  weight 100
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 2200
  }
  }
  }
  备用服务器配置文件:
  /usr/local/keepalive/etc/keepalived/keepalived.conf
  #global define
  global_defs {
  router_id LVS_TEST_2
  }
  ################################################################
  # vvrp_instance define #
  ################################################################
  vrrp_instance DR_CACHE {
  state BACKUP
  interface eth0
  lvs_sync_daemon_inteface eth0
  virtual_router_id 51
  priority 150
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 123
  }
  virtual_ipaddress {
  192.168.98.77
  }
  }
  ##############################################################
  # virtual machine setting #
  ##############################################################
  # setting port 2200 forward
  virtual_server 192.168.98.77 2200 {
  delay_loop 6
  lb_algo wlc
  lb_kind DR
  persistence_timeout 20
  protocol TCP
  real_server 192.168.98.74 2200 {
  weight 100
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 2200
  }
  }
  real_server 192.168.98.117 2200 {
  weight 100
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 2200
  }
  }
  }
  主负载均衡器(MASTER) 与备份负载均衡器(BACKUP)配置文件的差异一共只有 3 处: 全局定义的 route_id、vrrp_instance的state 以及vrrp_instance 的优先级 priority。
5.3.3 将keepalived配置成系统服务
  [iyunv@localhost ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  [iyunv@localhost ~]# cp /usr/local/keepalived /etc/sysconfig/keepalived /etc/sysconfig/
  [iyunv@localhost ~]# mkdir /etc/keepalived/
  [iyunv@localhost ~]# cp /usr/local/keepalived /etc/keepalived/keepalived.conf /etc/keepalived/
  [iyunv@localhost ~]# cp /usr/local/keepalived /sbin/keepalived /usr/sbin/
  [iyunv@localhost ~]# service keepalived start | stop
  启动或者停止keepalived服务。
  通过以下命令将keepalived配置成随系统启动的服务(两个运行级别)
  [iyunv@localhost ~]# ln -s /etc/init.d/keepalived /etc/rc.d/rc3.d/S98keepalived
  [iyunv@localhost ~]# ln -s /etc/init.d/keepalived /etc/rc.d/rc5.d/S98keepalived
5.3.4 配置验证
  启动服务后,使用以下命令,在主备服务器上查看ip地址情况
  [iyunv@ localhost ~]# ip addr
  可以看到主服务器的eth0网卡多了个ip,就是我们刚才配置的虚拟ip,而备用服务器上的还没有,因为他是备用的嘛。
  主
  备
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  link/ether 00:50:56:91:43:e4 brd ff:ff:ff:ff:ff:ff
  inet 192.168.98.75/24 brd 192.168.98.255 scope global eth0
  inet 192.168.98.77/32 scope global eth0
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  link/ether 00:50:56:91:14:81 brd ff:ff:ff:ff:ff:ff
  inet 192.168.98.118/24 brd 192.168.98.255 scope global eth0
  inet6 fe80::250:56ff:fe91:1481/64 scope link
  在主服务器上执行命令
  [iyunv@ localhost ~]# service keepalived stop
  再次查看ip地址情况。就可以看到主服务器上的虚拟ip没了,而备用服务器上多个了虚拟ip。
  然后访问192.168.98.77的2200端口(可以telnet),
  然后使用以下命令查看
  [iyunv@ localhost ~]# ipvsadm
  查看tcp连接情况。
  [iyunv@localhosst etc]# ipvsadm
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.98.77:2200 wlc persistent 20
  -> 192.168.98.117: 2200 Route 100 0 6
  -> 192.168.98.74: 2200 Route 100 0 0
  [iyunv@ localhost ~]# ipvsadm –lcn
  查看测试机的请求被转发到哪个服务器。
  [iyunv@localhost etc]# ipvsadm -lcn
  IPVS connection entries
  pro expire state source virtual destination
  TCP 14:16 ESTABLISHED 192.168.10.176:53564 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:16 ESTABLISHED 192.168.10.176:53563 192.168.98.77:2200 192.168.98.117:2200
  TCP 00:36 NONE 192.168.10.176:0 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:16 ESTABLISHED 192.168.10.176:53562 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:16 ESTABLISHED 192.168.10.176:53559 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:16 ESTABLISHED 192.168.10.176:53561 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:16 ESTABLISHED 192.168.10.176:53560 192.168.98.77:2200 192.168.98.117:2200
  [iyunv@ localhost ~]# ipvsadm –lcn|grep 192.168.98.117
  查看某真实服务器被转方法情况
  [iyunv@netscan etc]# ipvsadm -lcn |grep 192.168.98.117
  TCP 14:56 ESTABLISHED 192.168.10.176:53564 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:56 ESTABLISHED 192.168.10.176:53563 192.168.98.77:2200 192.168.98.117:2200 TCP 00:16 NONE 192.168.10.176:0 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:56 ESTABLISHED 192.168.10.176:53562 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:56 ESTABLISHED 192.168.10.176:53559 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:56 ESTABLISHED 192.168.10.176:53561 192.168.98.77:2200 192.168.98.117:2200
  TCP 14:56 ESTABLISHED 192.168.10.176:53560 192.168.98.77:2200 192.168.98.117:2200
6 附录:配置说明
6.1 主机规划说明
  本例规划中使用了4台主机,其实Director Server和Real Server可以是同一台主机。做法中需要注意的是,Director Server:主作为其中之一的Real Server时不必要做Real Server配置,即不需要执行lvsRS*.sh。
6.2 Real server 配置说明
  1、 vip(virtual ip)。直接路由模式的 vip 必须跟服务器对外提供服务的 ip 地址在同一个网段,并且 lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个 vip.
  2、 vip 被绑定在环回接口 lo0:0 上,其广播地址是其本身,子网掩码是 255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免 ip 地址冲突。
  3、 echo “1”,echo “2” 这段的作用是抑制 arp 广播。如果不做 arp 抑制,将会有众多的机器向其他发arp包宣称自己是真的,这样就乱套了。
6.3 Keepalived.conf 配置说明
  说明:一个功能比较完整的 keepalived 的配置文件,其配置文件 keepalived.conf 可以包含三个文本块:全局定义块、 VRRP 实例定义块及虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不须 VRRP 实例定义块。主服务器和备用服务器上安装ipvsadm和keepalived的方法都一样,主要的差别在于配置文件keepalived.conf上。
  ● 全局定义块
  global_defs {
  notification_email {
  test@sina.com    #故障接受联系人
  }
  notification_email_from admin@test.com  #故障发送人
  smtp_server 127.0.0.1  #本机发送邮件
  smtp_connect_timeout 30
  router_id LVS_MASTER  #BACKUP上修改为LVS_BACKUP
  }
  可以添加通过邮件通知故障,本例中没有配置
  1、 email 通知。作用:有故障,发邮件报警。这是可选项目,建议不用,用 nagios 全面监控代替之。
  2、 花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived 运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。
  ● VRRP 定义块
  1、 同步 vrrp 组 vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有 2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?
  2、 实例组 group.至少包含一个 vrrp 实例。
  3、 vrrp 实例 vrrp_instance.实例名出自实例组 group 所包含的那些名字。
  (1) 实例状态 state.只有 MASTER 和 BACKUP 两种状态,并且需要大写这些单词。其中MASTER 为工作状态,BACKUP 为备用状态。当 MASTER 所在的服务器失效时,BACKUP 所在的系统会自动把它的状态有 BACKUP 变换成 MASTER;当失效的MASTER 所在的系统恢复时,BACKUP 从 MASTER 恢复到 BACKUP 状态。
  (2) 通信接口 interface。对外提供服务的网络接口,如 eth0,eth1.当前主流的服务器都有2 个或 2 个以上的接口,在选择服务接口时,一定要核实清楚。
  (3) lvs_sync_daemon_inteface。负载均衡器之间的监控接口。在 DR 模式中,lvs_sync_daemon_inteface 与服务接口 interface 使用同一个网络接口。
  (4) 虚拟路由标识 virtual_router_id.这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识。即同一个 vrrp_stance,MASTER 和 BACKUP 的 virtual_router_id 是一致的,同时在整个 vrrp 内是唯一的。
  (5) 优先级 priority.这是一个数字,数值愈大,优先级越高。在同一个 vrrp_instance里,MASTER 的优先级高于 BACKUP。若 MASTER 的 priority 值为 150,那么 BACKUP的 priority 只能是 140 或更小的数值。
  (6) 同步通知间隔 advert_int.MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
  (7) 验证 authentication。包含验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用的类型为 PASS,据说 AH 使用时有问题。验证密码为明文,同一 vrrp 实例MASTER 与 BACKUP 使用相同的密码才能正常通信。
  4、 虚拟 ip 地址 virtual_ipaddress . 可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个 ip 必须与我们在 lvs 客户端(real server)设定的 vip 相一致!
  ● 虚拟服务器 virtual_server 定义块
  虚拟服务器定义是 keepalived 框架最重要的项目了,是 keepalived.conf 必不可少的部分。
  1、 虚拟服务器 virtual_server. 这个 ip 来自于 vrrp 定义块的第“4”步,后面一个空格,然后加上端口号。定义一个 vip,可以实现多个 tcp 端口的负载均衡功能。
  (1) delay_loop。健康检查时间间隔,单位是秒。
  (2) lb_algo. 负载均衡调度算法,互联网应用常使用 wlc 或 rr。
  (3) lb_kind. 负载均衡转发规则。一般包括 DR,NAT,TUN3 种,此处使用DR 的方式。
  (4) persistence_timeout.会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个 lvs 环境,使用 DR 转发模式,真实服务器有 3 个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会把第 2 次的请求转发到其他的服务器。
  (5) 转发协议 protocol.一般有 tcp 和 udp 两种。
  2、 真实服务器 real_server.也即服务器池。 Real_server 的值包括 ip 地址和端口号。
  (1) 权重 weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。
  (2) Tcp 检查 tcp_check。
  参考资料:
  http://www.keepalived.org/pdf/sery-lvs-cluster.pdf
  http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html
  http://blog.iyunv.com/tag-lvs%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.html
  http://www.keepalived.org/documentation.html

运维网声明 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-109225-1-1.html 上篇帖子: CentOS5.2上配置Keepalived+LVS集群(DR模式) 下篇帖子: nginx+keepalived+tomcat之tomcat性能调优
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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