最近在研究服务器高可用集群 (HA)……

Keepalived 是用C写的软路由。提供负载均衡与高可用特性。

负载均衡利用IPVS技术

高可用通过VRRP协议实现

更难能的贵的是,一直到最近还在更新

最近版本 Release 1.3.5 发布于 2017-03-19

安装过程官方推荐从源码编译,当然,负载均衡部分基于LVS,所以LVS部分直接YUM安装。

目标:


实现一个如下图所示的高可用服务器集群。

集群由两台调度器(DirectorServer,DS),三台真实服务器(RealServer,RS)构成。调度器一主一备,三台真实服务器进行负载均衡提供服务。

配置完成后只要能保证至少一台DS和一台RS工作正常,即可对外提供服务。并且管理员可以在邮箱收到相关服务器启停的邮件汇报。

准备:


服务器使用Oracle VM VirtualBox虚拟实现,虚拟机网络使用桥接,所有虚拟机(五台服务器)均在统一内网中,负载均衡工作在LVS的DR模式下。

虚拟机信息:

DS1 - master(CentOS-6.8-x86_64-minimal) : 192.168.0.201

DS2 - backup(CentOS-6.8-x86_64-minimal): 192.168.0.202

RS1 (CentOS-6.8-x86_64-minimal): 192.168.0.203

RS2 (CentOS-6.8-x86_64-minimal): 192.168.0.204

RS3 (CentOS-6.8-x86_64-minimal): 192.168.0.205

VIP: 192.168.0.200

keepalived编译与安装(两台DS上进行)


1)安装依赖库,配置防火墙开放端口。

yum install gcc openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel net-snmp-devel -y

iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
service iptables save

2)获取最近版本源代码。

wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz

tar -zxvf keepalived-1.3.5.tar.gz

3)进入目录,编译。

cd keepalived-1.3.5

./configure
 make && make install

4)配置系统服务和开机启动:

cp ./keepalived/etc/init.d/keepalived /etc/init.d/
cp ./keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/

chkconfig keepalived on

service keepalived status  #验证系统服务安装成功

5)一些清理工作:

cd ..
rm -rf keepalived-1.3.5

keepalived配置


1)配置RS,提供WEB服务

三台RS使用Nginx对外提供服务,三个RS提供服务器的端口必须一致,例如80.

为了验证负载均衡效果,可以让三台服务器返回的页面略有区别,比如返回的页面中带上自己的hostname

计划配置LVS负载均衡工作在DR模式下。所以需要对RS进行ARP抑制配置。

配置脚本 realserver.sh 如下:

#!/bin/bash
VIP=192.168.0.200
source /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

执行时使用  /path/to/realserver.sh start

三台RS均需要执行。

2)配置DS,实现HA与负载调度。

Keepalived的负载均衡功能直接利用了LVS,所以使用Keepalived自带的virtual_server配置方式配置负载均衡前,需要为两台DS均安装LVS:

yum install ipvsadm -y

LVS的DR模式没有端口转发功能。调度器对包暴漏的端口和服务器对外提供的服务使用的端口必须是一致的(本案为80端口)。

两台DS均需要开放80端口,以对外提供服务:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save

DS-Master创建keepalived配置文件

mkdir /etc/keepalived
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
guang384@qq.com
}
notification_email_from guang384@163.com
smtp_server 127.0.0.1 #使用本地STMP服务,配置方式参考另一篇文章
smtp_connect_timeout 30
#服务器全局属性,在收到提醒邮件的时候会用来作为当前服务器的标识,所以每台服务器都要唯一
router_id LVS_DR_DS1  
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色, MASTER 为主机服务器, BACKUP 为备用服务器
interface eth0
virtual_router_id 51
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR。
advert_int 1 #心跳间隔,MASTER每隔1秒发送报文告知组内其他机器自己还活着。(主备状态依靠心跳维持)
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.200 #设置主DR的虚拟IP地址(virtual IP),可多设,但必须每行1个
}
smtp_alert #使用邮件通知
}
virtual_server 192.168.0.200 80 { #注意IP地址与端口号之间用空格隔开
delay_loop 1 #设置健康检查时间,单位是秒  (是的,keepalived健康检查也是轮询模式)
lb_algo rr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法
lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选
#persistence_timeout 50 #保持客户端的请求在这个时间段内全部发到同一个真实服务器,单位为秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.0.203 80 {
weight 1 #配置节点权值,数字越大权值越高
TCP_CHECK {
connect_timeout 2 #表示2秒无响应,则超时
retry 2 #表示重试次数
delay_before_retry 1 #表示重试间隔
}
}
real_server 192.168.0.204 80 {
weight 1
TCP_CHECK {
connect_timeout 2
retry 2
delay_before_retry 1
}
}
real_server 192.168.0.205 80 {
weight 1
TCP_CHECK {
connect_timeout 2
retry 2
delay_before_retry 1
}
}
}

同样配置文件复制到 DS-BACKUP

修改3个地方(很多文章说只需要配置vrrp_instance中的 状态 和 优先级 两处即可,但是为了邮件提示的准确性,需要将 global_defs.route_id 配置不一样,当然,如果没有配置邮件提示而使用其他方式如nagios对服务器进行监控,这里配置什么其实无所谓)

keepalived.conf修改三个地方

1) router_id LVS_DR_DS2

2) state BACKUP

3 )  priority 50

keepalived 启动和停止:

service keepalived start|stop

keepalived执行日志默认位置:

tail -f  /var/log/messages

直接前台模式启动(for 调试) :

keepalived -l -D -n -d

测试


略……   _(:3」∠)_  -

从编译安装Keepalived 到 配置 负载均衡(LVS-DR)的更多相关文章

  1. linux安装nginx并配置负载均衡

    linux上安装nginx比较简单: 前提是需要有gcc或者g++ 1.yum需要的依赖  yum -y install openssl openssl-devel 2.解压pcre库.zlib库   ...

  2. 负载均衡LVS(DR模式)安装实战

    1.编译安装ipvsadm 首先从LVS官网下载tarball,解压后make && make install即可. 要注意的是LVS的依赖有:popt-static.libnl.ke ...

  3. 安装 Nginx 并配置负载均衡

    1,在节点 192.168.1.40 上执行安装 nginx,操作如下: 01 02 03 sudo apt-add-repository ppa:nginx/development sudo apt ...

  4. 负载均衡 Lvs DR 模式笔记

    先来一张原理图,相当于ip-tun模式把tunl0的那块网卡配置在eth0:0的这个接口上,避免了兼容性的问题

  5. Ubuntu下配置 keepalived+nginx+tomcat 负载均衡

    本文力图阐述在 Ubuntu Server 环境下使用 Keepalived + Nginx + Tomcat 搭建高可用负载均衡环境的操作步骤和简约配置,这里不涉及性能调优.先说一下他们各自扮演的角 ...

  6. 配置LVS + Keepalived高可用负载均衡集群之图文教程

    负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性.  重点:每个节点时间都同步哈! C++代码 [r ...

  7. LVS实现负载均衡原理及安装配置 负载均衡

    LVS实现负载均衡原理及安装配置 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F ...

  8. office web apps安装部署,配置https,负载均衡(六)配置负载均衡

    owa可以采用任何的负载均衡方案,我们这里采用阿里云提供的负载均衡解决方案 前提条件,你已经配置了一台域控制器,两台域服务器[即安装了owa相关软件,并将计算机隶属于域]: 如果您不清楚怎么做,那么请 ...

  9. LVS+Keepalived高可用负载均衡集群架构实验-01

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

随机推荐

  1. Ninject之旅目录

    第一章:理解依赖注入 Ninject之旅之一:理解DI 第二章:开始使用Ninject Ninject之旅之二:开始使用Ninject(附程序下载) Ninject之旅之三:Ninject对象生命周期 ...

  2. 百度云推送----iOS

    前言 记录一下这几天学习的百度推送,觉得这个东西弄的还挺糟心的,好多注意的地方 正文 1.先申请一个百度开发者账号 http://push.baidu.com/fc 2.创建一个新应用,并应用配置 3 ...

  3. 手动加支付宝遇到的错误--iOS

    前言 之前调通了支付宝demo,开始往自己工程拖东西吧,我为什么觉得我可能把所以的问题都遇到了呢+_+,赶紧把问题记录下来 不然下次弄还费劲,加一句,要不真的用ping++吧

  4. 安卓TCP通信版本2

    PC做服务器,安卓做客户端. 安卓获取输入框的内容并发送,然后等待接收服务器的消息 服务器先行开启,接收到客户端的数据,然后回复消息. 实现了对线程类的封装,通过按钮启动线程发送并接收 服务器代码(j ...

  5. C#丨爬虫基础

    在前几天看到一片公众号的文章是关于.NET玩爬虫. 所以今天小编索性来try一下,恰好小编最近在关注房价这一块的,索性就写了一个例子抓取房产信息的. 不善言辞的小编直接给出代码吧!相信读者也等不及了. ...

  6. linux下php开发环境搭建(nginx+php+mysql)

    安装前准备工作 先安装一些必要的类库 yum install -y wget  zlib-devel bzip2-devel  curl-devel openssl openssl-devel vim ...

  7. 【PHP系列】PHP推荐标准之PSR-3,日志记录器接口

    上节聊完了PHP官方的相关代码规范,下面给大家带来了PHP系列的PHP推荐标准的另外两个,PSR-3,PSR-4. 首先,我们先来了解下PSR-3是怎么回事. PHP-FIG发布的第三个推荐规范与前两 ...

  8. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...

  9. Flume-ng源码解析之Channel组件

    如果还没看过Flume-ng源码解析之启动流程,可以点击Flume-ng源码解析之启动流程 查看 1 接口介绍 组件的分析顺序是按照上一篇中启动顺序来分析的,首先是Channel,然后是Sink,最后 ...

  10. 2015年ACM-ICPC亚洲区域赛合肥站网络预选赛H题——The Next (位运算)

    Let L denote the number of 1s in integer D's binary representation. Given two integers S1 and S2, we ...