一、Keepalived介绍
Keepalived是分布式部署系统解决系统高可用的软件,结合LVS(Linux Virtual Server)使用,其功能类似于heartbeat,解决单机宕机的问题。
二、Keepalived技术原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。通过VRRP协议结合LVS,对组群服务器监控情况,若master出现宕机情况,则将VIP漂移到backup机上。实现了分布式系统高可用。可以理解为:keepalived是LVS的管理软件,根据监控情况,将宕机服务器从ipvsadm移除掉。
三、Keepalived+LVS+Nginx实现系统高可用
服务器 | IP地址 | 说明 |
虚拟IP | 192.168.1.120:80 | |
主机 | 192.168.1.104:80 | |
备机 | 192.168.1.103:80 | |
Web站点A | 192.168.1.101:8081 | 不同端口 |
Web站点B | 192.168.1.101:8082 | 不同端口 |
1、安装ipvsadm,CentOS7自带安装包,通过yum进行安装。实现系统支持LVS
1
|
yum install ipvsadm
|
2、安装Keepalived软件,并将keepalived设置开机启动
1
|
yum install Keepalived
|
1
|
systemctl enable keepalived
|
3、进行Keepalived.conf配置,如果是MASTER机,将state BACKUP改为state MASTER。
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
|
vim /etc/keepalived/keepalived.conf
#配置的内容
! Configuration File
for
keepalived
global_defs {
notification_email {
[email protected] #收到通知的邮件地址
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor_nginx{
script
"/usr/local/etc/keepalived/script/monitor_nginx.sh"
interval 1
weight -15
}
vrrp_instance VI_1 {
state BACKUP
interface
eno16777736
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.120
}
track_script {
monitor_nginx
}
}
virtual_server 192.168.1.120 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.103 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.104 80 {
weight 5
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
|
4、配置监控shell脚本
1
2
3
4
5
6
7
8
9
10
|
(1)创建:vim /usr/local/etc/keepalived/script/monitor_nginx.sh
if
[
"$(ps -ef | grep "
nginx: master process
"| grep -v grep )"
==
""
]
then
systemclt start nginx.service
sleep 5
if
[
"$(ps -ef | grep "
nginx: master process
"| grep -v grep )"
==
""
]
then
killall keepalived
fi
fi
|
现在我们对nginx进行配置:
安装Nginx和配置
1、Nginx介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的工程师Igor Sysoev研发,供俄国大型的入口网站Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
2、安装部署
在CentOS7通过命令行安装Nginx服务器。
(1)添加Nginx仓储,添加 epel repository
sudo yum install epel-release
(2)检查是否已安装过nginx
find -name nginx
(3)如果有安装则删除
yum remove nginx
(4)安装nginx
sudo yum install nginx
(5)启动nginx
sudo systemctl start nginx
sudo systemctl enable nginx #可用
(6)将nginx 设置为启动系统自动启动nginx
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
(7)查看本机IP,为了后续配置nginx.conf所用
ifconfig
(8)修改nginx.conf配置文件
cd /etc/nginx/ #定位到nginx安装目录
vim nginx.conf #通过vim打开nginx.conf配置文件进行配置
(9)主要配置节点,192.168.119.1:8081 和 192.168.119.1:8082 分别部署在 IIS7的两个ASP.NET MVC 开发的站点(在另一台电脑),设计软件架构解决方案后续介绍。
upstream 192.168.119.128{
server 192.168.119.1:8081;
server 192.168.119.1:8082;
}
server{
listen 80;
server_name 192.168.119.128;
location /{ proxy_pass http://192.168.119.128; } }
(10)重启nginx服务
service nginx restart
如下对功能进行验证测试。
四、实现测试展示
1、访问系统情况:通过VIP(192.168.1.120)访问系统页面。因为设置了轮询调度,所以刷新页面访问不同站点。
2、将 MASTER(192.168.1.104)关机前后,查看相关VLS情况:
我们看到将104服务器从 LVS移除掉。此时则将后续请求转发到103服务器。
3、关机后,BACKUP服务器 keepalived日志显示无法连接104,并移除掉
5、开机后,将自动检测到服务器正常,并加入LVS中。