您的位置:首页 > 运维架构 > 网站架构

搭建高可用集群 --- LVS DR模式、keepalived+LVS

2018-01-30 20:46 776 查看
本文索引:

LVS DR模式搭建

keepalived+LVS

LVS DR模式搭建

实例准备

分发器(调度器dir)
内网:192.168.65.130 外网:192.168.19.128

rs1
内网:192.168.65.133 网关:192.168.65.2

rs2
内网:192.168.65.134 网关:192.168.65.2

vip(绑定到所有设备上) 192.168.65.200

分发器上编辑并执行脚本

[root@director ~]# vi /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.65.200
rs1=192.168.65.133
rs2=192.168.65.134
#注意这里的网卡名字,有些系统可以为eth0
# ifdown/ifup清空之前命令行下的配置ip命令,在脚本多次运行时就可以清空之前的配置
ifdown ens33 > /dev/null
ifup ens33 > /dev/null
# 配置虚拟网卡ens33:2
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
# 设置网关
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

[root@director ~]# sh /usr/local/sbin/lvs_dr.sh

rs1和rs2上配置并执行脚本

[root@rs1 ~]# vi /usr/local/sbin/lvs_dr_rs.sh
[root@rs2 ~]# vi /usr/local/sbin/lvs_dr_rs.sh

代码相同,如下:
#/bin/bash
vip=192.168.65.200
ifdown lo > /dev/null
ifup lo > /dev/null
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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

[root@rs1 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
[root@rs2 ~]# sh /usr/local/sbin/lvs_dr_rs.sh

验证效果



分发器数据包数据信息

[root@director ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.200:80 wrr
-> 192.168.65.133:80            Route   1      2          0
-> 192.168.65.134:80            Route   1      0          2

ipvsadm常用命令

管理集群访问
例:ipvsadm -A -t 192.168.65.200:80 -s rr

添加:-A -t|u|f service-address [-s 调度算法]

-t tcp协议的集群服务

-u udp协议的集群服务

-f 防火墙标记

修改:-E

删除:-D

管理集群服务中的RS
例如:ipvsadm -a -t 192.168.65.200:80 -r 192.168.65.133 -m

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-t|u|f service-address 事先定义好的某集群服务

-r server-address 某RS的地址,NAT方法中可以使用ip:port方式

-g|i|m LVS类型

-g DR

-i TUN

-m NAT

-w weight 定义权重

查看信息 -L | -l option

option包含

-n 数字形式显示主机地址和端口号

--stats 统计信息

--rate 速率

--timeout 显示超时时间

--daemon

--sort 排序(默认升序)

-c 显示当前ipvs连接状况

删除 -C 清空ipvs规则

保存规则 -S

ipvsadm -S > /tmp/ipvs

载入规则 -R

ipvsadm -R < /tmp/ipvs

keepalived+LVS

keepalived内置了ipvsadm的功能,因此不需要额外安装ipvsadm,也不需要编写与执行相关脚本。

配置相关信息

dir:192.168.65.130

vip:192.168.65.200

rs1:192.168.65.133

rs2:192.168.65.134

编辑分发器的配置文件

[root@director ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state MASTER
#绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass test
}
# 指定vip地址
virtual_ipaddress {
192.168.65.200
}
}
virtual_server 192.168.65.200 80 {
#(每隔10秒查询realserver状态)
delay_loop 10
#(lvs 算法)
lb_algo wlc
#(DR模式)
lb_kind DR
#(同一IP的连接60秒内被分配到同一台realserver)
persistence_timeout 60
#(用TCP协议检查realserver状态)
protocol TCP
real_server 192.168.65.133 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.65.134 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

测试效果

启动分发器director上的keepalived,可以看到有2个RS启动

[root@director ~]# systemctl start keepalived
[root@director ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.200:80 wlc persistent 60
-> 192.168.65.133:80            Route   100    0          0
-> 192.168.65.134:80            Route   100    0          0

关闭rs2上的nginx服务

[root@rs2 ~]# systemctl stop nginx

再次查看分发器上的状态,已检测到rs2宕机

[root@test3 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.200:80 wlc persistent 60
-> 192.168.65.133:80            Route   100    0          0


注意:两台服务器上的lvs_rs.sh脚本依然要执行,去绑定vip、设置内核参数;分发器上不需要执行绑定vip的操作,但是需要开启转发功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: