注:未做特别说明,两台服务器(两个节点)都一样操作
安装Nginx
使用《OneinStack》Nginx选择y,其余n
安装Keepalived
在Nginx-Master、Nginx-Backup:
cd ~/oneinstack/src
wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
tar xzf keepalived-1.2.22.tar.gz
cd keepalived-1.2.22
./configure --prefix=/usr/local/keepalived
make && make install
配置Keepalived
在Nginx-Master、Nginx-Backup:
ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived
chkconfig keepalived on
在Nginx-Master修改配置文件,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@linuxeye.com #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
}
notification_email_from no-reply@linuxeye.com #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp server地址
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_script chk_nginx {
script "/usr /local/keepalived/sbin/check_nginx.sh" #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝 试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
interval 2 #每2s检测一次
weight 2 #检测失败(脚本返回非0)则优先级2
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
interface eth0 #指定HA监测网络的接口
virtual_router_id 55 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass linuxeye #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
10.0.0.62
}
track_script {
chk_nginx #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
}
在Nginx-Backup修改配置文件,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@linuxeye.com #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
}
notification_email_from no-reply@linuxeye.com #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp server地址
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_script chk_nginx {
script "/usr /local/keepalived/sbin/check_nginx.sh" #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝 试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
interval 2 #每2s检测一次
weight 2 #检测失败(脚本返回非0)则优先级2
}
vrrp_instance VI_1 {
state BACKUP #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
interface eth0 #指定HA监测网络的接口
virtual_router_id 55 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 50 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
nopreempt #设置nopreempt防止抢占资源,只生效BACKUP节点
authentication { #设置验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass linuxeye #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
10.0.0.62
}
track_script {
chk_nginx #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
}
检测脚本,vi /usr/local/keepalived/sbin/check_nginx.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
#echo 1
/etc/init.d/nginx start
sleep 5
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
/etc/init.d/keepalived stop
#echo 2
fi
fi
脚本加上可执行权限
chmod +x /usr/local/keepalived/sbin/check_nginx.sh
验证
service keepalived start #启动Nginx-Master
service keepalived start #启动Nginx-Backup
ip addr #2台服务器分别执行,绑定虚拟IP在Nginx-Master
service keepalived stop #停止Nginx-Backup
ip addr #2台服务器分别执行,绑定虚拟IP在Nginx-Backup
service keepalived start #再启动Nginx-Backup
ip addr #2台服务器分别执行,绑定虚拟IP在Nginx-Master
上述切换默认测试会导致的master和backup之间来回切换
通 常如果master服务死掉后backup会变成master,但是当master服务又好了的时候master此时会抢占VIP,这样就会发生两次切换 对业务繁忙的网站来说是不好的。我们可以在配置文件加入nopreempt非抢占,但是这个参数只能用于state为BACKUP,故我们在用HA的时候 最好MASTER和backup的state都设置成BACKUP让其通过priority来竞争。
拓展
假设我要重装这2台服务器,但是过程不容许丢一个包,通常情况下先替换backup,把master停止,让vip漂移只backup,替换master,但是在vip漂移过程可能会有丢2个包,如果避免丢包?
方法:我们可以在master替换之前,利用iptables将数据包转发到backup,再停止master keepalived
最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论