Vagrant体验之一nginx+keepalived高可用测试

长平狐 发布于 2013/11/25 18:37
阅读 1K+
收藏 8

官网: www.vagrantup.com

github: https://github.com/mitchellh/vagrant

vagrant是个好东西,之前由于网络环境原因,在本地环境安装warden失败,用vagrant轻松搞定,抽空好好体验下。

如果想做些集群或单机测试,可是没有服务器资源,或是远程操作太繁琐。那么vagrant就就派上用场,可以在本机实现最小单元的集成。

这次先测试下nginx+keepalived的高可用。


集群配置:

VIP: 192.168.50.5

nginx1: 192.168.50.3  主

nginx2: 192.168.50.4  备

宿主机环境:ubuntu

一. vargrant 配置

     1. 前提

       安装vagrant 、vitualBox

       vagrant的provider之一就是用vitualbox,所以要先安装它:https://www.virtualbox.org/wiki/Linux_Downloads

       vagrant之前用gem来安装,但是依赖太多,安装太费用,后来直接deb安装了。http://downloads.vagrantup.com/


       下载deb包到本地,dpkg -i xx.deb安装就ok了。

    2. 配置

       

#初始化
mkdir  ha_test
cd ha_test
vagrant init #在目录下会生成Vagrant配置文件


#下载box
#vagrant  是利用vitualbox来安装的,那必要有个系统镜像。vagrant已经有了,直接下载,这里下载个32位的ubuntu base box   
wget  http://files.vagrantup.com/precise32.box


#将box加入到vagrant管理:
vagrant box add precise32 $precise32.box_url

#可以查看下:
vagrant box list


编辑Vagrant配置文件,

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  
config.vm.define "web1" do |web1|
    web1.vm.box = "precise32"
    web1.vm.network "private_network", ip: "192.168.50.4"
  end

  config.vm.define "web2" do |web2|
    web2.vm.box = "precise32"
    web2.vm.network "private_network", ip: "192.168.50.3"
  end
end


定义了两个服务器,用的系统都是之前下载的precies32,同时配置了private_network,是为了两个服务器之间可以通讯。


配置文件设置ok,就可以启动服务器了。

#启动
vagrant up web1
vagrant up web2

#登录
vagrant ssh web1
vagrant ssh web2


二. vms环境配置


登录进去,首先看一下ip,ipconfig如下:




另一个服务器只是eh1的ip地址不一样。可以看到两个服务器的默认eth0的配置都一样,连ip都一样:10.0.2.15,所以我们需要一个private_network来创建eth1,用于两个服务的通讯需要。

安装测试必要软件:

sudo apt-get update
sudo apt-get install keepalived nginx curl 


配置keepalived

在/etc/keepalived目录下创建配置文件keepalived.conf

vrrp_script chk_nginx {  
 script "/etc/keepalived/check_nginx.sh" # 判断nginx状态
 interval 2  
 weight 2  
}  
  
global_defs {  
 notification_email {  
      test@gmail.com     #发给谁
 }  
 notification_email_from test@gmail.com
 smtp_server smtp.jd.com
 smtp_connect_timeout 30
 router_id nginx_master

}  
vrrp_instance VI_NODE {  
 state MASTER           #另一服务器为BACKUP    
 interface eth1         #必要用以服务器之间通讯的eth1,而不是默认的eth0
 virtual_router_id 100  #BACKUP配置与这一样
 priority 200           #BACKUP要比它小
 advert_int 1  
  
 authentication {  
        auth_type PASS  
        auth_pass jaev21qaz2wsx  
 }  
 track_script {  
        chk_nginx
 }  
 virtual_ipaddress {  
        192.168.50.5    #VIP,启动keepalived后,ip a 查看
 }  
} 

nginx check脚本:check_nginx.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
  /etc/init.d/nginx start
  sleep 3
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    /etc/init.d/keepalived stop
  fi
fi

sudo chmod +x  check_nginx.sh


启动nginx和keepalived

sudo service nginx start
sudo service keepalived start

在主服务器上,ip a ,看到vip信息:

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27🇧🇦4f:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.3/24 brd 192.168.50.255 scope global eth1
    inet 192.168.50.5/32 scope global eth1
    inet6 fe80::a00:27ff:feba:4fe4/64 scope link 
       valid_lft forever preferred_lft forever

在两台服务器上 都执行  curl http://192.168.50.5 ,可以显示nginx 的默认页面。至少说明vip生效。


三. 测试高可用


预期:关闭主的nginx,VIP会被备服务器接管。curl   http://192.168.50.5 也是可以通的,证明高可用。


#主

sudo service nginx stop 

#主

ip a 

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27🇧🇦4f:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.3/24 brd 192.168.50.255 scope global eth1
    inet6 fe80::a00:27ff:feba:4fe4/64 scope link 
       valid_lft forever preferred_lft forever

#备

ip a 

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:b8:81:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.4/24 brd 192.168.50.255 scope global eth1
    inet 192.168.50.5/32 scope global eth1
    inet6 fe80::a00:27ff:feb8:818f/64 scope link 
       valid_lft forever preferred_lft forever


#主,备

curl   http://192.168.50.5  


但是很快,VIP又被主服务器抢去了,这是因为check_nginx.sh的原因,会先尝试去启动nginx,启起来之后,主又是主了,如果nginx启动不了,就会同时将keepalived也停止,这时VIP才真正被备服务器接管。



四. 其它


#保存退出

vagrant halt web1

#挂起

vagrant supend web1

#销毁

vagrant destroy web1


vagrant还有很多功能没有用到,下回继续。


微博:http://weibo.com/kingjames3



原文链接:http://blog.csdn.net/k_james/article/details/12994145
加载中
0
小A
小A
不错,有时间试试
0
翟志军
翟志军
同学你好,我想问下你用的是什么版本。我用1.4.2执行打包时会失败
返回顶部
顶部