by: 白马公园/naritech 本文的主旨在于配置一个尽可能简单的高可用WEB服务系统,帮助读者理清keepalived、LVS等软件的配置和使用,为进一步用好LVS树立信心,夯实基础。 本文
by: 白马公园/naritech
本文的主旨在于配置一个尽可能简单的高可用WEB服务系统,帮助读者理清keepalived、LVS等软件的配置和使用,为进一步用好LVS树立信心,夯实基础。
本文只涉及使用LVS和Keepalived解决WEB服务的高可用和高并发,对于WEB集群中的session共享即数据一致性问题不做讨论,对WEB集群中的session共享问题感兴趣的朋友可以参考我的另外一篇文章《nginx、tomcat、redis配置session共享》
网上关于LVS和keepalived搭建高可用WEB服务的文章很多,本文的不同之处在于笔者在配置的过程中遇到了很多问题,因而走了不少弯路。所以本文的重点将放在这些问题的讲述上。
一、 系统架构
全系统包括五台服务器,均为虚拟机,安装Centos6.5操作系统,其中
hadoop01 192.168.75.88 安装keepalived,作为主负载调度器使用
hadoop02 192.168.75.89 安装keepalived,作为备用负载调度器使用
hadoop03 192.168.75.90 安装tomcat,作为真实Web服务器使用
hadoop04 192.168.75.91 安装tomcat,作为真实Web服务器使用
hadoop05 192.168.75.92 安装tomcat,作为真实Web服务器使用
VIP设定为 192.168.75.188,正常运行时该IP被设置在hadoop01上,接受客户端请求并按照负载分配策略挑选出一台真实的服务器,并将请求分配给真实的服务器进行处理。当hadoop01上的keepalived退出运行时,VIP被设置到hadoop02上,hadoop02接管此前hadoop01的任务,继续接受客户端请求并提供负载调度服务
二、 keepalived的安装配置(hadoop01和hadoop02均需要安装配置)
2.1 keepalived版本选择
最新的keepalived1.2.24对应Centos6.5操作系统在安装上有些问题,make不能成功,不推荐使用Keepalived1.2.6版本安装后运行异常,跟踪日志文件后无法定位问题,也不推荐使用,这里选择keepalived1.2.19,安装介质可以在keepalived官网上下载
2.2 keepalived安装前的准备
1、需要安装C++编译器。
C++编译器的安装请参考《nginx、tomcat、redis配置session共享》
2、需要安装openSSL
rpm -ivh zlib-1.2.3-29.el6.x86_64.rpm
rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm
rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm
rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm
rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm
rpm -ivh keyutils-libs-devel-1.4-4.el6.x86_64.rpm
rpm -ivh libselinux-devel-2.0.94-5.3.el6_4.1.x86_64.rpm
rpm -ivh krb5-devel-1.10.3-10.el6_4.6.x86_64.rpm
rpm -ivh openssl-1.0.1e-15.el6.x86_64.rpm
rpm -ivh openssl-devel-1.0.1e-15.el6.x86_64.rpm
3、需要安装kernel-devel开发包
rpm -ivh kernel-devel-2.6.32-431.el6.x86_64.rpm
2.3 keepalived的configure
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64 --disable-fwmark
当安装了kernel-devel开发包之后,系统就有了/usr/src/kernels/2.6.32-431.el6.x86_64这样的类似目录,直接找到这个目录即可
Configure成功后会显示出以下内容:
Keepalived configuration
------------------------
Keepalived version : 1.2.19
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lssl -lcrypto -lcrypt
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
fwmark socket support : No
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
SHA1 support : No
Use Debug flags : No
特别要注意:Use IPVS Framework、IPVS sync daemon support、Use VRRP Framework、Use VRRP VMAC这四项必须为Yes
2.4 keepalived的make
介质路径下直接键入make,注意使用root用户
make成功之后会显示以下内容:
Make complete
make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/genhash'
Make complete
2.5 keepalived的make install
介质路径下直接键入make install,注意使用root用户
make install成功之后会显示以下内容:
make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/keepalived'
make -C genhash install
make[1]: Entering directory `/users/oracle/software/keepalived-1.2.19/genhash'
install -d /usr/local/keepalived/bin
install -m 755 ../bin/genhash /usr/local/keepalived/bin/
install -d /usr/local/keepalived/share/man/man1
install -m 644 ../doc/man/man1/genhash.1 /usr/local/keepalived/share/man/man1
make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/genhash'
2.6 安装后的系统级设置
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/
chmod 777 /etc/init.d/keepalived
cd /etc/init.d
chkconfig --add keepalived
chkconfig keepalived on
mkdir –p /etc/keepalived
touch /etc/keepalived/keepalived.conf
2.7 keepalived的配置
! Configuration File for keepalived
global_defs {
notification_email {
[email protected] //可以是虚假的email地址,但要配置
}
notification_email_from [email protected] //可以是虚假的email地址,但要配置
smtp_server 192.168.200.1 //可以是虚假的IP地址,但一定要配置
smtp_connect_timeout 30 //默认
router_id LVS_DEVEL //默认
}
vrrp_instance VI_1 { //定义一个VRRP实力对象 VI_1
state MASTER //hadoop01上设置为MASTER,hadoop02上设置为BACKUP
interface eth0 //定义设置VIP地址的网卡名
virtual_router_id 51 //默认
priority 100 //hadoop01设为100,hadoop02设为99,数越小,级别越低
advert_int 1 //默认
authentication {
auth_type PASS //默认
auth_pass 1111 //默认
}
virtual_ipaddress {
192.168.75.188 //VIP地址
}
}
//VIP地址的监听端口,该端口要和实际服务器的监听端口一致,否则会不能正常转发
virtual_server 192.168.75.188 8080 {
delay_loop 6 //默认
lb_algo rr //负载调度算法设置
lb_kind DR //负载均衡转发:使用效率最高的DR算法
nat_mask 255.255.255.0 //默认
persistence_timeout 50 //默认
protocol TCP //转发支持的协议
real_server 192.168.75.90 8080 { //实时服务器一的地址及端口
weight 1 //权重
TCP_CHECK {
connect_timeout 3 //默认
nb_get_retry 3 //默认
delay_before_retry 3 //默认
}
}
real_server 192.168.75.91 8080 { //实时服务器二的地址及端口
weight 1 //权重
TCP_CHECK {
connect_timeout 3 //默认
nb_get_retry 3 //默认
delay_before_retry 3 //默认
}
}
real_server 192.168.75.92 8080 { //实时服务器三的地址及端口
weight 1 //权重
TCP_CHECK {
connect_timeout 3 //默认
nb_get_retry 3 //默认
delay_before_retry 3 //默认
}
}
}
三、 实际服务器的软件安装和配置
实际服务器有三台即hadoop03、hadoop04、hadoop05,均需要安装和配置
3.1 tomcat的安装
略
在三台实际服务器上启动tomcat,监听端口为8080
3.2 IPVS相关配置
编辑一个realserver.sh脚本,chmod 777 realserver.sh
内容:
SNS_VIP=192.168.75.188
source /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up
/sbin/route add -host $SNS_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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
/sbin/route del $SNS_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 "Usage:$0 {start|stop}"
exit 1
esac
exit 0
在三台机器上逐一使用realserver.sh start启动该脚本
四、 测试
使用http://192.168.75.188:8080可以访问到tomcat,停止hadoop01或者hadoop02中的任意一台机器都不影响http://192.168.75.188:8080这个入口,停止hadoop03、hadoop04、hadoop05中的任意一台或者任意两台都不影响web服务的访问
五、 补充
5.1 keepalived的调试
Keepalived的安装相对而言难一点,遇到的问题较多。安装并不困难,困难在启动之后会遇到一些异常,在排查这些异常的时候,需要使用一些适合的方法,可以从/var/log/message文件中查看keepalived启动后的输出日志,从而判断是否运行正常
Keepalived启动之后,可以使用ip addr命令查看VIP是否已经正确加载到了对应的网卡上,注意不要使用ifconfig –a命令,ifconfig命令无法查看到VIP的信息
Keepalived启动异常的原因有很大可能是keepalived.conf配置文件配置不正确,可以通过精简配置文件来逐一排查。比如先去掉virtualserver的部分配置,只保留VIP的配置,如下:
! Configuration File for keepalived
global_defs {
notification_email {
[email protected] //可以是虚假的email地址,但要配置
}
notification_email_from [email protected] //可以是虚假的email地址,但要配置
smtp_server 192.168.200.1 //可以是虚假的IP地址,但一定要配置
smtp_connect_timeout 30 //默认
router_id LVS_DEVEL //默认
}
vrrp_instance VI_1 { //定义一个VRRP实力对象 VI_1
state MASTER //hadoop01上设置为MASTER,hadoop02上设置为BACKUP
interface eth0 //定义设置VIP地址的网卡名
virtual_router_id 51 //默认
priority 100 //hadoop01设为100,hadoop02设为99,数越小,级别越低
advert_int 1 //默认
authentication {
auth_type PASS //默认
auth_pass 1111 //默认
}
virtual_ipaddress {
192.168.75.188 //VIP地址
}
}
使用这个配置文件来运行keepalived,测试VIP是否能被正确添加到网卡上,如果可以,再加上virtualserver的配置部分,通过这种手段可以快速定位异常和错误