760176104 发表于 2015-11-19 15:32:18

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

  官网: 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. 配置
  

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

#下载box
#vagrant是利用vitualbox来安装的,那必要有个系统镜像。vagrant已经有了,直接下载,这里下载个32位的ubuntu base box   
wgethttp://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 +xcheck_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:ba: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:ba: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
  



版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: Vagrant体验之一nginx+keepalived高可用测试