1.Keepalived简介
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
2.KeepAlived实现Nginx反向代理高可用
实验环境:
lab1:172.16.21.101 OS:CentOS6.5 已安装Nginx
lab2:172.16.21.102 OS:CentOS6.5 已安装Nginx
lab3:172.16.21.103 OS:CentOS6.5 已安装Httpd,运行www.stu21.com网站
lab4:172.16.21.104 OS:CentOS6.5 已安装Httpd,运行bbs.stu21.com网站
在nginx实现将www.stu21.com/bbs重定向到bbs.stu21.com网站,同时配置Kepppalived在lab1和lab2上,实现Nginx的高可用,以避免其发生单点故障而影响整个站点的访问
设置Nginx为反向代理:
在lab1和lab2的nginx的配置文件中的http段中添加如下内容
server {
listen 80;
server_name test.stu21.com;
location / {
proxy_pass http://172.16.21.103;
}
location /bbs {
rewrite /bbs/?(.*)$ /$1 break;
proxy_pass http://172.16.21.104;
} 现在访问效果如下:
[root@lab1 nginx-1.6.1]# curl www.stu21.com
www.stu21.com
[root@lab1 nginx-1.6.1]# curl www.stu21.com/bbs
bbs.stu21.com
配置KeepAlived实现Nginx高可用:
前提:
两台主机分别可以基于密钥连接到对方,并且在对方主机的已知主机列表中
lab1和lab2的keepalived配置如下
lab1:
[root@lab1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost.com
}
notification_email_from keepalived@localhost.com
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_script chk_nginx {
script "if killall -0 nginx; then exit 0;else ssh lab2 '/etc/init.d/nginx start'; exit 1;fi"
interval 1
weight -2
fall 3
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 21
priority 100
authentication {
auth_type PASS
auth_pass nginxabc
}
virtual_ipaddress {
172.16.21.200/16
}
track_script {
chk_nginx
}
notify_master "/etc/keepalived/nginx.sh master"
notify_backup "/etc/keepalived/nginx.sh backup"
notify_fault "/etc/keepalived/nginx.sh fault"
}
lab2:
[root@lab2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost.com
}
notification_email_from keepalived@localhost.com
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_script chk_nginx {
script "if killall -0 nginx; then exit 0;else ssh lab2 '/etc/init.d/nginx start'; exit 1;fi"
interval 1
weight -2
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 21
priority 99
authentication {
auth_type PASS
auth_pass nginxabc
}
virtual_ipaddress {
172.16.21.200/16
}
track_script {
chk_nginx
}
notify_master "/etc/keepalived/nginx.sh master"
notify_backup "/etc/keepalived/nginx.sh backup"
notify_fault "/etc/keepalived/nginx.sh fault"
}
两边所使用监控脚本内容如下
[root@lab2 ~]# cat /etc/keepalived/nginx.sh
#!/bin/bash
vip=172.16.21.200
contact='root@localhost'
mail() {
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)
mail master
/etc/rc.d/init.d/nginx start
exit 0
;;
backup)
mail backup
/etc/rc.d/init.d/nginx stop
exit 0
;;
fault)
mail fault
/etc/rc.d/init.d/nginx stop
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
保证两边使用同样的Nginx配置
测试:
#停掉lab1的nginx程序,此时查看lab2的日志
可见lab2已经成功添加了172.16.21.200的地址,访问,仍然可以得到如下页面
3.双主模型Keepalived实现LVS高可用
配置文件:
#lab1的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 172.16.21.101
smtp_connect_timeout 30
router_id LVS_2121
}
vrrp_script chk_schedown{
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
state MASTER #另一台为SLAVE
interface eth0
virtual_router_id 121
priority 100 #另一台为99
garp_master_delay 1
authentication {
auth_type PASS
auth_pass lvsablvs
}
track_script {
chk_schedown
}
virtual_ipaddress {
172.16.21.200/16
}
}
vrrp_instance VI_2 {
state SLAVE #另一台为MASTER
interface eth0
virtual_router_id 122
priority 99 #另一台为100
garp_master_delay 1
authentication {
auth_type PASS
auth_pass lvslvsv2
}
track_script {
chk_schedown
}
virtual_ipaddress {
172.16.21.201/16
}
}
virtual_server 172.16.21.200 80 { #定义虚拟主机
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.0.0
# persistence_timeout 50 #定义持续连接时间,此处测试,故被注释掉
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.16.21.103 80 { #定义RealServer
weight 10 #定义权重
HTTP_GET { #定义健康检测机制
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.21.104 80 {
weight 5
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 172.16.21.201 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.0.0
# persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.16.21.103 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.21.104 80 {
weight 5
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在lab3和lab4上,需要进行如下设置
#阻止VIP的arp请求
[root@lab3 ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@lab3 ~]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@lab3 ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[root@lab3 ~]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
#给lo口设置VIP
[root@lab3 ~]# ip addr add 172.16.21.201/32 broadcast 172.16.21.200 dev lo
[root@lab3 ~]# ip addr add 172.16.21.201/32 broadcast 172.16.21.201 dev lo 其次我们还需要为各RealServer提供网页服务器和网页文件,此时我们的一个双主模型,高可用的LVS服务器便搭建成功了
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com