基于keepalived和RS端脚本配置的案例,,后端是tomcat应用程序.
软件地址:
1
|
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
|
再做以下操作之前,应该lvs配置成功、配置见这篇文章
1
|
http://douya.blog.51cto.com/6173221/1680692
|
开始配置lvs基于keepalived的环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
[root@lvs-1 soft]
# ls -al /usr/src/
total 16
drwxr-xr-x. 4 root root 4096 Nov 19 00:26 .
drwxr-xr-x. 14 root root 4096 Nov 19 00:32 ..
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 4 root root 4096 Nov 19 00:27 kernels
lrwxrwxrwx. 1 root root 39 Nov 19 00:26 linux ->
/usr/src/kernels/2
.6.32-431.el6.x86_64/
安装前先查看是不是有此路径,如果没有,请执行以下步骤:
ls
/usr/src/kernels/2
.6.32-573.8.1.el6.x86_64/
yum
install
kernel kernel-devel -y
ln
-s
/usr/src/kernels/2
.6.32-573.8.1.el6.x86_64/
/usr/src/linux/
[root@lvs-1 keepalived-1.1.19]
tar
xvf keepalived-1.1.19.
tar
.gz
[root@lvs-1 keepalived-1.1.19]
cd
keepalived-1.1.19
[root@lvs-1 keepalived-1.1.19] .
/configure
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
[root@lvs-1 keepalived-1.1.19]yum
install
openssl* -y
[root@lvs-1 keepalived-1.1.19].
/configure
Keepalived configuration
------------------------
Keepalived version : 1.1.19
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS
sync
daemon support : Yes
Use VRRP Framework : Yes
Use Debug flags : No
表明无误
[root@lvs-1 keepalived-1.1.19]
make
&&
make
install
|
以上是编译安装,推荐使用yum install keepalived 安装
一、开始安装
1
|
yum install keepalived
-
y
|
二、开始配置keepalived、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
lvs-1 配置keepalived ---MASTER
[root@lvs-1 ~]
# more /etc/keepalived/keepalived.conf
! Configuration File
for
keepalived
global_defs {
notification_email {
334035686@qq.com
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.12
/24
}
}
virtual_server 192.168.2.12 80 {
#设置虚拟服务器,需要指定虚拟IP与服务端口,用空格分隔
delay_loop 6
#设置健康状态检查时间,单位为秒
lb_algo rr
#设置负载高度算法,rr为轮询
lb_kind DR
#设置LVS实现负载均衡的机制,可以为{NAT|TUN|DR}三种
nat_mask 255.255.255.0
#设置掩码
persistence_timeout 50
#会话保持时间,单位为秒;这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案
protocol TCP
#指定转发协议类型可以设置{TCP|UDP}两种
real_server 192.168.2.221 80 {
#后端服务器节点,需要指定Real_server的IP与端口,用空格分隔
weight 1
#配置服务节点的权重,数字越大,权重越高
TCP_CHECK {
connect_timeout 3
#这个设置几秒钟测试一下这服务有没有挂.
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.30 80 {
weight 1
TCP_CHECK {
connect_timeout 3
#这个设置几秒钟测试一下这服务有没有挂.
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
|
SLAVE端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
[root@lvs-2~]
# more /etc/keepalived/keepalived.conf
! Configuration File
for
keepalived
global_defs {
notification_email {
334035686@qq.com
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.12
/24
}
}
virtual_server 192.168.2.12 80 {
#设置虚拟服务器,需要指定虚拟IP与服务端口,用空格分隔
delay_loop 6
#设置健康状态检查时间,单位为秒
lb_algo rr
#设置负载高度算法,rr为轮询
lb_kind DR
#设置LVS实现负载均衡的机制,可以为{NAT|TUN|DR}三种
nat_mask 255.255.255.0
#设置掩码
persistence_timeout 50
#会话保持时间,单位为秒;这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案
protocol TCP
#指定转发协议类型可以设置{TCP|UDP}两种
real_server 192.168.2.221 80 {
#后端服务器节点,需要指定Real_server的IP与端口,用空格分隔
weight 1
#配置服务节点的权重,数字越大,权重越高
TCP_CHECK {
connect_timeout 3
#这个设置几秒钟测试一下这服务有没有挂.
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.30 80 {
weight 1
TCP_CHECK {
connect_timeout 3
#这个设置几秒钟测试一下这服务有没有挂.
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
|
启动master,slave,,在master查看状态
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@lvs-1 scripts]
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link
/loopback
00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1
/8
scope host lo
inet6 ::1
/128
scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link
/ether
00:0c:29:c8:69:ec brd ff:ff:ff:ff:ff:ff
inet 192.168.2.13
/24
brd 192.168.2.255 scope global eth0
inet 192.168.2.12
/24
scope global secondary eth0
inet6 fe80::20c:29ff:fec8:69ec
/64
scope link
valid_lft forever preferred_lft forever
|
到目前为止,在lvs server端的配置已经完成、
三、下面开始配置real-server后面节点即(绑定VIP到lo,抑制ARP、)
此处可以使用脚本进行配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#!/bin/sh
#Date: 2015-11-20
#By: charles
#Description: deploy backend server (bind lo interface and Inhibition arp)
VIP=
"192.168.2.12"
INT=
"lo:0"
lo_INT=`
ifconfig
|
grep
lo|
awk
-F
" "
'{print $1 }'
`
.
/etc/init
.d
/functions
function
start() {
if
[
"$lo_INT"
==
"lo"
];
then
ifconfig
$INT $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev $INT
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
else
echo
"vip is binded,Pls Re binding"
exit
2
fi
if
[ $? -
eq
0 ]
then
action
"start bind vip and Inhibition arp is success"
/bin/true
else
action
"start bind vip and Inhibition arp failed"
/bin/false
fi
}
function
stop() {
ifconfig
$INT $VIP broadcast $VIP netmask 255.255.255.255 up
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
if
[
"$INT"
!=
"lo"
]
then
action
"stop bind vip and Inhibition arp is success"
/bin/true
elif
[
"$INT"
==
"lo"
]
then
action
"stop bind vip is and Inhibition arp failed"
/bin/false
else
echo
"bind Error"
fi
}
function
restart() {
stop
sleep
1
start
}
case
"$1"
in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo
"USAGE :$0 {start|stop|restart}"
exit
2
esac
exit
$?
|
四、还有对keepalived的日志做rsyslog的日志专门记录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
root@lvs-1 ~]
# cat /etc/sysconfig/keepalived
1,修改keepalived的日志格式
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
#
#KEEPALIVED_OPTIONS="-D"
KEEPALIVED_OPTIONS=
"-D -d -S 0"
,
2, 配置rsyslog
yum
install
syslog -y
新加一下行
[root@lvs-1 ~]
# vim /etc/rsyslog.conf | grep local0
local0.*
/var/log/keepalived
.log
[root@lvs-1 ~]
#
/etc/init
.d
/rsyslog
restart
/etc/init
.d
/keepalived
restart
3,查看日志
[root@lvs-1 ~]
# tail -f /var/log/keepalived.log
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Using LinkWatch kernel netlink reflector...
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Activating healthchecker
for
service [192.168.2.221]:80
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Activating healthchecker
for
service [192.168.2.30]:80
Nov 20 13:36:28 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Transition to MASTER STATE
Nov 20 13:36:28 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Entering MASTER STATE
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) setting protocol VIPs.
Nov 20 13:36:29 lvs-1 Keepalived_healthcheckers[12935]: Netlink reflector reports IP 192.168.2.12 added
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0
for
192.168.2.12
Nov 20 13:36:34 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0
for
192.168.2.12
|
##########################################################################################
LB server本机配置nginx服务
master 配置文件如下:
vim keepalived.conf
! Configuration File for keepalived
vrrp_script check_run {
script "/etc/keepalived/nginx_check.sh"
interval 5
weight 2
}
global_defs {
notification_email {
334035686@qq.com
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51 ## the same as slave lvs
priority 100
advert_int 1
track_interface {
eth0
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.12
}
track_script {
check_run
}
}
#BACKUP 配置文件
vim keepalived.conf
! Configuration File for keepalived
vrrp_script check_run {
script "/etc/keepalived/nginx_check.sh"
interval 5
weight 2
}
global_defs {
notification_email {
334035686@qq.com
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51 ## the same as MASTER lvs
priority 90
advert_int 1
track_interface {
eth0
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.12
}
track_script {
check_run
}
}
以下是检查nginx健康状态的脚本:
#!/bin/bash
NGINX_PROCESS=`ps -C nginx --no-header | wc -l`
if [ $NGINX_PROCESS -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1715183,如需转载请自行联系原作者