|
官网: 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: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
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|
|