在Vagrant上使用docker图像构建Redis群集:无法ping机器
我试图在OSX上本地构建一个简单的redis集群,在virtualbox虚拟机中使用docker。具体来说,我想创建一个主redis节点(192.168.0.100),其中包含两个从节点(.101和.102)。这涉及到配置每台机器,并向每台从机发出命令,告诉它键值存储关系中的主机是谁 这非常有效,直到我决定在Vagrant文件中做一些编程工作,使配置更加灵活。结果是,我甚至无法ping.102之外的任何机器,更不用说使用redis cli命令(例如,在Vagrant上使用docker图像构建Redis群集:无法ping机器,docker,vagrant,Docker,Vagrant,我试图在OSX上本地构建一个简单的redis集群,在virtualbox虚拟机中使用docker。具体来说,我想创建一个主redis节点(192.168.0.100),其中包含两个从节点(.101和.102)。这涉及到配置每台机器,并向每台从机发出命令,告诉它键值存储关系中的主机是谁 这非常有效,直到我决定在Vagrant文件中做一些编程工作,使配置更加灵活。结果是,我甚至无法ping.102之外的任何机器,更不用说使用redis cli命令(例如,redis cli-h 192.168.0.1
redis cli-h 192.168.0.100 INFO
来查看主设备是否正确设置了从设备)
我的目标/限制:
- 在virtualbox虚拟机中运行docker:我在阅读文档时看到了几种方法。我选择这样做是因为我不想引用大量的外部文件
- 配置后,在每个VM上运行一系列命令,以设置从机等
- 我不想只使用boot2docker,因为我还有很多其他的东西要添加。。。twemproxy、sentinel和我想至少稍微模拟一下生产环境
redis1:Warning:authentication failure。在机器启动后重试…
。不过,我还是能把这台机器砰砰地一声关上
新文件(使用下面的配置文件): 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
旧文件:
# 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
//,快一年了。你有没有找到解决这个问题的方法,或者你必须从头开始重新做呢?我放弃了,直接在谷歌计算引擎中构建虚拟机,实际的系统就在那里。我现在正在重建系统以使用Kubernetes(可能是通过托管版本,Google容器引擎),我认为这将使流浪部分变得更容易,因为Kubernetes修复了Docker的坏网络。//,我认为Swarm修复了Docker的坏网络?//,已经快一年了。你有没有找到解决这个问题的方法,或者你必须从头开始重新做呢?我放弃了,直接在谷歌计算引擎中构建虚拟机,实际的系统就在那里。我现在正在重建系统以使用Kubernetes(可能是通过托管版本,Google容器引擎),我认为这将使流浪部分更容易,因为Kubernetes修复了Docker的坏网络。//,我想Swarm修复了Docker的坏网络?
# 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