LVS+Keepalived配置样例

一. 环境

DR模式

VIP: 172.18.1.100

LVS-M: 172.18.1.10
LVS-S: 172.18.1.11
RS1(web):172.18.1.101
RS2(web):172.18.1.102

GATEWAY: 172.18.1.1

二. LVS-Server

1. 安装

安装依赖库
# yum -y install gcc openssl-devel popt-devel popt-static libnl libnl-devel libnfnetlink-devel net-tools

ipvsadm--yum安装
# yum -y install ipvsadm 

ipvsadm--编译安装
# tar -zxvf ipvsadm-1.26.tar.gz
# make && make install


keeplived--yum安装
# yum -y install keepalived

keeplived--编译安装
# tar -zxvf keepalived-1.2.19.tar.gz 
# ./configure --prefix=/usr/local/keeplived
# make && make install
做软连接
# mkdir /etc/keepalived/
# ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

2. 配置

keeplived配置样例
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
test@gmail.com
}

notificationemailfrom root@localhost
smtp_server 127.0.0.1
smtpconnecttimeout 30
routerid lvs1 #设备标识
}

vrrpinstance LVSHA {
state MASTER #LVS slave is BACKUP
interface eth0 #根据要配置的网卡确定,不能错
virtualrouterid 60 #设置虚拟路由ID,主从要保持一致
priority 100 #优先级数值大的被推举为主设备
advert_int 1 #检查间隔,默认为1秒
authentication {
​ auth_type PASS
​ auth_pass 1111
}

virtual_ipaddress {
​ 172.18.1.100/24
}

}

virtual_server 172.18.1.100 80 {
delay_loop 6
lb_algo wrr #加权轮询-负载均衡算法
lb_kind DR #调度算法为DR直接路由模式
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持50秒
protocol TCP #数据转发协议为TCP

real_server 172.18.1.101 80 {
weight 1 #设置服务器权重
TCP_CHECK { #对后端真实服务器进行TCP健康检查
connect_timeout 20 #连接超时20秒
connect_port 80 #通过TCP端口80去检查真实服务器健康状态
nbgetretry 3 #连接重试次数为3次
}

}

real_server 172.18.1.102 80 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
nbgetretry 3
}
}
}

LVS-S配置同理,注意以下:
1. routerid保持唯一
2. priority 50 #优先级数值大的被推举为主设备

网卡配置举例
# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.18.1.10
NETMASK=255.255.0.0
GATEWAY=172.18.1.1
TYPE="Ethernet"

# service network restart
防火墙配置
开启防火墙端口
# iptables -A INPUT  -p 112 -j ACCEPT
# iptables -A INPUT -p vrrp -jACCEPT  //这里不开启vrrp协议的端口,会造成backup服务器检测不到master服务器的是否正常而自动启动backup的应用服务
启动keeplived
# service keepalived start

查看虚拟IP
# ip addr show
查看LVS规则:
# ipvsadm -Ln

3. RS-server

网卡配置举例
# vim /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE="em1"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.18.1.101
NETMASK=255.255.0.0
GATEWAY=172.18.1.1
TYPE="Ethernet"

# vim /etc/sysconfig/network-scripts/ifcfg-em1:0
DEVICE=em1:0
BOOTPROTO=static
IPADDR=172.18.1.100
NETMASK=255.255.255.255 #注意这里是4个255
GATEWAY=10.215.7.254
ONBOOT=yes
sysctl配置

因网络中多个设备设置了VIP地址,为防止IP地址冲突,需要通过sysctl.conf文件修改系统内核ARP相关参数
# vim /etc/sysctl.conf
追加
### Arp config for lvs-VIP
net.ipv4.conf.em1.arp_ignore = 1
net.ipv4.conf.em1.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

# sysctl -p
# service network restart

 常用命令:

keepalived常用命令
keepalived启动/关闭
# service keepalived start/stop
加入开机启动
# chkconfig keepalived on

查看虚拟IP和LVS配置规则:
# ip addr show
或者
# ip a


ipvsadm常用命令
查看LVS统计信息(在LVS master上运行)
# ipvsadm -lnc
加载ipvs模块:
# modrpobe ipvs
查看ipvsadm模块加载情况:
# lsmod | gre ip_vs
查看IPVS版本:
# cat /proc/net/ip_vs

在eth0网卡绑定VIP地址(高可用), lb服务的IP地址可扩展性较差,故使用VIP地址(删除del;显示show) 
# ip addr add 172.16.7.13/24 dev eth0 

清除当前所有LVS规则
# ipvsadm -C 

设置tcp、tcpfin、udp链接超时时间(s), 控制浏览器与lb01的超时时间
# ipvsadm --set 30 5 60 

添加虚拟服务,调度算法见man ipvsadm, LVS默认无80端口,需另外添加新的虚拟IP记录->控制lb01与web01、web02的超时时间
# ipvsadm -A -t 172.16.7.13:80 -s wrr -p 20  

将虚拟服务vip地址关联到真实服务上
# ipvsadm -a -t 172.16.7.13:80 -r 172.16.7.17:80 -g -w 1 
# ipvsadm -a -t 172.16.7.13:80 -r 172.16.7.18:80 -g -w 1


设置当客户端访问服务器VIP的任意端口都可以被调度到后台Real Server
# ipvsadm -A -t 172.18.1.100:0 -s wrr

# ipvsadm -ln  
   IP Virtual Server version 1.2.1 (size=4096) #LVS版本号
   Prot LocalAddress:Port Scheduler Flags #协议(TCP)本地IP:端口 调度算法 标志(持续时间20s)
   -> RemoteAddress:Port Forward Weight ActiveConn InActConn
   #后端节点IP:端口 工作模式 权重 已建立连接 正在连接
  TCP 172.16.7.3:80 wrr persistent 20
 -> 172.16.7.17:80 Route 1 0 0
  -> 172.16.7.18:80 Route 1 0 0

 

keeplived应用场景举例:

安装

# tar -zxvf keepalived-1.2.7.tar.gz
# ./configure --prefix=/usr/local/keepalived
# make && make install
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

或者
# yum install keepalived

开启防火墙端口
# iptables -A INPUT  -p 112 -j ACCEPT
# iptables -A INPUT -p vrrp -jACCEPT  //这里不开启vrrp协议的端口,会造成backup服务器检测不到master服务器的是否正常而自动启动backup的应用服务

 

配置说明

1). Master
global_defs {
   notification_email {
         edisonchou@hotmail.com
   }
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.80.1
   smtp_connection_timeout 30
   router_id 51            # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
    state MASTER           #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
    interface em1          #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
    virtual_router_id 51   #虚拟路由编号,主备要一致
    priority 100           #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1           #检查间隔,默认为1s
    authentication {       #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200/24 dev em1:1  #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
    }
}

# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
    delay_loop 6                 # 设置健康检查时间,单位是秒
    lb_algo rr                   # 设置负载调度的算法为wlc
    lb_kind DR                   # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.1.130 80 {  # 指定real server1的IP地址
        weight 3                 # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.1.131 80 {        # 指定real server2的IP地址
        weight 3                          # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

2). Backup
global_defs {
   notification_email {
         edisonchou@hotmail.com
   }
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.80.1
   smtp_connection_timeout 30
   router_id LVS_DEVEL          # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
    state BACKUP                 #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
    interface em1                #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
    virtual_router_id 51         #虚拟路由编号,主备要一致
    priority 50                  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1                 #检查间隔,默认为1s
    authentication {             #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200/24 dev em1:1  #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
    }
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
    delay_loop 6                         # 设置健康检查时间,单位是秒
    lb_algo rr                           # 设置负载调度的算法为wlc
    lb_kind DR                           # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.1.130 80 {       # 指定real server1的IP地址
        weight 3                         # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.1.131 80 {        # 指定real server2的IP地址
        weight 3                          # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

应用场景一: 使用keepalived监控端口进行切换

global_defs {
   router_id 51
}

vrrp_script check_http {
    script "</dev/tcp/127.0.0.1/80"      #修改最后的redis端口6379为自己需要监听的端口,理论上可以监听远程端口
    interval 2                             #检查脚本的频率,单位(秒)
    weight -10                             #端口检查失败,优先级减少30,默认减少2[注意:两台主机配置的weight相同时候必须保证weight的值大于priority差值]
}

vrrp_instance VI_1 {
    state MASTER#BACKUP
    interface eth0
    virtual_router_id 51
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
       192.168.1.100/24 dev em1:1
    }
    track_script {
	check_http
    }
}

应用场景二: 通过notify_down方式触发关闭keepalived的脚本实现切换(只监控本机服务节点)

global_defs {
   notification_email {
         edisonchou@hotmail.com
   }
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.80.1
   smtp_connection_timeout 30
   router_id WEB-MASTER            # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
    state MASTER           #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
    interface em1          #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
    virtual_router_id 51   #虚拟路由编号,主备要一致
    priority 100           #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1           #检查间隔,默认为1s
    authentication {       #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200/24 dev em1:1  #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
    }
}

# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
    delay_loop 6                 # 设置健康检查时间,单位是秒
    lb_algo rr                   # 设置负载调度的算法为wlc
    lb_kind DR                   # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.1.130 80 {  # 指定real server1的IP地址
        weight 3                 # 配置节点权值,数字越大权重越高
        notify_down /data/sh/stopkeepalived.sh
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
  }
}

另一种监控方法:

写一个脚本监控服务,如果服务不存在,停止服务所在节点的keepalived,例如

vim nginx_check.sh
​
--------------------------------------
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
  /etc/init.d/keepalived stop
fi
sleep 2
done
​
#给脚本授权
chmod u+x nginx_check.sh
​
#执行脚本
nohup /usr/local/develop/anginx/shell/nginx_check.sh &

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值