使用Vagrant顶部的docker映像构buildRedis群集:无法ping机器

我试图在OSX上使用docker在virtualbox VMS中构build一个简单的redis集群。 具体来说,我想创build一个有两个从(.101和.102)的主redis节点(192.168.0.100)。 这包括configuration每台机器并向每个从机发出一个命令,告诉它主机处于键值 – 存储关系。

这很好,直到我决定通过在我的Vagrantfile中编写一些程序化的东西来使我的configuration更加灵活。 结果是,我甚至无法ping到.102旁边的任何机器,更不用说使用redis-cli命令(例如, redis-cli -h 192.168.0.100 INFO查看主站的从站设置正确)

我的目标/限制:

  • 在虚拟机虚拟机中运行docker:在阅读文档时,我看到了几种方法。 我select了这样做的方式,因为我不想引用大量的外部文件。
  • 在configuration完成之后,在每个虚拟机上运行一系列命令,设置从属和不可用。
  • 我宁愿不使用boot2docker,因为我有一堆其他的东西,我要join… twemproxy,哨兵,我想模拟一个生产环境至less一点点。

我在新文件中做错了什么?

编辑:我已经调查了一下。 我试过的一件事是破坏所有图像,然后运行旧的stream浪文件来build立机器,然后用新的stream浪文件重新加载它们。 在这种情况下,机器工作,虽然每次我看到像redis1: Warning: Authentication failure. Retrying...authentication失败消息redis1: Warning: Authentication failure. Retrying... 机器重新redis1: Warning: Authentication failure. Retrying...redis1: Warning: Authentication failure. Retrying... 我能ping通机器,但没有问题。


新的Vagrantfile(使用下面的configuration文件):

 require './config.rb' include RedisClusterConfig Vagrant.configure(2) do |config| config.vm.provider "virtualbox" ## Redis Nodes (Can define multiple triplets) ## for node in RedisClusterConfig.redisNodes config.vm.define node.name do |a| a.vm.hostname = node.name a.vm.box = "ubuntu/trusty64" # Skip checking for an updated Vagrant box a.vm.box_check_update = false # Networking a.vm.network :private_network, ip: node.address a.ssh.forward_agent = true a.ssh.insert_key = false # Set up docker with 'redis' image a.vm.provision "docker" do |d| d.images = ["redis"] d.run "redis", name: "redis", args: "-p "+node.port+":"+node.port end # Additional configuration a.trigger.after [:up, :resume, :reload, :provision] do # Master/slave unless node.slaveOfAddress.nil? system("redis-cli -h " + node.address + " SLAVEOF " + node.slaveOfAddress + " " + node.slaveOfPort) puts "Finished setting up slave node: " + node.name else puts "Finished setting up master node: " + node.name end end end end end 

config.rb:

 module RedisClusterConfig attr_reader :redisNodes RedisNode = Struct.new("RedisNode", :name, :address, :port, :slaveOfAddress, :slaveOfPort) p = "6379" # Default redis port baseAddr = "192.168.0." # Define a triplet redis0 = RedisNode.new("redis0", baseAddr + "100", p, nil, nil) redis1 = RedisNode.new("redis1", baseAddr + "101", p, baseAddr + "100", p) redis2 = RedisNode.new("redis2", baseAddr + "102", p, baseAddr + "100", p) @redisNodes = [redis0, redis1, redis2] end 

旧的Vagrantfile:

 # Make sure you have triggers plugin: # vagrant plugin install vagrant-triggers # # TODO: # - We really would like to run some shell commands after everything is done, not after each machine is provisioned Vagrant.configure(2) do |config| config.vm.provider "virtualbox" ## Redis Nodes ## ### Master Node### config.vm.define "redis0" do |a| a.vm.hostname = "redis0" a.vm.box = "ubuntu/trusty64" # Skip checking for an updated Vagrant box a.vm.box_check_update = false # Networking a.vm.network :private_network, ip: "192.168.0.100" a.ssh.forward_agent = true a.ssh.insert_key = false a.vm.provision "docker" do |d| d.images = ["redis"] d.run "redis", name: "redis", args: "-p 6379:6379" end end ### Slave Nodes ### config.vm.define "redis1" do |a| a.vm.hostname = "redis1" a.vm.box = "ubuntu/trusty64" # Skip checking for an updated Vagrant box a.vm.box_check_update = false # Networking a.vm.network :private_network, ip: "192.168.0.101" a.ssh.forward_agent = true a.ssh.insert_key = false a.vm.provision "docker" do |d| d.images = ["redis"] d.run "redis", name: "redis", args: "-p 6379:6379" end end config.vm.define "redis2" do |a| a.vm.hostname = "redis2" a.vm.box = "ubuntu/trusty64" # Skip checking for an updated Vagrant box a.vm.box_check_update = false # Networking a.vm.network :private_network, ip: "192.168.0.102" a.ssh.forward_agent = true a.ssh.insert_key = false a.vm.provision "docker" do |d| d.images = ["redis"] d.run "redis", name: "redis", args: "-p 6379:6379" end end # After everything else has finished provisioning... config.trigger.after [:up, :resume, :reload] do # Configuring redis master/slave triplet system('echo Configuring redis master/slave triplet...') system('redis-cli -h 192.168.0.101 SLAVEOF 192.168.0.100 6379') system('redis-cli -h 192.168.0.102 SLAVEOF 192.168.0.100 6379') end end