[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
次のような感じで失敗した。
$ sudo apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done You might want to run 'apt-get -f install' to correct these. The following packages have unmet dependencies: linux-image-extra-3.13.0-91-generic : Depends: linux-image-3.13.0-91-generic but it is not installed linux-image-generic : Depends: linux-image-3.13.0-91-generic but it is not installed E: Unmet dependencies. Try using -f.
linux-image-extra-3.13.0-91-generic : Depends: linux-image-3.13.0-91-generic but it is not installed linux-image-generic : Depends: linux-image-3.13.0-91-generic but it is not installed
以上のあたりが原因っぽい。kernel だよね、と思い /boot の状況を見た。
$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 4076768 4 4076764 1% /dev tmpfs 817604 596 817008 1% /run /dev/mapper/openstack--controller--vg-root 279193624 103755156 161233132 40% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 4088008 0 4088008 0% /run/shm none 102400 0 102400 0% /run/user /dev/sda1 240972 240799 0 100% /boot
Oh...使ってないカーネルを調べて apt-get remove すれば解決するかな。このとき使っていたのは linux-image-3.13.0-88-generic だったのでそれ以外を消せばよい。
apt-get remove linux-image-3.13.0-24-generic を試みるも、upgrade を試みたときと同じエラーが出て失敗。 /boot に全く余裕がないとこうなるのか?!
以下のコマンドを実行したら無事、使ってない Kernel を消せた。その後、 apt-get upgrade も成功した。
$ aptitude purge linux-image-3.13.0-24-generic
$ apt-get autoclean
なお、他の使ってないカーネルも一緒にまとめて消してくれるらしい。ありがたい話だ。
新しくサーバが届いたのでコンピュートノードを増やそうとした。インストールを行った結果、nova-computeを nova-conductor に認識してもらえなかった。
他に確認したこととしては
neutron-plugin-linuxbridge-agentは認識してもらえているnova-compute 自体は起動している。service nova-compute status で確認済WARNING nova.virt.libvirt.driver [req-a8aad900-321c-491a-a61e-986fd2040227 - - - - -] Cannot update service status on host "myNewComputeNode" since it is not registered.
読みやすくするために若干成型済み
ERROR oslo_db.sqlalchemy.exc_filters [req-2e3cdcf7-f518-49c3-b15f-4ca8ac47d271 - - - - -]
DBAPIError exception wrapped from (pymysql.err.InternalError)
(1241, u'Operand should contain 1 column(s)')
[SQL: u'SELECT migrations.created_at AS migrations_created_at,
migrations.updated_at AS migrations_updated_at,
migrations.deleted_at AS migrations_deleted_at,
migrations.deleted AS migrations_deleted, migrations.id AS migrations_id,
migrations.source_compute AS migrations_source_compute,
migrations.dest_compute AS migrations_dest_compute,
migrations.source_node AS migrations_source_node,
migrations.dest_node AS migrations_dest_node,
migrations.dest_host AS migrations_dest_host,
migrations.old_instance_type_id AS migrations_old_instance_type_id,
migrations.new_instance_type_id AS migrations_new_instance_type_id,
migrations.instance_uuid AS migrations_instance_uuid,
migrations.status AS migrations_status,
migrations.migration_type AS migrations_migration_type,
migrations.hidden AS migrations_hidden
FROM migrations
WHERE migrations.deleted = %s AND migrations.status = %s AND migrations.source_compute = %s AND migrations.migration_type = %s']
[parameters: (0, [u'accepted', u'done'], u'myNewComputeNode', u'evacuation')]
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
context)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
cursor.execute(statement, parameters)
File "/usr/lib/python2.7/dist-packages/pymysql/cursors.py", line 132, in execute
result = self._query(query)
File "/usr/lib/python2.7/dist-packages/pymysql/cursors.py", line 271, in _query
conn.query(q)
File "/usr/lib/python2.7/dist-packages/pymysql/connections.py", line 726, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/usr/lib/python2.7/dist-packages/pymysql/connections.py", line 861, in _read_query_result
result.read()
File "/usr/lib/python2.7/dist-packages/pymysql/connections.py", line 1064, in read
first_packet = self.connection._read_packet()
File "/usr/lib/python2.7/dist-packages/pymysql/connections.py", line 826, in _read_packet
packet.check_error()
File "/usr/lib/python2.7/dist-packages/pymysql/connections.py", line 370, in check_error
raise_mysql_exception(self._data)
File "/usr/lib/python2.7/dist-packages/pymysql/err.py", line 116, in raise_mysql_exception
_check_mysql_exception(errinfo)
File "/usr/lib/python2.7/dist-packages/pymysql/err.py", line 112, in _check_mysql_exception
raise InternalError(errno, errorvalue)
InternalError: (1241, u'Operand should contain 1 column(s)')
compute node down, db error - Ask OpenStack: Q&A Site for OpenStack Users and Developers でこの話を扱っていた。次のようにある。
I ended up fixing it, my versions were incorrect. I had installed 2:12.03 on the new compute node, and have 2:12.01 versions on my controller node. By upgrading my controller, and existing nodes, it solved my issues.
すなわち、直せた。バージョンの食い違いが原因。新しいコンピュートノードは 2:12.03 だったけど、コントローラノード (つまり nova-conductor とか) は2:12.01 だった。コントローラを更新したら解決したよとのこと。実際、試したら (apt-get upgrade したら) 解決した。なお、古いコンピュートノードは更新せずとも問題なく動いた模様。
でも、末尾番号ってパッチバージョンよね……? そこは変わっても動いてくれてもいいと思ったひよこでした。
OpenStack はいくつかのモジュール (サービスと呼ばれる) が互いに通信をしあって何かをやっていく、という作りになっている。Keystone ももちろん例外ではない。というよりは、そのような作りの中心に Keystone があると言える。
Keystone は認証・認可を OpenStack において担うが、設定によって Keystone 以外の認証認可モジュールを使うこともできる。 Keystone 以外に何を採用するのかはちょっと疑問だが……
Keystone は認証・認可の機能を他のモジュールから使われるわけである。そこでひよこは思った。OpenStack と全然関係ないアプリを作る時に Keystone を使えば認証認可作らなくていいんじゃね?
OpenStack のユーザをまとめて追加したり、権限を付与/剥奪するアプリを書いた。OpenStack のために作られた Horizon というウェブコンソールを追加するモジュールは既存なのだが、こいつの権限管理機能が私にはちょっと使いにくかったのである。
Keystone は Web API を提供している。それをたたくだけで簡単に機能を使えるので実装そのものは簡単だった。手元に勝手にアクセスしてもよい Keystone があればぜひ curl で試してみてほしい所。
VPN は名前の通り仮想専用線。
普通、二つの拠点間で通信を行う場合、インターネットを使う。しかし、それだと盗聴される可能性がある。暗号化すればよい、ということになるが暗号化の単位は一般にアプリケーション毎であって、面倒である。
アメリカ拠点と日本拠点をつなぐ線を引きたいから引くってどれだけお金があればできるんですか……
以下のどちらか
Internet Protocol VPN の略。でも、インターネットは使わない。
契約している通信事業者が持っているネットワークだけで通信を行う。
インターネットに出ないため、しらない第三者に盗聴される可能性は低い。
だが、同じ通信事業者と契約している他の人と同じネットワークを情報が通る。これは大丈夫なのか。MPLS という技術がこれをなんとかしてくれている。
MPLS (Multi-Protocol Label Switching) は MPLS に対応できるルータ (LSR と呼ばれる) がある前提で動く。高速通信のための手段である。MPLS で通信を行う場合、通常のパケットに MPLS 用のラベルという情報が足される。このラベルを見ると LSR は「次はあっちのルータね」と分かる。普通のルータの場合は宛先 IP アドレスからどのルータに飛ばすかその場で考える。 MPLS の場合は転送経路が完全に固定され、転送時に再計算されることはないので速い。……というだけでは安全性は担保されないように見える。
IP VPN ではその上にさらに VRF (Virtual Routing and Forwarding) という技術を使う。一つのルータの上で仮想的なルータを複数動かす技術である。これを前提とし、各通信がどの VRF を使うのかを指定する情報を MPLS のラベルにさらに加える。そのため、論理的ネットワークは利用者ごとに分割されてしまう。他人の流した情報は見られない。
正直後者の方がまだ理解が不十分なので加筆するかも。
息子は車にのるとすぐに寝ていた頃があった。しかし、この1か月くらい車に乗っていても泣くことがしばしば。拘束がお嫌いになったからなのだろうかしら。
父の友人は子が寝ない時はドライブに連れて行ったらしい。うちの子もそれがいけたらなぁ、と思うが車から降ろした時に絶対起きますがな……