LVS+Keepalived负载均衡配置部署

时间:2021-01-26 03:07:32

一、准备工作
1. 服务器、操作系统(当前CentOS6.6 x86_64)、网络环境(服务期间网络互通) ; 

# 操作系统:CentOS6.6 x86_64
# 服务器 (LVS主备各1台,WEB服务器3台,图片服务器2台)
WEBServer负载虚拟IP192.168.0.20
IMGServer负载虚拟IP192.168.0.30
LVS
主:192.168.0.11
LVS
备:192.168.0.12
WebServer1 192.168.0.21
WebServer2 192.168.0.22
WebServer3 192.168.0.23
IMGServer1 192.168.0.31
IMGServer2 192.168.0.32

2. 关闭SELinux(改完需重启服务器); 

# 关闭SELinux
sed
-i 's#^SELINUX=.*#SELINUX=disabled#' /etc/sysconfig/selinux
# 重启服务器
reboot

3. Iptables开启需要端口,如80; 

# Iptables 开启相应端口
iptables
-A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
iptables
-A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

二、LVS主机安装Keepalived,ipvsadm
1. 安装依赖包 

yum -y install wget popt popt-devel popt-static libnl libnl-devel kernel-devel; 
ln
-s /usr/src/kernels/$(uname -r)/ /usr/src/linux;

2. 安装 Keepalived,ipvsadm(YUM安装或TarBall安装) 

# YUM安装 Keepalived,ipvsadm
yum
-y install keepalived ipvsadm;

# TarBall安装Keepalived
wget http
://www.keepalived.org/software/keepalived-1.2.15.tar.gz;
tar xvf keepalived
-1.2.15.tar.gz -C /usr/local/src/;
cd
/usr/local/src/keepalived-1.2.15/;
./configure \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconf=/etc \
--with-kernel-dir=/
usr/src/kernels/$(uname -r)/;
make
;
make install
;
# TarBall安装ipvsadm
wget http
://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz;
tar xvf ipvsadm
-1.26.tar.gz -C /usr/local/src/;
cd
/usr/local/src/ipvsadm-1.26/;
make
;
make install
;

3. 创建ipvsadm配置文件,启动并加入开机启动

/etc/init.d/ipvsadm save; 
/etc/init.d/ipvsadm start;
chkconfig ipvsadm on
;

4. 配置并启动keepalived 

# 备份keepalived配置文件
cd
/etc/keepalived/;
[ -f "keepalived.conf" -a ! -f "keepalived.conf.default" ] && mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.default;
[ -f "keepalived.conf" ] && mv keepalived.conf keepalived.conf.$(date +%F_%T);

# 创建 Keepalived 配置文件(需先修改 virtual_ipaddress,virtual_server,real_server 配置的IP)
cat
>> /etc/keepalived/keepalived.conf <<KEEPALIVED
! Configuration File for keepalived

global_defs
{
notification_email
{
mr@mruse
.cn
}
notification_email_from xxx@163
.com
smtp_server smtp@163
.com
smtp_connect_timeout
30
router_id LVS_1
}

vrrp_instance VI_1
{
state MASTER
interface eth0
virtual_router_id
60
priority
100
advert_int
1
authentication
{
auth_type PASS
auth_pass
MrUse
}
virtual_ipaddress
{
192.168.0.20
192.168.0.30
}
}

virtual_server
192.168.0.21 80 {
delay_loop
3
lb_algo rr
lb_kind DR
persistence_timeout
3
protocol TCP

real_server
192.168.0.22 80 {
weight
3
TCP_CHECK
{
connect_timeout
10
nb_get_retry
3
delay_before_retry
3
connect_port
80
}
}

real_server
192.168.0.23 80 {
weight
3
TCP_CHECK
{
connect_timeout
10
nb_get_retry
3
delay_before_retry
3
connect_port
80
}
}
}

virtual_server
172.16.100.130 80 {
delay_loop
3
lb_algo rr
lb_kind DR
persistence_timeout
3
protocol TCP

real_server
192.168.0.31 80 {
weight
3
TCP_CHECK
{
connect_timeout
10
nb_get_retry
3
delay_before_retry
3
connect_port
80
}
}

real_server
192.168.0.32 80 {
weight
3
TCP_CHECK
{
connect_timeout
10
nb_get_retry
3
delay_before_retry
3
connect_port
80
}
}
}
KEEPALIVED

# 启动Keepalived并加入开机启动
/etc/init.d/keepalived restart;
chkconfig keepalived on
;

5. 记录Keepalived日志

# 注释Keepalived默认配置
grep
^KEEPALIVED_OPTIONS /etc/sysconfig/keepalived && sed -i 's#^KEEPALIVED_OPTIONS#\#KEEPALIVED_OPTIONS#g' /etc/sysconfig/keepalived;

# 更新keepalived配置
echo
'KEEPALIVED_OPTIONS="-D -d -S 0"' >> /etc/sysconfig/keepalived;
/etc/init.d/keepalived restart
grep
"# CmsTop Keepalived" /etc/rsyslog.conf||cat >> /etc/rsyslog.conf <<SYSLOG
# CmsTop Keepalived $(date +%F)
# keepalived -D -d -S 0
local0
.* /var/log/keepalived.log
SYSLOG
/etc/init.d/rsyslog restart

6. 为真实服务器 WebServer, IMGServe创建配置启动脚本(需修改IP地址)

[ -f "/etc/init.d/lvsr" ] && mv /etc/init.d/lvsr /etc/init.d/lvsr.$(date +%F_%T)
cat
>> /etc/init.d/lvsr <<LVSR
#!/bin/bash

SNS_VIP
=172.16.100.120

/etc/rc.d/init.d/functions

start
()
{
/sbin/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
"LVS RealServer Start OK"
}
stop
()
{
/sbin/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
"LVS RealServer Stoped"
}

case "\$1" in
start
)
start
;
;;
stop
)
stop
;
;;
restart
)
stop
;
start
;
;;
status
)
/sbin/ifconfig|tail -5
;;
*)
echo
"Usage: \$0 {start|stop|restart|status}"
exit 1
esac

exit 0
LVSR

# 修改依赖文件及启动脚本权限并启动
chmod
+x /etc/init.d/lvsr;
chmod
+x /etc/rc.d/init.d/functions;
/etc/init.d/lvsr start

# 加入开机启动
grep
^/etc/init.d/lvsr /etc/rc.local || echo '/etc/init.d/lvsr start' >> /etc/rc.local

三、查看状态、测试排错
1. 重启Keepalived,在LVS服务器上查看状态 

/etc/init.d/keepalived restart;
/etc/init.d/ipvsadm status;

2. 测试排查思路

# 查看配置文件,查看ip
# 查看Iptables是否开启相应端口
# 查看网络,服务器间及与虚拟IP是否可以通信
# 查看Keepalived,ipvsadm是否正常启动
# 查看错误日志