一、Keepalived
keepalived前提准备见上文 --> Keepalived基础配置
二、keepalived高可用LVS
keepalived能够根据配置文件生成ipvs规则,同时可以对后端各RS做健康状态检测
1、实验清单
director1: node1 192.168.0.40
director2: Nginx 192.168.0.108
Vip:192.168.0.80
RS1(httpd):192.168.0.100
RS2(httpd):192.168.0.101
2、配置文件
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
65
66
67
68
69
70
71
72
73
74
|
[root@Nginx ~]
# cd /etc/keepalived/
[root@Nginx keepalived]
# vim keepalived.conf
! Configuration File
for
keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_mt {
script
"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
#node1须修改为BACKUP
interface eth0
virtual_router_id 51
priority 100
#node1降低优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 71988d704dcae985
}
virtual_ipaddress {
192.168.0.80
/32
}
track_script {
chk_mt
}
notify_master
"/etc/keepalived/notify.sh master"
notify_backup
"/etc/keepalived/notify.sh backup"
notify_fault
"/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.0.80 80 {
delay_loop 6
#服务器轮询6次超时
lb_algo rr
#LVS调度算法
lb_kind DR
#LVS转发方法
nat_mask 255.255.255.0
#掩码
persistence_timeout 50
#长链接时间
protocol TCP
#tcp协议
ha_suspend
#在无vip情形下,不再进行健康状态检测
sorry_server 127.0.0.1 80
#当RS全宕机时,sorry_server提供错误页面
real_server 192.168.0.100 80 {
#RS的ip,端口
weight 1
#权重
HTTP_GET {
#检测类型,这里是HTTP_GET
url {
#检测请求的类型,这里是状态检测
path /
status_code 200
}
connect_timeout 3
#连接超时时间
nb_get_retry 3
#重试次数
delay_before_retry 3
#重试前延迟时间
}
}
real_server 192.168.0.101 80 {
weight 2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
|
3、定义状态转变后发邮件的notify脚本(来自马哥文档)
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
|
#!/bin/bash
#
vip=192.168.0.80
contact=
'root@localhost'
notify() {
mailsubject=
"`hostname` to be $1: $vip floating"
mailbody=
"`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo
$mailbody | mail -s
"$mailsubject"
$contact
}
case
"$1"
in
master)
notify master
exit
0
;;
backup)
notify backup
exit
0
;;
fault)
notify fault
exit
0
;;
*)
echo
'Usage: `basename $0` {master|backup|fault}'
exit
1
;;
esac
|
二、高可用Nginx
1、在Nginx主机上配置反向代理upstream
1
2
3
4
5
6
7
8
9
10
11
12
|
http区段配置
upstream nodeserver{
server 192.168.0.30;
server 192.168.0.40;
}
server区段配置
location / {
proxy_pass http:
//nodeserver
;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
add_header X-Cache $upstream_cache_status;
}
|
2、配置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
|
global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script
"killall -0 nginx &> /dev/null"
interval 1
weight -10
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 71988d704dcae985
}
virtual_ipaddress {
192.168.0.80
/32
}
track_script {
chk_nginx
}
notify_master
"/etc/keepalived/notify.sh master"
notify_backup
"/etc/keepalived/notify.sh backup"
notify_fault
"/etc/keepalived/notify.sh fault"
}
|
本文转自 元婴期 51CTO博客,原文链接:http://blog.51cto.com/jiayimeng/1896884