- From: Joshua Timberman <
>
- To:
- Subject: [chef] Re: Concurrency node creation issue
- Date: Tue, 6 Sep 2011 21:23:57 -0600
Hello,
As Andrew points out, this is a race condition.
What we typically do is the specificity route, where a single system who is
to be master is assigned such as a role. For example the "database master"
for an application will have a role ... "appname_database_master." Any other
nodes that are slaves would have "appname_database_slave." Our "database"
cookbook and its companion "application" follow this pattern and behave
accordingly.
However I'd love to see a solution that utilizes Noah or Zookeeper to solve
the problem more dynamically.
On Sep 4, 2011, at 3:57 PM, Daniel Cukier wrote:
>
Hi,
>
>
I have in my infrastructure a topology where there's one master node and
>
many slave nodes.
>
What I want to do is to automatically detect if a node is a master or a
>
slave. The rule is:
>
1) If there is no master node yet, the next node will be the master
>
2) If there is a master, the next node will be slave and its master will be
>
the already existing master.
>
>
The problem occurs when I have an empty infrastructure (zero nodes) and I
>
try to create the first 2 nodes simultaneously.
>
When both nodes get provisioned, both check that there is no master and both
>
are set to be master, which is a wrong configuration.
>
This is a very common synchronization problem, but I don't know how to deal
>
with it in the Chef environment.
>
>
Here's the recipe to configure a node:
>
>
@@master = node
>
>
search(:node, 'role:myrole') do |n|
>
if n['myrole']['container_type'] == "master"
>
@@master = n
>
if n.name != node.name
>
node.set['myrole']['container_type'] = "slave"
>
end
>
end
>
end
>
>
if @@master == node
>
node.set['myrole']['container_type'] = "master"
>
end
>
>
template "#{node['myrole']['install_dir']}/#{ZIP_FILE.gsub('.zip',
>
'')}/conf/topology.xml" do
>
source "topology.xml.erb"
>
owner "root"
>
group "root"
>
mode "0644"
>
variables({:master => @@master})
>
end
>
>
How can I avoid this problem?
>
>
Thanks a lot
>
>
Daniel Cukier
--
Opscode, Inc
Joshua Timberman, Director of Training and Services
IRC, Skype, Twitter, Github: jtimberman
Archive powered by MHonArc 2.6.16.