Vagrant + Chefな環境でbondingを構築する。

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は夏休みの宿題ってことで!

ほな!

コメントは受け付けていません。