Vagrant + Chefな環境でbondingを構築する。
あるじゃないですか?
扉とかに 「押」「引」の文字。
僕、常に押すんですよね。
あ、どうもP山です。
Vagrant + chefな環境において限りなく本番環境に近づけたいときに、
NICって結構悩むと思うのですよね。
本番環境はbondingつかってNICを冗長化しているけど、検証だからNIC一個で!が多いとは思いますが、
やってみたのでご紹介。
まずchefにはifconfig
というリソースがあって、それを使うとifcfgファイルがDSLで書けるのですが、
そのDSLにMASTER
の項目がないので、今のバージョンでは少なくともbondを定義するのは厳しそうでした。
やろうと思うとtemplate(もしくはcookbook_file)でやることになり、それがこんな感じ。
Vagrantfile
config.vm.define :compute do |c|
c.vm.network :private_network, autoconfig: false, virtualbox__intnet: "intnet"
c.vm.network :private_network, autoconfig: false, virtualbox__intnet: "intnet"
c.vm.network :private_network, autoconfig: false, virtualbox__intnet: "intnet"
c.vm.network :private_network, autoconfig: false, virtualbox__intnet: "intnet"
c.vm.provision :chef_zero do |chef|
chef.add_role 'compute'
end
end
ポイントはautoconfig: false
にしてあげることで、自動設定を無効化します。
cookbook
template/ifcfg.conf
DEVICE=<%= @device %>
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
files/default/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 lacp_rate=slow xmit_hash_policy=layer3+4"
今回はIPふってないですが、こちらはifcfgと同じくIPもふることができます。
recipe/default.rb
1.upto(4).each do |i|
template "/etc/sysconfig/network-scripts/ifcfg-eth#{i}" do
source 'ifcfg.conf.erb'
owner 'root'
group 'root'
mode '0644'
variables ({
:device => "eth#{i}"
})
notifies :restart, 'service[network]'
end
end
cookbook_file "/etc/sysconfig/network-scripts/ifcfg-bond0" do
owner 'root'
group 'root'
mode '0644'
notifies :restart, 'service[network]'
end
service 'network' do
action :nothing
end
結果
bond0 Link encap:Ethernet HWaddr 08:00:27:85:8E:95
inet6 addr: fe80::a00:27ff:fe85:8e95/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:99 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12138 (11.8 KiB) TX bytes:6308 (6.1 KiB)
eth0 Link encap:Ethernet HWaddr 08:00:27:E9:00:C8
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fee9:c8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:204841 errors:0 dropped:0 overruns:0 frame:0
TX packets:106154 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:166813970 (159.0 MiB) TX bytes:6079495 (5.7 MiB)
eth1 Link encap:Ethernet HWaddr 08:00:27:85:8E:95
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:24 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2976 (2.9 KiB) TX bytes:1928 (1.8 KiB)
eth2 Link encap:Ethernet HWaddr 08:00:27:85:8E:95
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3054 (2.9 KiB) TX bytes:1460 (1.4 KiB)
eth3 Link encap:Ethernet HWaddr 08:00:27:85:8E:95
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3054 (2.9 KiB) TX bytes:1460 (1.4 KiB)
eth4 Link encap:Ethernet HWaddr 08:00:27:85:8E:95
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3054 (2.9 KiB) TX bytes:1460 (1.4 KiB)
eth5 Link encap:Ethernet HWaddr 08:00:27:42:B8:F6
inet addr:10.52.2.21 Bcast:10.52.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe42:b8f6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:80243 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4889556 (4.6 MiB) TX bytes:2460 (2.4 KiB)
eth6 Link encap:Ethernet HWaddr 08:00:27:9C:41:7D
inet addr:10.52.1.21 Bcast:10.52.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe9c:417d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36984 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2294016 (2.1 MiB) TX bytes:2544 (2.4 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
こんな感じでbondが組めるようになります。
ifconfig
リソースのPRは夏休みの宿題ってことで!
ほな!