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

来源:互联网 发布:新手怎么做淘宝刷好评 编辑:程序博客网 时间:2024/06/08 15:44

官网: 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_testcd ha_testvagrant 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"  endend


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


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

#启动vagrant up web1vagrant up web2#登录vagrant ssh web1vagrant ssh web2


二. vms环境配置


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




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

安装测试必要软件:

sudo apt-get updatesudo 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/bashA=`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  fifi

sudo chmod +x  check_nginx.sh


启动nginx和keepalived

sudo service nginx startsudo 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


原创粉丝点击