如何使用vagrant快速搭建couchbase集群

   在工作中,很多时候要和客户演示couchbase集群的构建,管理和客户端连接使用等,发现基于vagrant和virtualbox 可以非常便捷的搭建演示环境,总结步骤如下,供对couchbase感兴趣的开发人员参考:

环境要求:

我使用的是mac OS,所以在我们部署节点之前,确认已经安装Vagrant 和VirtualBox, 对于mac很简单,下载对应的.dmg文件,然后点击安装。安装成功后,创建一个路径存放Vagrant的配置文件 Vagrantfile. 为了简单,我创建的路径名字叫 “vagrant”。

在你新创建的路径下,需要创建一个 Vagrantfile.它的作用像是vagrant的makefile, Vagrant 通过它知道,我们想怎么样来部署我们的节点。我们没有通过这个配置文件来配置操作系统之上的软件,例如Couchbase的安装,软件的安装我们通过puppet在另外的配置中完成。 看看如下我使用的Vagrantfile的例子:

Vagrant.configure("2") do|config|
 
    #Number of nodes to provision
   numNodes = 4
 
    #IP Address Base for private network
   ipAddrPrefix = "192.168.56.10"
 
    #Define Number of RAM for each node
   config.vm.provider "virtualbox" do |v|
       v.customize ["modifyvm", :id, "--memory", 1024]
   end
 
    #Provision the server itself with puppet
   config.vm.provision :puppet
 
    #Download the initial box from this url
   config.vm.box_url = "http://files.vagrantup.com/precise64.box"
 
    #Provision Config for each of the nodes
   1.upto(numNodes) do |num|
       nodeName = ("node" + num.to_s).to_sym
       config.vm.define nodeName do |node|
           node.vm.box = "precise64"
           node.vm.network :private_network, ip: ipAddrPrefix + num.to_s
           node.vm.provider "virtualbox" do |v|
                v.name = "Couchbase ServerNode " + num.to_s
           end
       end
   end
 
end

这个配置文件是用来配置Vagrant的ruby 代码,我们一起来看一下每一个directive以及是什么作用。

# Number of nodes to provision
numNodes = 4
 
# IP Address Base for private network
ipAddrPrefix = "192.168.56.10"


上面的两个值,可以根据自己的需要设,我是根据我的环境设置如上,numNodes指明了需要几个VM虚机.  下面的一个循环用到了这个值;ipAddrPrefix设置了虚机集群的静态IP开始地址段,末尾地址自增直到设置的numNodes个数,所以我的环境中,4个虚机的IP从192.168.56.101到192.168.56.104;

# Define Number of RAM for each node
config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--memory", 1024]
end

这段配置,实现了为虚拟机增加内存设置,默认情况下虚机的内存配置是小于512M,我基于我的机器环境,给每个1G内存。你可以根据自己的机器环境进行设置

# Provision the server itself with puppet
config.vm.provision :puppet

因为我们使用puppet来为虚机配置软件安装,所以上面的配置告诉Vagrant使用puppet 

# Download the initial box from this url 
config.vm.box_url = "<em>vagrant base box you want to use</em>"

Vagrant使用预定义好的介质,所以我们不需要从头来配置OS环境,我的环境中,使用的时Ubuntu12.04 64bit box,你可以根据需要选择.

# Provision Config for each of the nodes
 upto(numNodes) do |num|
    nodeName = ("node" + num.to_s).to_sym
    config.vm.define nodeName do |node|
        node.vm.box = "precise64"
        node.vm.network :private_network, ip: ipAddrPrefix + num.to_s
        node.vm.provider "virtualbox" do |v|
            v.name = "Couchbase Server Node " + num.to_s
        end
    end
end

段代码进行了机的配置,循每一台被建出机设置了IP地址和制定一个机器名,如果你想添加每个级别的设置,就使用node段,不然机就会使用整个集群范的设置,在config端的设置。

如果我们现在运行在这个路径下运行Vagrant up命令,我们会得到四个Ubuntu的继续,可以使用SSH连接进去,但是没有其他的软件安装在OS上,所以为了让我们的虚机默认有Couchbase Server安装配置好,我们使用Puppet,Puppet是一个系统的自动化软件,在部署环境上非常简单好用。Vagrant对Puppet的支持非常好,配置步骤如下,在当前路径下创建一个manifests文件夹,并在manifests中创建一个default.pp文件。代码如下:

exec { "couchbase-server-source": 
    command => "/usr/bin/wget http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb",
    cwd => "/home/vagrant/",
    creates => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb",
    before => Package['couchbase-server']
}
 
exec { "install-deps":
    command => "/usr/bin/apt-get install libssl0.9.8",
    before => Package['couchbase-server']
}
 
package { "couchbase-server":
    provider => dpkg,
    ensure => installed,
    source => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb"
}

  让我们逐一看一下default.pp里面的每一段代码的作用。

exec { "couchbase-server-source": 
    command => "/usr/bin/wget http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb",
    cwd => "/home/vagrant/",
    creates => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb",
    before => Package['couchbase-server']
}

我们在Puppet中定义我们需要运行的带,上面代码执行了wget,然后把文件存储在用户的home路径下,在我的例子里,我让puppet去下载debian平台的couchbase 安装介质;注意,package的安装任务有一个“before”依赖,因为文件的下载不完成,我们不能开始进行安装。

exec { "install-deps":
    command => "/usr/bin/apt-get install libssl0.9.8",
    before => Package['couchbase-server']
}

我们还需要在每个节点上安装libss10.9.8, 这是安装couchbase需要的唯一的依赖包。我们使用OS的命令行工具apt-get 来安装。

package { "couchbase-server":
    provider => dpkg,
    ensure => installed,
    source => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb"
}

最后,我们可以进行couchbase server debian安装包的安装了,因为介质已经下载完毕并且放在虚机的路径,而且依赖包也安装好了。

当然,我的puppet配置非常简单,因为我的目的就是快速部署4个节点的couchbase 集群,你可以根据自己的软件需要添加puppet配置步骤。使用我目前的配置,如果我要更新couchbase server的版本,只需要在default.pp 中,更换需要下载的couchbase server 版本即可。

现在,如果你在当前路径下运行vagrant up,就可以得到couchbase server的集群了。也可用使用vagrant provision在节点运行的时候来应用puppet的配置,无需重新停止和启动vagrant虚机。

运行的输出如下:


  
  
    • Bringing machine 'node1' up with 'virtualbox' provider...
      Bringing machine 'node2' up with 'virtualbox' provider...
      Bringing machine 'node3' up with 'virtualbox' provider...
      Bringing machine 'node4' up with 'virtualbox' provider...
      [node1] Clearing any previously set forwarded ports...
      [node1] Creating shared folders metadata...
      [node1] Clearing any previously set network interfaces...
      [node1] Preparing network interfaces based on configuration...
      [node1] Forwarding ports...
      [node1] -- 22 => 2222 (adapter 1)
      [node1] Running any VM customizations...
      [node1] Booting VM...
      [node1] Waiting for VM to boot. This can take a few minutes.
      [node1] VM booted and ready for use!
      [node1] Configuring and enabling network interfaces...
      [node1] Mounting shared folders...
      [node1] -- /vagrant
      [node1] -- /tmp/vagrant-puppet/manifests
      [node1] Running provisioner: puppet...
      Running Puppet with default.pp...
      stdin: is not a tty
      notice: /Stage[main]//Exec[install-deps]/returns: executed successfully
      notice: Finished catalog run in 0.77 seconds
      .... more for all the other nodes.


现在,你可以使用浏览器来访问192.168.56.10[1-4] 的8091端口,来使用couchbase集群了;使用我完毕时,用vagrant hlat命令来停止虚机;也可以使用vagrant suspend来将虚机的状态保存到磁盘上,加快下一次启动的速度;如果你只想使用单个节点,而不是整个集群,可以在启动时指定需要启动的节点。例如,只想使用第一个节点,那么用命令vagant up node1来进行启动。

总结一下,我发现vagrant和virtual box可以快速的帮我构建couchbase server的集群,更改一行代码就可以指定需要的版本,最方便的是,我可以将我的配置文件共享给客户,方便他们的开发和测试部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值