Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161339
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-11 10:24
文章分类

全部博文(51)

文章存档

2018年(3)

2017年(22)

2016年(9)

2015年(17)

我的朋友

分类: 系统运维

2017-11-09 17:09:27

一、部署LVS+keepalive服务生产环境不会使用单台lvs来做负载均衡,一般都会做高可用,我们目前使用keepalived来做lvs的高可用。

LVS服务器端

准备好2台机器,每台部署步骤如下:

1、安装软件

yum -y install ipvsadm

yum -y install keepalived

2、修改配置文件

vi /etc/keepalived/keepalived.conf 配置实例如下:

global_defs {             //这部分是设置邮件报警
  notification_email {  
  yingmingzhu@sohu-inc.com
  }
  notification_email_from lvs_72_131@pv.sohu.com
  smtp_server 192.168.95.47
  smtp_connect_timeout 30
  router_id LVS_ZW
}

vrrp_sync_group VG1 { //定义vrrp同步的组和状态改变时执行的脚本
  group {
    PV_LVS_CTC
  }
  notify /opt/scripts/keepalived/send_msg.sh
  smtp_alert
}

vrrp_instance PV_LVS_CTC { //定义vrrp实例
  state BACKUP //设置初始化状态(Master和Backup)
  interface eth0 //指定心跳的通信接口
  track_interface { //设置要检测的网卡
    eth1
  }

  virtual_router_id 51 //虚拟路由的id(主从必须一致)
  priority 50 //优先级(优先级高的晋升为master)Master和Backup仅此不同
  advert_int 1 //心跳周期

  authentication { //设置心跳认证,采用密码认证
     auth_type PASS
    auth_pass 1234
  }

  virtual_ipaddress {
    220.181.26.83/24 dev eth1 scope global //定义VIP资源(可以有多个)
  }
}

virtual_server 220.181.26.83 80 { //设置监听的VIP和端口 (以下定义转发规则)
  delay_loop 6 //健康检查周期
  lb_algo rr //负载均衡算法
  lb_kind DR //转发方式
  nat_mask 255.255.255.0 //网段的子网掩码
  # persistence_timeout 1 //会话保持时间
  protocol TCP //指定转发协议(TCP、UDP)

  real_server 10.10.72.96 80 { //第一台realserver的IP和端口
    weight 1 //权重(加权轮循时有效)
    TCP_CHECK { //健康检测方式(http、TCP、misc)
       connect_port 80
      connect_timeout 3
      nb_get_retry 2
      delay_before_retry 3
    }
  }

  real_server 10.10.72.97 80 { //第二台realserver的IP和端口
    weight 1
    TCP_CHECK {
      connect_port 80
      connect_timeout 3
      nb_get_retry 2
      delay_before_retry 3
    }
  }

  real_server 10.10.72.98 80 { //第三台realserver的IP和端口
     weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 2
    delay_before_retry 3
    }
  }

}

3、准备好短信报警的脚本

keepalived支持自定义的报警脚本,我们可以自己写一个简单的脚本调用我们公司的短信网关来实现短信报警。

脚本示例如下:

vi /opt/scripts/keepalived/send_msg.sh

#!/bin/bash
#contacts 
mobile="13810606675 15501007365 13691284375 13810657002"
for m in $mobile
do
    msg="LVS[192.168.131.47] State changed to $3"
    wget "" -O /dev/null
done
    echo "`date` $msg" >> /opt/logs/keepalived/keepalived.log

其中$3是keepalived在调用时向脚本传入的一个参数,就是keepalived的状态:master backup

chmod +x /opt/scripts/keepalived/send_msg.sh

4、启动keepalived服务

/etc/init.d/keepalived start

5、查看日志

tail /var/log/messages

可以看到keepalived的启动过程和进入的状态,是否报错等。

RealServer端(DR方式)

需要执行如下脚本即可 cat lvs_DR.sh

#!/bin/bash
#description : start realserver

VIP=vip    //这里修改成实际的VIP即可
/etc/rc.d/init.d/functions

case "$1" in
  start)
echo "***config VIP of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
  stop)
/sbin/ifconfig lo:0 down
echo "***delete VIP of REALServer"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
    *)
echo "Usage: $0 {start|stop}"
exit 1
esac

二、如何查看lvs当前的工作状态

常用的查看命令:

watch -n 0.5 ipvsadm -L -n –stats 查看当前lvs的转发状态,每个realserver分配的请求数等

watch -n 0.5 ipvsadm -L -n –rate 查看当前的转发速率(每秒处理多少个请求)

watch -n 0.5 ipvsadm -L -n –c 查看当前的TCP连接状况(客户端和realserver的tcp连接过程)

三、如何从lvs里面摘除掉一台realserver

其实直接停掉某台realserver,lvs会自动从转发列表里面摘除掉那个IP,这样lvs就不会把请求分给它了。但是有的时候后台realserver服务器可能需要维护,如升级软件,升级完之后不一定好用,可能需要测试。这个时候我们可以先将这台机器从lvs里面摘除掉,等我们调试好那台realserver之后,再把它加入lvs里面。

步骤如下: 1、修改lvs的backup服务器,将配置文件里面关于那台服务器的配置注释掉,实例如下: 如我们想把上面实例里面的10.10.72.98这台机器摘掉,可以把这部分注释掉即可:

#  real_server 10.10.72.98 80 { //第三台realserver的IP和端口
#     weight 1
#    TCP_CHECK {
#    connect_port 80
#    connect_timeout 3
#    nb_get_retry 2
#    delay_before_retry 3
#    }
#  }

2、停止lvs的master服务器上的keepalived

/etc/init.d/keepalived stop

停止master的keepalived之后,lvs会自动切换到backup上去。

3、测试好那台realserver之后,再把master的keepalived启动起来。

这时lvs服务会自动漂移回到master服务器上。

4、把backup的配置文件的注释去掉,还原到原来的样子,并重启keepalived即可

阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~