エレベータの制御にこそAIを活用すべきだ

高層ビルの通勤・昼食・帰宅時のエレベーターの待ち行列の悲惨さは目に余るものがある。
こういうところにこそビッグデータやAIを活用してリアルタイムで流動的に制御すべきだと思うのだが, 未だ実装されたというのを聞かない。

このあたりに誰か神の一手をうってほしいところ(自分にはできないから人頼み)。

OSPFのデフォルトルート配信設定

OSPFでデフォルトルートを配信するときにややハマったのでメモ。

Ciscoでは「default-information originate」コマンドで設定する。

OSPFではデフォルトルートは配信されないので, このコマンドで配信のON/OFFを制御する。また, オプションでallwaysをつけない限りはそのルータにデフォルトルート(0.0.0.0/0)のルートを持っていない限りは配信されない。

大体スタティックルートでデフォルトルートの設定を入れるのだけれど, スタティックの向け先がデフォルトルートを配信するOSPFのエリアの外か内かでメトリック値の扱いが異なる。これに気が付かなかったので, とある案件の検証でちょっとハマった。

以下の構成でR2からデフォルトルートを配信することを考える。

R2のデフォルトルートを192.168.50.254とOSPFのエリアに所属していないインタフェースに設定し, それをArea0と100に配信する。
R1とR3のshow ip routeの結果はこうなる。

R1#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.20.2 to network 0.0.0.0

C 192.168.10.0/24 is directly connected, FastEthernet1/0
C 192.168.20.0/24 is directly connected, FastEthernet0/0
10.0.0.0/32 is subnetted, 1 subnets
C 10.1.1.1 is directly connected, Loopback0
O*E2 0.0.0.0/0 [110/1] via 192.168.20.2, 00:00:11, FastEthernet0/0

R3#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.30.2 to network 0.0.0.0

C 192.168.30.0/24 is directly connected, FastEthernet0/1
C 192.168.40.0/24 is directly connected, FastEthernet0/0
10.0.0.0/32 is subnetted, 1 subnets
C 10.3.3.3 is directly connected, Loopback0
O*E2 0.0.0.0/0 [110/1] via 192.168.30.2, 00:20:37, FastEthernet0/1

この場合メトリックは「1」。
ここで, R2の192.168.50.0/24側のインタフェースをArea0に所属させてみる。
また, わかりやすいようにそのインタフェースのコスト値を100に変える。
図にするとこんな感じ。

R1#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.20.2 to network 0.0.0.0

C 192.168.10.0/24 is directly connected, FastEthernet1/0
C 192.168.20.0/24 is directly connected, FastEthernet0/0
10.0.0.0/32 is subnetted, 1 subnets
C 10.1.1.1 is directly connected, Loopback0
O 192.168.50.0/24 [110/110] via 192.168.20.2, 00:00:13, FastEthernet0/0
O*E2 0.0.0.0/0 [110/100] via 192.168.20.2, 00:00:13, FastEthernet0/0

R3#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.30.2 to network 0.0.0.0

C 192.168.30.0/24 is directly connected, FastEthernet0/1
C 192.168.40.0/24 is directly connected, FastEthernet0/0
10.0.0.0/32 is subnetted, 1 subnets
C 10.3.3.3 is directly connected, Loopback0
O*E2 0.0.0.0/0 [110/1] via 192.168.30.2, 00:31:07, FastEthernet0/1

R1はメトリックが100。R3はメトリックが1。

結果から見ると, 同じエリア内のルート情報だと該当するインタフェースのコスト値になり, エリア外だとメトリックは1になるということがわかった。

まぁ, 基本的に後者の構成が一般的だと思うけど, こんな挙動するってのは知らなかった。

検証って大事ね。

【OpenStack】Ocataでインスタンス作成エラー

AWSのインスタンスにOcataをPackstackで入れて見たんだけど, インスタンス作成時にエラーが出る。

 ERROR nova.conductor.manager [req-c532e549-5c8c-44b9-a1f6-728b6e8dccdf - - - - -] No host-to-cell mapping found for selected host packstack. Setup is incomplete. 

バグという情報もあり, Work Arroundに習って以下コマンドを実行することで回避出来た。

# nova-manage cell_v2 discover_hosts
# nova-manage cell_v2 list_cells
+---------+--------------------------------------+
| Name | UUID |
+---------+--------------------------------------+
| cell0 | 00000000-0000-0000-0000-000000000000 |
| default | cd0248ed-7350-48d6-9239-236083c4d401 |
+---------+--------------------------------------+

新たにCellが出来たっぽい。
が, インスタンスを作ってみると

nternal error: process exited while connecting to monitor

という新たなエラーで起動せず。んー。
なんか足りない。

VyOSのイメージ作成

OpenStackでVyOSのイメージをESXからのイメージでなんとなく適当にやっていたけど, やっぱキレイなイメージ使いたいと思って今日やっとこさやった。

手順はこう。

  1. KVM上でVyOSのisoイメージから起動する用のCentOSを準備
  2. KVM on OpenStack(KVM)となるので, インスタンスをちょっといじる
  3. KVM用CentOSに必要なパッケージを入れる
  4. VyOSのisoをDL
  5. KVM上で起動
  6. MAC消してeth0をDHCPに設定したり自分色に染める
  7. qcow2をOpenStackにイメージとして登録で完了

実際の流れ。

CentOS7のインスタンスを立ち上げる。
KVM on KVMの設定をここを参考に実施。
必要なパッケージインストール。

sudo yum install -y qemu-kvm libvirt virt-manager libguestfs.x86_64

KVM上でVyOS起動

qemu-img create -f qcow2 ./vyos.qcow2 2G
virt-install --virt-type kvm --name VyOS --ram 1024
--cdrom=../vyos-1.1.7-amd64.iso
--disk ./vyos.qcow2,format=qcow2
--network default
--nographics

VyOSをウィザードに従ってインストール。
これはオフィシャルの手順のまま。
インストール完了後再起動。VyOSはCD-ROMデバイスを再起動後に勝手にデタッチするので, この手順はやらなくてOK。

VyOSのテンプレートとなる設定を好みで入れる。(MACは消しておく)

conf
delete interface ethernet eth0 hw-id xx:xx:xx:xx:xx
set interface ethernet eth0 address dhcp

これで出来上がったqcow2をopenstack nodeへscp。
OPENSTACKにイメージとして登録。

openstack image create --file vyos-1.7.7.qcow2 --public --disk-format qcow2 --container-format bare VyOS-1.1.7

あとはこのイメージをもとにインスタンス作成。

openstack server create --flavor m1.small --image VyOS-1.1.7_true --security-group default --nic net-id=172.20.30.0/24  vyos_true

やっとすっきり!

参考までに今回作成したイメージをここに置いておく。

【メモ】openstackのyumでのアップデート手順

以前, 考えなしに yum update -y とかやったらOpenStack環境がぶっ壊れたので, 手順をこれみて確認しながら恐る恐るアップデートした。リポジトリオフっていたから久々に yum check-update やってみたら出るわ出るわ, アップデートの数々。やめようかと思った。

openstack-service stop
yum update -y
keystone-manage token_flush
keystone-manage db_sync
cinder-manage db sync
glance-manage db_sync
nova-manage db sync
heat-manage db_sync
openstack-service start

これで完了。
問題なさそうだったけど, cinder bootしていたインスタンスがボリュームがねーぞってエラーを吐いて起動せず。確かにメッセージのディレクトリを見てみるとたしかに無い。
試しに, 当該ボリュームから新しくインスタンスを起動してみると問題なく立ち上がる。

つーことで, 調査を諦めてインスタンス削除して新しく作ってリカバった。

packstackもいいけどtripleOでの構築もやってみようかな。

Ocata入れてみた

Ocataがリリースされたので AWSにCentOSのインスタンス立てて入れてみた。
コンテナ周りが充実したとかでMagnumも入れてみた。

AWSでAllinoneって結構面倒なのね。ローカルのPCサーバでやるのとはちょっと手順やanswer-fileの編集が違う。そういうものかしらね。

入れたばかりで何も設定していないが, OpenStackのイメージが変わったのね。フラットデザインになった。

デザイン変わった直後ってどうしても「前のほうがよかったなー」ってなる

Docker・・・。指定なのかしら

そしてコンテナはインスタンスの種類でDockerって表示されるのか。ふーん。

あれ, openstack-statusコマンドが見当たらない。

→ yum install openstack-utils やってなかっただけだった。(3/22追記)

OpenStack認定試験

正直なところ,運半分って出来でしたが業務+自宅のALL-in-one環境で触り倒して理解を深めつつ,なんとかOPCEL受かりました。

ネットワークのエリアは理解できていたけど,全体を通して細かな設定内容を理解できていなく厳しかったです。


この教材をベースに試験対策をしていましたが,当然というかコレだけでは受かりっこない内容です。実際に運用している人は余裕なんでしょうが,ネットワークエンジニアから入った人はもう少し試験勉強期間を取らないと大変かもしれません。(一夜漬けはキツイ)

でもまぁ,とりあえず受かってよかった。

【OpenStack】Trunk Portをためす

Newtonで実装されたTrunk Portを試してみようかと。
わかりやすくVyOSでやってみる。

・Parent Port作成
・このParent PortのMac Addressを指定してChild Portを作成する
という流れのよう。

実際にやってみる。

<事前準備>
neutron.conf内のservice_pluginsにtrunkを追加。

# The service plugins Neutron will use (list value)
service_plugins=router,metering,firewall,trunk

neutronサービス再起動

# openstack-service restart neutron

<ネットワーク準備>

$ openstack network list
+--------------------------------------+----------------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+----------------+--------------------------------------+
| 9911d560-cd64-41d9-aac2-f8637010b614 | 172.20.10.0/24 | de53ce0a-6604-46e7-a97c-f26323fc8823 |
| bae535af-298b-4987-be7f-9bb7bdab7afd | 172.20.30.0/24 | b026b305-2731-471b-b358-51693cbed255 |
| e0d4d1b6-b71f-4a51-98ec-96cb8d55d0e0 | 172.20.20.0/24 | 0697e15f-8595-4df3-8eec-324dfb6aa1a6 |
+--------------------------------------+----------------+--------------------------------------+

<親ポート作成>

openstack port  create --network 9911d560-cd64-41d9-aac2-f8637010b614 parent0

<子ポート作成>

parent_mac="$( openstack port show parent0 | awk '/ mac_address / { print $4 }' )"
openstack port create --network e0d4d1b6-b71f-4a51-98ec-96cb8d55d0e0 --mac-address "$parent_mac" childport1
openstack port create --network bae535af-298b-4987-be7f-9bb7bdab7afd --mac-address "$parent_mac" childport2

<Trunkポート作成>

openstack network trunk create --parent-port parent0 --subport port=childport1,segmentation-type=vlan,segmentation-id=110 trunk0
openstack network trunk set --subport port=childport2,segmentation-type=vlan,segmentation-id=120 trunk0

<Trunkポート確認>

openstack network trunk show trunk0
+-----------------+-------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------+-------------------------------------------------------------------------------------------------+
| admin_state_up | UP |
| created_at | 2016-11-22T05:21:34Z |
| description | |
| id | b1555b22-fdbe-42c1-bd0f-eced582451c1 |
| name | trunk0 |
| port_id | 9d0240c6-338d-4790-b806-589434371f81 |
| revision_number | 2 |
| status | DOWN |
| sub_ports | port_id='3e3f9ddf-4432-4952-8e2f-706dec3b2e14', segmentation_id='110', segmentation_type='vlan' |
| | port_id='d90a11ae-98f8-4484-b6ed-1a9ffc5acb10', segmentation_id='120', segmentation_type='vlan' |
| tenant_id | 75680dae0c7b4e6296a53543687a8b6a |
| updated_at | 2016-11-22T05:22:51Z |
+-----------------+-------------------------------------------------------------------------------------------------+

<インスタンス作成>

openstack server create --flavor 3 --image 17074b09-66da-4fcc-b4ee-d6522191d4a6 --nic port-id=9d0240c6-338d-4790-b806-589434371f81 --security-group 0db30ac7-e1de-4ea2-96b2-a5f4a68cd57f VyOS_Trunk

<VyOS設定>

set interface ethernet eth0 address 172.20.10.10/24
set interface ethernet eth0 vif 110 address 172.20.20.8/24
set interface ethernet eth0 vir 120 address 172.20.30.2/24

これでPing通ったので完成かな。

【OpenStack】Security GroupのPermit Any

PackStackのMitakaでバグがあってProtocol Anyの設定ができなかったヤツが, Newtonで解消されていた。

Protocol番号で「-1」だったのが「0」に変わっていた。

なんかあったのかな。マイナス判定で処理がめんどくさかったとか,そもそもプロトコル番号は1からだからマイナスなんて使わずに0からでいいじゃん的なサムシングが。

【Splunk】Appの消し方

Google MapのAppをインストールしたけどVersion違いで機能しない。

よって消すがWebUIでは消せないので以下コマンドで削除する。

/opt/splunk/bin/splunk display app # App確認
/opt/splunk/bin/splunk remove app maps # App削除
/opt/splunk/bin/splunk restart # splunk再起動

完了。