使用keepalived搭建高可用LVS集群

来源:互联网 发布:网络存储工程师 编辑:程序博客网 时间:2024/04/30 11:15

Linux Cluster
使用keepalived搭建高可用LVS
一般比较常用于搭建高可用集群的有:heartbeat、keepalived、piranha。
常见的高可用集群有:高可用LVS集群、高可用web集群(keepalived+nginx)、高可用mysql集群。
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。只需要简单配置keepalived的配置文件即可实现自动生成ipvsadm规则,还可以监控后端realserver主机的健康状态,出现故障时自动剔除集群,恢复后自动添加,以及MASTER与BACKUP之间的故障切换。
本次实验使用keepalived+Apache,搭建高可用LVS集群。
DIP=director IP
RIP=realserverIP
VIP=virtual server IP
realserver=rs
ha=director

1.实验概况

1.1实验拓扑图

这里写图片描述

1.2简介

本次实验使用virtualbox创建一台最小化安装的centos5.5配置yum源,完成后再复制出三台刚才已安装好的centos5.5,共四台虚拟机,只需要启用一张网卡,选择桥接模式。采用LVS的DR直接路由工作模式,wlc调度算法,后端服务器健康状态监测方式为HTTP,此外后端服务器健康状态监测方式还有SSL、HTTPS、TCP_CHECK等。hostname               ip                           角色                  作用ha1       VIP:eth0:0 192.168.8.30        LVS负载均衡器MASTER     接收用户请求,                                                                 转发给后端realserver处理          DIR:eth0   192.168.8.31                                用于与后端realserver进行通信ha2       VIP:eth0:0 192.168.8.30        LVS负载均衡器BACKUP     备用的LVS调度器          DIR:eth0   192.168.8.32                                用于与后端realserver、                                                                 LVS负载均衡器MASTER进行通信rs1     RIP:192.168.8.33                 WEB服务器               与director通信,提供web服务        VIP:lo:0 192.168.8.30                                   用于处理director分配的请求后                                                                       以此地址返回给用户rs2     RIP:192.168.8.34                 WEB服务器               与director通信,提供web服务        VIP:lo:0 192.168.8.30                                   用于处理director分配的请求后                                                                 以此地址返回处理结果给用户

1.3实验步骤

1.3.1MASTER配置

1).单网卡、桥接模式启动ha1,并配置ip地址为192.168.8.312).关闭防火墙与selinux    service iptable stop    service ip6table stop    vim /etc/selinux/conf    修改为SELINUX=disabled3).安装keepalived前的准备    由于一开始centos5.5是最小化安装,所以需要提前安装编译工具以及其他安装keepalived的组件    安装openssl    yum install -y openssl openssl-devel   #安装openssl以及openssl开发包未安装内核开发也可以使keepalived安装成功,但无法自动生成ipvsadm规则    yum install -y kernel-devel    安装编译工具gcc-c++    yum install -y gcc-c++    安装ipvs管理工具ipvsadm    yum install -y ipvsadm4).安装keepalived    wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz    tar xvf keepalived-1.2.7.tar.gz    cd keepalived-1.2.7    ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-417.el5-i686    #注意/usr/src/kernels/2.6.18-417.el5-i686,为题主自己的内核版本,    读者自己操作是使用tab补全,万一照抄或许会失败。

配置检测结束后会出现如下结果,为三个yes,其中IPVS use libnl: No,对后续的安装配置运行无影响。

Keepalived configuration

Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : No
SNMP support : No
Use Debug flags : No

make
make install
ln -s /usr/local/sbin/keepalived /sbin

至此keepalived安装完成

5).配置keepalived    keepalived的配置文件在 /etc/keepalived/keepalived.conf    cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbk   #先备份一下    vim /etc/keepalived/keepalived.conf    以下为题主自己的配置文件,后端服务器健康状态使用HTTP
! Configuration File for keepalivedglobal_defs {   notification_email {    root@localhost      #用于接受邮件报警,当服务异常时发邮件到邮箱提醒  }   notification_email_from admin@localhost  #邮件发送地址   smtp_server 127.0.0.1         #邮件服务器本机   smtp_connect_timeout 30       #smtp sever 超时时间   router_id LVS_DEVEL           #服务标识,邮件主题}vrrp_instance VI_1 {    state MASTER        #指定本服务器为主服务器    interface eth0    virtual_router_id 51 #虚拟路由标识,MASTER与BACKUP需一致    priority 100         #定义优先级,需大于BACKUP的priority值    advert_int 1    authentication {     #设置验证类型与验证密码        auth_type PASS            auth_pass abcd   #验证密码MASTER与BACKUP需一致    }    virtual_ipaddress {        192.168.8.30     #设置VIP,既配置在MASTER调度器上由于接受用户请求的地址    }}virtual_server 192.168.8.30 80 { #虚拟服务器定义部分既MASTER调度器    delay_loop 6    #运行情况监测时间6s一次    lb_algo wlc     #设置调度算法为wlc    lb_kind DR      #设置LVS的工作模式为DR模式    nat_mask 255.255.255.0 #虚拟服务器子网掩码    persistence_timeout 50 #session保持时间    protocol TCP    #指定转发的协议类型    real_server 192.168.8.33 80 { #后端真实服务器节点配置realserver1        weight 3   #该节点服务器权重        HTTP_GET { #后端服务器情况检查方式HTTP_GET,向后端服务器发送http请求,无回应即为该节点服务器异常,剔除ipvsadm规则            url {              path /              status_code 200            }            connect_timeout 3  #3秒无响应超时            nb_get_retry 3     #重试次数            delay_before_retry 3  #重试时间间隔        }    }    real_server 192.168.8.34 80 {        weight 1        HTTP_GET {            url {              path /              status_code 200            }            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}
6).将改配置文件复制到BACKUP主机scp /etc/keepalived/keepalived.conf 192.168.8.32:/etc/keepalived/7).启动keepalived服务service keepalived start 至此MASTER的配置完成

1.3.2BACKUP配置

0).单网卡、桥接模式启动ha2,并配置ip地址为192.168.8.32 1).与MASTER的配置相差不大 关闭iptables与selinux 安装openssl openssl-dev gcc-c++ kernel-devel ipvsadm keepalived。安装步骤参考MASTER的配置2).修改MASTER传过来的keepalived.confvim /etc/keepalived/keepalived.conf将 state MASTER  改为state MBACKUP   priority 100  改为priority 80即可3).启动keepalived服务service keepalived start 至此BACKUP的配置完成

1.3.3Realserver1配置

1).单网卡、桥接模式启动rs1,并配置ip地址为192.168.8.33,关闭iptables与selinux2).安装httpd服务 yum install httpd3).配置测试页,启动httpd服务echo "this is realserver1 test web" > /var/www/html/index.htmlservice httpd start4).配置arptable调整网卡的响应/通告级别    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore5).配置网络别名及添加路由    ifconfig lo:0 192.168.8.30 broadcast 192.168.8.30 netmask 255.255.255.255 up    route add -host 192.168.8.30 dev lo:0

1.3.4Realserver2配置

1).与realserver1的配置差别不大,同样的  单网卡、桥接模式启动rs2,并配置ip地址为192.168.8.34,关闭iptables与selinux安装httpd,创建测试页为与realserver1区别echo "this is realserver2 test web" > /var/www/html/index.html启动httpd服务配置arptable配置网络别名添加路由可使用curl http://192.168.8.33  检测realserver1的测试页是否正常至此所有的配置结束

1.4检测

1.4.1实验结果检测

1).在MASTER输入ipvsadm -l -n 检查是否自动创建的了集群服务及添加的集群主机   输入ip addr 检查192.168.8.30 这个提供用户请求的ip地址是否存在本机   存在及正常

1.4.1LVS故障切换检测

1).假设MASTER出现异常,在MASTER输入service keepalived stop 停止keepalived服务,使用ipvsadm -l -n 查看本机的ipvsadm是否清空使用ip addr    查看VIP 192.168.8.30是否还存在本机在BACKUP输入ipvsadm -l -n 查看BACKUP是否继承了MASTER的ipvsadm规则输入ip addr    查看VIP 192.168.8.30是否存在本机若有即为LVS故障切换成功。假设MASTER解除异常 service keepalived start 重新启用则ipvsadm规则与VIP都应该存在MASTER上

1.4.1后端服务器realserver健康状况检测

1).假设realserver1出现异常service httpd stop则在LVS上的使用ipvsadm -l -n查看ipvsadm规则,ipvsadm将rs1剔除,显示为集群节点服务器中无rs1 192.168.8.33假设realserver1解除异常service httpd start则ipvsadm的规则上重新出现rs1 192.168.8.33

2其他情况

2.1当两个realserver节点,都出现异常

解决:将WEB服务重定向在MASTER与BACKUP上,显示错误页面。1).yum install httpd2).echo "404,Not Found" > /var/www/html/index.html3).修改vim /etc/keepalived/keepalived.conf,添加sorry_server 127.0.0.1 80,修改后内容如下

virtual_server 192.168.8.30 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.8.33 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

4).重启keepalived服务service keepalived restart5).手动将两台realserver的httpd服务stop,再访问http://192.168.8.30进行测试

这里写图片描述
测试
这里写图片描述

0 0