Nginx能够实现高并发反向代理,实现负载均衡,可是有个问题就是Nginx是单点的。若是Nginx故障,则整个服务将会处于不可用状态。因此咱们就须要想办法让nginx高可用,即便一个Nginx宕机,还能够有其余的Nginx来支持服务。如今咱们经过Keepalived的就能够实现多台Nginx做为主备机,当主机宕机时,可让备机切换成主机继续提供服务,对整个用户服务几乎没有影响。html
Keepalived是一个基于VRRP协议来实现的服务高可用方案,能够利用其来避免IP单点故障,相似的工具还有heartbeat、corosync、pacemaker。可是它通常不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一块儿工做来达到集群的高可用。linux
a. 下载安装包:nginx
http://www.keepalived.org/download.htmlbash
b. 解压 keepalived-1.2.18.tar.gz(我下载到Windows下,使用ftp上传到linux虚拟机上,能够直接在linux上使用wget url 进行下载),解压到/usr/local目录下并发
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/ 负载均衡
c. 安装依赖包高并发
yum -y install openssl,openssl-devel工具
d. 检查环境,设置安装目录ui
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalivedurl
如上说明环境检查经过。
e. 安装: make && make install
a. 由于没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成以后,须要作一些修改工做,首先建立文件夹,将keepalived配置文件进行复制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
b. 而后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
c. 能够设置开机启动:
chkconfig keepalived on;
到此咱们安装完毕,开机则keepalived就已经启动!
4. 配置主备机keepalived配置文件:keepalived.conf
a. master配置文件以下:
! Configuration File for keepalived global_defs { router_id aries114 ##真实主机名或者ip } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ##要执行的检查脚本 interval 2 ##keepalived多久执行一次 weight -20 ##权重-20 } vrrp_instance VI_1 { state MASTER ##主备机配置 interface eth0 ##默认使用网卡 virtual_router_id 88 ##虚拟id号,主备机配置一致 mcast_src_ip 192.168.137.114 ##真实主机ip Nopreempt ##非抢占式 priority 100 ##权重优先级 advert_int 1 ##组播信息发送间隔,俩个节点必须配置一致,默认1s authentication { auth_type PASS auth_pass 1111 ##验证密码,主备机一致 } track_script { chk_nginx } virtual_ipaddress { 192.168.137.110 ##虚拟ip(vip)能够配置多个 } }
b. backup配置文件:
! Configuration File for keepalived global_defs { router_id aries111 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 88 mcast_src_ip 192.168.137.111 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.137.110 } }
不一样点已用红色标出:
router_id 主机名或者ip
mcast_src_ip 真实主机ip
state 表示主备机master表示主BACKUP表示备,两个也能够都设置成backup,则两个抢占主机服务,一个宕机另外一个就作为主机。
virtual_ipaddress 虚拟出来的主机ip , 可配置多个;
script "/etc/keepalived/nginx_check.sh" 这个是keepalived要执行的检查Nginx服务是否正常的脚本,须要咱们去编写。
c. 编写检查脚本,命名nginx_check.sh,而后置于"/etc/keepalived/"目录下
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ]; then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
以上脚本的做用是,检查是否有nginx服务进程,若是有则执行结束不作处理;若是没有,则启动Nginx服务,间隔两秒钟再去检查是否有Nginx服务,若是没有就杀死此keepalived进程,若是有
则不作处理。
到此就经过keepalived配置完了Nginx的高可用服务。
使用 ip a 查看主节点则有一个虚拟IP:
客户机访问: 192.168.137.110 此时 192.168.137.114 提供服务;若是让192.168.137.114宕机,则vip则会浮动到备机 192.168.137.111上,有192.168.137.111提供服务。
以下是一个访问模型图:
参考材料:
http://blog.csdn.net/hechurui/article/details/51065467
白鹤翔老师的Nginx教学视频。