Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2012 OSC Kyoto / 2012 OSC Tokyo Fall - OpenStack vps kvm

8,789 views

Published on

2012 OSC Kyoto OpenStack vps kvm
2012 OSC Tokyo Fall OpenStack vps kvm
"OpenStack + kvm = oname.com VPS; backyard talk"

Published in: Technology
  • Be the first to comment

2012 OSC Kyoto / 2012 OSC Tokyo Fall - OpenStack vps kvm

  1. 1. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ OpenStack + KVM = お名前.com VPS ∼開発担当者が語る、ここだけの裏話∼ OSC 2012 Kyoto: 2012/08/03 OpenStack User MTG#07: 2012/08/28 OSC 2012 Tokyo/Fall: 2012/09/08 http://www.slideshare.net/chroum/2012-osc-kyoto-openstack-vps-kvm 112年9月4日火曜日
  2. 2. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ アジェンダ • ◎お名前.com VPSとは ‒ グルーブのほかのサービスと違い、製品の位置づけ的なもの • ◎VPSのシステム構成 – 全体概略、管理系サーバ、コンパネ系、ネットワーク • ◎CentOS 6.x + griddynamics.net版 OpenStack Diablo – なんでこれ選んだの、VPSとして問題点、修正点 • ◎コンパネから見たOpenStack • ◎その他OSSを使っている部分、構築とか監視 • ◎トラブルと運用というDevOps – GlusterFS 3.3beta、noVNC、disk resize、FreeBSD virtio • ◎まとめ、今後の展開とか 212年9月4日火曜日
  3. 3. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ GMOインターネットの仮想化サービス (1) お名前.com VPS VZ (2) GMOアプリクラウド Virtuozzo(OpenVZベース)、 OS仮想化レベル、swap無し、リソースは Best Effort EL6, 自由度、リソースきっちり KVM運用 ノウハウ等 お名前.com VPS KVM Linux KVMでの仮想化 一般ユーザに使っていただけるもの KVM、ソーシャルアプリ、ソーシャ ユーザのリソースはきっちり分かれているVPS ルwebの運用など、アプライアンス 自由にインストールできる仮想環境の提供 のLB(Brocade ADX)がある。イ メージテンプレート展開、専用サーバ (3) お名前.com Windows Desktop のハイブリッド運用、Fusion-IO専 Hyper-V, RDP 用サーバ、その他カスタマイズ構成可 GMOインターネットグループの仮想化サービス GMOクラウド VPS GMOクラウド Public (Xen, KVM) KVM、月額課金、Pleskなど用意 使った分だけ従量制、APIが最近公開されました 312年9月4日火曜日
  4. 4. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎お名前.com VPS KVM こんな機能があったらなぁ (エンジニア、利用者としてほしいことを検討、開 発側としてこんなのnative KVMなら使えるのに) ・ISO uploadでの自由なOSインストール、Live CD boot ・http/https/sshのみで接続が可能 ・コピペ可能なシリアルコンソール ・virtIO ON/OFF ・GMOアプリクラウド実装されているイメージステージング機能(イメージテ ンプレート)ほしいな ・VIFのセキュリティ(spoofing対策とか、IP固定利用とか) ・REST APIほしいな 幾つかはOpenStack Diabloが使えそうだ(当時) 使ってみよか(検証1ヶ月) 412年9月4日火曜日
  5. 5. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎お名前.com VPS KVM だいたいのシステム構成 コンパネ系web (.Net + IIS) Windows Server 商材DB (mysql) 課金とか 管理系サーバ (Linux KVMインスタンス) websocket-VNCクラスタ(noVNC) ssh/consoleサーバ sftpサーバ rabbitmqサーバ dhcpサーバ ldapサーバ(dhcp, ssh) nova/keystone DB(mysql)サーバ nova Manage/APIサーバ ISO upload storage (GlusterFS, NFS) Linux KVM (nova Compute) CentOS 6.x nova Compute, collectd, kvm 512年9月4日火曜日
  6. 6. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ お名前.com VPS KVM ネットワーク Internet コンパネ系 L3 SW L3 SW API / Manage コンパネweb (.Net) サービス系 API / Manage mysql db API 会員/課金 DB API / Manage API/nova Manage nova Compute nova Compute nova Compute nova Compute 管理系 nova Compute nova Compute glance nova Compute nova Compute nova Compute nova Compute sftp console console console sftp console dhcp vnc RAID 10 local disk RAID 10 local disk mq API / Manage mq ldap mysql mq db nova DB Storage keystone DB Storage ISO storage (NFS) 612年9月4日火曜日
  7. 7. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ お名前.com VPS KVM ネットワーク お名前.com VPS VZ(Virtuozzo)のネットワーク構成の反省 ・お客のIN/OUTにアプライアンスFirewallを置いた >> Portを制限していたが、結局80 port, 22 portなどで攻撃される (phpとか...) >> お客の利用状況で配下ネットワークトラブル >> 結局Linux bridge側で帯域制御など設定、アプライアンス意味ない ・mail gateway機能(お客がSPAM認定されにくくする為) >> 全体としてはうまくいったが不評もある >> 運用が大変 自由度を妨げる構成はVPS KVMではやめよう Firewallが必要なら、Linux bridge(ebtables)とかで分散管理すればいい じゃないか 712年9月4日火曜日
  8. 8. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ お名前.com VPS KVM ネットワーク Flat DHCP + VLAN bridge構成 (FirewallとかはLinux bridgeで実現しよう) インターネット側 <=> GMOバックボーンNet(コアルータある) <=> L3 SW(dhcp relay設定) <=> 集線L2 SW <=> Rack L2 SW <=> Linux bonding(act.-stan.) <=> Linux VLAN <=> Linux bridge <=> VM VIF(tap - virtio NIC) 812年9月4日火曜日
  9. 9. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ お名前.com VPS KVM ネットワーク Internet GMO core backbone L3 SW L3 SW L3 SW L2 SW L3 SWにて、dhcp relayでネットワーク の異なるdhcpに接続するように設定 eth0 eth1 console nova Compute dhcp bond0 bridge.VLAN1 libvirt network filter console ldap bridge.VLAN2 ebtalbes bridge.VLAN3 tc htb (iproute) LDAPでユーザのVMのMAC collectd ADDRESSとIPの管理 eth0 VM eth0 eth0 eth0 VM VM VM 912年9月4日火曜日
  10. 10. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎OpenStack griddynamics.net Diablo CentOS6版 CentOS 6.xで動くようにpython系の部分をpython 2.6でback port libvirtの部分はCentOSのパッケージをリプレース http://yum.griddynamics.net/yum/diablo-centos/ その結果=> ・パッケージングされているんだけどね、動かないよこれ(当時) ・当初は src.rpm が無いので、githubからソースと.specを落とす必 要があった ・頻繁に更新されているので、とくにstableとかは無いらしいかった ・突然パッケージ構成が変わったりとか ・CentOS 6.3とかではOSのlibvirtのほうが新しいことに つい先日、diablo-centosリポジトリは衰退して無くなりました (まぁ、今後はEPEL(6)版 OpenStackに移行していくんだろうなぁ) 1012年9月4日火曜日
  11. 11. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ OpenStack griddynamics.net Diablo CentOS6版 別に公開しているけど、あなたのために公開しているん じゃないんだからねw 的な感じで、VPSチーム API開発者から 「ちゃんと動く環境をくれよ(# ゚Д゚)」 と言われまくるインフラ側エンジニア => でもこれを選択してしまった当時の我々 (CentOS 6.xを選択したからね) 1112年9月4日火曜日
  12. 12. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ OpenStack griddynamics.net Diablo CentOS6版 検証開始) まず、griddynamics版を動かすことから dashboardって使えそうだよね まずはシングルノード構成で動かしてみる > なんとか動いた glanceにVMを追加して、VMインスタンスを作成、起動 1212年9月4日火曜日
  13. 13. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ クラウドOSとVPSの思想の違いに... 検証) VM停止「Terminate」 : あれ... なんか強制停止(virsh destroy 相当)、削除... >> ACPIを使ったゆとりshutdownじゃないw ソースをあさり始める一同w python-nova-*.rpm パッケージ /usr/lib/python2.6/site-packages/nova/compute/ /usr/lib/python2.6/site-packages/nova/virt/ 以下とか... 1312年9月4日火曜日
  14. 14. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ shutoff(1) libvirtまわりの使い方 (nova/virt/driver.pyは泣けるw) ・停止ってクラウドだと課金に関係したりするからすぐ止まれってなってい るのかな(destroy call) (Essexでも同じだが、reboot(SOFT)ある) ・いわゆる「Terminate:停止」は「電源OFF + 削除」でした ・でもこれだとVPSでは使えないので、vmのACPIを使った正常 shutdownを試みるcall shutoff を追加 diff -uNr ../usr/lib/python2.6/site-packages/nova/virt/libvirt/connection.py ./virt/libvirt/connection.py --- ../usr/lib/python2.6/site-packages/nova/virt/libvirt/connection.py 2012-07-31 12:01:28.890335240 +0900 +++ ./virt/libvirt/connection.py 2012-07-31 10:15:55.186268025 +0900 @@ -1901,3 +1953,63 @@ def set_host_enabled(self, host, enabled): """Sets the specified hosts ability to accept new instances.""" pass + + + def shutoff(self, instance, network_info, flag): # GMO + instance_name = instance[name] + + try: + virt_dom = self._lookup_by_name(instance_name) + except exception.NotFound: + virt_dom = None 1412年9月4日火曜日
  15. 15. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ shutoff(2) + + # If the instance is already terminated, were still happy + # Otherwise, destroy it + if virt_dom is not None: + try: + virt_dom.shutdown() + except libvirt.libvirtError as e: + is_okay = False + errcode = e.get_error_code() + if errcode == libvirt.VIR_ERR_OPERATION_INVALID: + # If the instance if already shut off, we get this: + # Code=55 Error=Requested operation is not valid: + # domain is not running + (state, _max_mem, _mem, _cpus, _t) = virt_dom.info() + if state == power_state.SHUTOFF: + is_okay = True + + if not is_okay: + LOG.warning(_("Error from libvirt during shutdown of " + "%(instance_name)s. Code=%(errcode)s " + "Error=%(e)s") % + locals()) + raise + + 1512年9月4日火曜日
  16. 16. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ shutoff(3) + """Called at an interval until the VM is gone.""" + timeout_count = range(FLAGS.shutoff_retry_count) + while timeout_count: # Y.Kawada + try: + state = self.get_info(instance_name)[state] + except exception.NotFound: + msg = _("During shutoff, %s disappeared.") % instance_name + LOG.info(msg) + break + if state == power_state.SHUTOFF: + msg = _("Instance %s shutoff successfully. stat:%s") % (instance_name, state) + LOG.info(msg) + break + + timeout_count.pop() + utils.my_logger(waiting... shutoff pw_state: %s % state) + if len(timeout_count) == 0: + utils.my_logger("Error shutoff: %s time over, try to destroy." % instance_name) + + """ try to destroy.""" + msg = _("try destroy. :%s") % (instance_name) + LOG.info(msg) + self.destroy(instance, network_info, cleanup=False) + break + time.sleep(1) + + return True 1612年9月4日火曜日
  17. 17. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ 検証) dashboard : vnc(noVNC) 最初なんか動かない >> noVNC周りをEssexのソースからバックポート(python周り) >> noVNC自体は最新の開発系からバックポート (javascript周り) 本来 noVNC は単体でも使えます (html5 Canvas + WebSocketによるvnc(rfb)実装) OpenStackにはauth系のコードが追加されています http://www.moongift.jp/2011/02/20110219-2/ https://github.com/kanaka/noVNC http://novnc.com/ python-nova-*.rpm パッケージ /usr/lib/python2.6/site-packages/nova/vnc/ 以下... みなさんは Essex以降 を使いましょう (EssexではnoVNCとxvpの実装があるようだ) 1712年9月4日火曜日
  18. 18. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ noVNC あとのコンパネのところで... 1812年9月4日火曜日
  19. 19. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ クラウドOSとVPSの思想の違いに... というように、一つ一つAPI単位で検証とか動作確認を行なっていった と、同時にDiablo(当時), Essex(現在)からどんどん分岐(泣) 追加とか変更とか、例えば ・computeホスト毎のvmインスタンスlimit なんか、Diablo標準ではテナントごとにしかlimitが無い 標準だけだと、host上には無茶なくらい作られるよ(limitはある) vcpu, memoryで上限設定 (Essexではいろいろ実装されている) ・try: except: 処理のロギングとか地道な回避ロジックとか入れたほうがいいんじゃな かろうかね ・VIF(VMのattachするインターフェース)の名称を変更 VMインスタンス名とそのVIF名がわかりやすいほうが都合が良い インスタンスIDでどのvm インスタンスか判別できるように 1912年9月4日火曜日
  20. 20. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ try: except: 修正とか) ログとらないと、API使ったコンパネ開発しづらいので色々やってい るうちにちゃんと except で catch しようねっと diff -uNr ../usr/lib/python2.6/site-packages/nova/vnc/auth.py ./vnc/auth.py --- ../usr/lib/python2.6/site-packages/nova/vnc/auth.py 2012-07-31 12:01:28.900514682 +0900 +++ ./vnc/auth.py 2012-07-31 10:15:55.190267491 +0900 @@ -52,7 +52,12 @@ if not token: referrer = req.environ.get(HTTP_REFERER) - auth_params = urlparse.parse_qs(urlparse.urlparse(referrer).query) + try: + auth_params = urlparse.parse_qs(urlparse.urlparse(referrer).query) + except: + LOG.audit(_("Unauthorized Access: (%s)"), req.environ) + return webob.exc.HTTPForbidden(detail=Unauthorized) + if token in auth_params: token = auth_params[token][0] 2012年9月4日火曜日
  21. 21. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ VIF名称変更 VPSは運用性が命 例) vmインスタンスが下記の命名則 ( iu1 + - + インスタンスID) iu1-000001c8 ・インスタンスID(16進数)に頭にvnをつける ・eth0, eth1 ... と増えた時の為 >> suffix -0 , -1 ... vn000001c8-0 (tap) >> eth0 (VM内) コンパネのための帯域計測(collectd)、 トラブルシュートをやりやすくする為、 あとは帯域制限(tc)とかebtablesとかわかりやすい 2112年9月4日火曜日
  22. 22. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ VIF名称変更 修正とか) diff -uNr ../usr/lib/python2.6/site-packages/nova/virt/libvirt/vif.py ./virt/libvirt/vif.py --- ../usr/lib/python2.6/site-packages/nova/virt/libvirt/vif.py 2012-07-31 12:01:28.890335240 +0900 +++ ./virt/libvirt/vif.py 2012-07-31 10:15:55.186268025 +0900 @@ -38,7 +38,7 @@ class LibvirtBridgeDriver(VIFDriver): """VIF driver for Linux bridge.""" - def _get_configurations(self, network, mapping): + def _get_configurations(self, network, mapping, instance): """Get a dictionary of VIF configurations for bridge type.""" # Assume that the gateway also acts as the dhcp server. gateway6 = mapping.get(gateway6) @@ -59,6 +59,7 @@ extra_params = "n" result = { + name: instance[name].split(-)[1], # Y.Kawada id: mac_id, bridge_name: network[bridge], mac_address: mapping[mac], @@ -90,7 +91,7 @@ network[bridge], network[bridge_interface]) - return self._get_configurations(network, mapping) + return self._get_configurations(network, mapping, instance) def unplug(self, instance, network, mapping): """No manual unplugging required.""" 2212年9月4日火曜日
  23. 23. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎コンパネから見たOpenStack: 電源ボタン 起動, 再起動, シャットダウン, 電源OFF ボタン >> 先ほどの shutoff callの追加を反映 >> 再起動は shutoff > start の順番にAPI call (libvirtにある reboot はkvmでは未実装らしいので) 2312年9月4日火曜日
  24. 24. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ Internet お名前.com VPS : APIの経路 コンパネ系 L3 SW L3 SW API / Manage コンパネweb (.Net) API / Manage mysql db API 会員/課金 DB API / Manage API/nova Managea Computeova Compute 管理系 nova Compute glance nova Compute nova Compute sftp console console console sftp console dhcp vnc RAID 10 local disk mq API / Manage mq ldap mysql mq db nova DB 24 12年9月4日火曜日 Storage keystone DB
  25. 25. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎コンパネから見たOpenStack: html5 vnc (1) OpenStack dashboardのvnc実装を参考にnoVNCをコンパネに搭載 >> Topページに実装することは使いやすさを考えて >>「クリックして開始」のajax実装でコンパネからのAPIコールを減らすw 2512年9月4日火曜日
  26. 26. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ html5 vnc (2) 右クリックしてソースを見ればわかりますが、noVNC websocket、Canvas対応 web browser必須 (IE8以下は Chrome Frame) 2612年9月4日火曜日
  27. 27. 会員/課金 DB OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ API / Manage API/nova Manag html5 vnc (3) 管理系 g sftp console console console sftp console dhcp vnck mq API / Manage mq ldap mysql mq db nova DBe keystone DBgee 27 12年9月4日火曜日
  28. 28. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ html5 vnc (3): 構成とか nginxによるwebsocketのreverse proxy + dnsラウンドロビン nginx websocket reverse proxy patch (nginx 1.3で取り込まれなかった) https://github.com/yaoweibin/nginx_tcp_proxy_module これにより、 ・本来のPort 6080で待ち受けるvncproxyのPort 80/443対応 ・将来的な負荷分散構成 にしている [n-gohko@vnc1001 ~]$ ps axu | grep nova | grep -v grep root 15509 0.4 2.0 451048 81164 ? S Jul11 152:13 /usr/bin/python /usr/bin/nova-vncproxy --flagfile=/etc/nova/ nova.conf --logfile=/var/log/nova/nova-vncproxy.log --pidfile=/var/run/nova/nova-vncproxy.pid [n-gohko@vnc1001 ~]$ ps axu | grep nginx | grep -v grep root 1303 0.0 0.0 93188 1492 ? Ss Jun26 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 1304 0.1 0.0 94100 3472 ? S Jun26 54:44 nginx: worker process 2812年9月4日火曜日
  29. 29. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ html5 vnc (3): 構成とか nginx websocket reverse proxyこんな感じ tcp { proxy_read_timeout 6000; proxy_send_timeout 6000; upstream websockets { server 172.20.113.31:6080; #check interval=3000 rise=2 fall=5 timeout=1000; check_http_send "GET / HTTP/1.0rnrn"; } server { #listen 6081; server_name _; listen 443; access_log /var/log/nginx/access.ssl.log; ssl on; ssl_certificate /etc/nginx/ssl/ast.myvps.jp/ast.myvps.jp.pem; ssl_certificate_key /etc/nginx/ssl/ast.myvps.jp/ast.myvps.jp.key; ssl_protocols SSLv3 TLSv1; ssl_ciphers HIGH:!ADH:!MD5; tcp_nodelay on; proxy_pass websockets; } } 2912年9月4日火曜日
  30. 30. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ リソースグラフ: collectd collectd-virtというパッケ ージがEPEL6にある collectd-virt collectd-rrdtool の組み合わせ(rrdでデータ保 存) libvirt環境のリソースデ ータ取得機能 nova-computeで稼働。そ のままvmのリソースデータ をrrdで取得してくれるの で、便利 あとは、コンパネでrrdをグ ラフにするだけです 3012年9月4日火曜日
  31. 31. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ リソースグラフ: collectd 以下のようにパッケージ入っています (rrdとかmysqlとか、csvとかへのデータ取得が便利なので、 いろいろ使えます) [root@cnode-a1001 novaclient]# rpm -qa | grep collectd collectd-4.10.3-1.el6.x86_64 collectd-web-4.10.3-1.el6.x86_64 collectd-rrdtool-4.10.3-1.el6.x86_64 collectd-virt-4.10.3-1.el6.x86_64 3112年9月4日火曜日
  32. 32. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ html5 serial console: anyterm + conserver nova-console(ajax-term)の部分をanytermに置換 (OpenStack Diabloにあったajax-termは動かなかった) http://anyterm.org/ anyterm単体では、webで接続した後に任意のコマンドを実行させる機能が あるので、そのあたりを利用 (anyterm --> consoleコマンド実行) (OpenStack Essexでは ajax-term機能は削除されています) 動かないので、別実装することに Point ・pop-upした時のURL ・ [Enter `^Ec? for help] ・iu1-000007ff 3212年9月4日火曜日
  33. 33. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ html5 serial console: anyterm こんなかんじで token を渡して接続開始 https://console1001.myvps.jp/anyterm/proxy/11048/ anyterm.html?token=bb268280-8e4e-41c1-894f- ac325079530f&title=iu1-000007ff nova-consoleをhttpd apacheの reverse proxy配下で動かしています (Port 80/443対応、負荷分散対応) [root@console1001 ~]# ps -aef | grep httpd | grep -v grep root 1523 1 0 Jul09 ? 00:00:38 /usr/sbin/httpd apache 3385 1523 0 Jul29 ? 00:00:04 /usr/sbin/httpd apache 3386 1523 0 Jul29 ? 00:00:04 /usr/sbin/httpd apache 3387 1523 0 Jul29 ? 00:00:04 /usr/sbin/httpd apache 23084 1523 0 Jul31 ? 00:00:03 /usr/sbin/httpd apache 26971 1523 0 Aug01 ? 00:00:02 /usr/sbin/httpd [root@console1001 ~]# netstat -antp | grep python tcp 0 0 172.20.113.36:33841 172.20.113.54:3306 ESTABLISHED 2712/python tcp 0 0 172.20.113.36:44081 172.20.113.32:5672 ESTABLISHED 2712/python tcp 0 0 172.20.113.36:44084 172.20.113.32:5672 ESTABLISHED 2712/python 3312年9月4日火曜日
  34. 34. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ssh serial console: ldap ssh + conserver ssh serial consoleとして利用 ssh loginのshellとして、consoleに接続するコマンドを実行 sshでのvmコントロールメニューとかも実装できる anytermとssh serial consoleに [Enter `^Ec? for help] と表示されるのはその名残 具体的には、conserverに virsh console <vm instance> を叩かせています 3412年9月4日火曜日
  35. 35. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ISO upload: ldap ssh(sftp) chroot + NFS ldap sshのconsoleの副産物としてsftp uploadを使えることに (openssh 5.4p1にpatchあて) NFS storage上にユーザをchrootしています (NFS chrootはパッチがいる) >> proftpdにもmod_sftp機能があるのでそれに移行検討中 一週間で削除するのは、quotaの実装の問題 3512年9月4日火曜日
  36. 36. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ISO upload: ldap ssh(sftp) chroot + NFS 当初NFS serverをGlusterFSで構築していました スケールするはずだった (〃 ̄∇ ̄)ノ彡☆ウキャキャキャッ ただ、使っていたバージョンが GlusterFS 3.3beta (だいぶリリース前) brickトラブル多発、見えたり見えなかったり... GlusterFS quota機能 フォルダにquotaをかけられる一見便利な機能だった >> quota checkにGlusterFS全体をlockする動作があることがわかる quotaを捨てて、一週間でISOを削除する方向にリリース後転換 さらに上記の「見えたり見えなかったり」問い合わせでGlusterFSも... ここはリベンジします(GlusterFS 3.3 正式版は基本、安定しています) 3612年9月4日火曜日
  37. 37. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎その他OSSを使っている部分、構築、運用、監視 監視: OS側 Nagios 3.3.1 (EPEL6版) Hardware側 IBM Director + HP SIM (Freeだけどnot OSS) HPのサーバ監視は使っているサーバがg7世代だとOSにagent必要 (これがトラブルのもとだったりもする) HPはgen8に期待∩゚∀゚∩age 構築: cobbler (kickstart network install) (EPEL6版) cobblerに各hostを登録することで、dhcp, dns, Nagiosの設定の生成 cobblerのtriggerで実行 (残念ながらIBM Director, HP SIMへの登録は手動) 3712年9月4日火曜日
  38. 38. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ cobbler triggerでnagios設定 [n-gohko@v2cob1001 libvirt]$ find /var/lib/cobbler/triggers/ /var/lib/cobbler/triggers/ /var/lib/cobbler/triggers/sync /var/lib/cobbler/triggers/sync/post /var/lib/cobbler/triggers/sync/post/201-post-chmod-644-tftpboot-kick.sh /var/lib/cobbler/triggers/sync/post/nagios-add-hosts.sh /var/lib/cobbler/triggers/sync/post/301-post-chmod-644-tftpboot-kick.sh /var/lib/cobbler/triggers/sync/pre /var/lib/cobbler/triggers/delete /var/lib/cobbler/triggers/delete/file /var/lib/cobbler/triggers/delete/file/post /var/lib/cobbler/triggers/delete/file/pre /var/lib/cobbler/triggers/delete/distro /var/lib/cobbler/triggers/delete/distro/post /var/lib/cobbler/triggers/delete/distro/pre /var/lib/cobbler/triggers/delete/mgmtclass /var/lib/cobbler/triggers/delete/mgmtclass/post /var/lib/cobbler/triggers/delete/mgmtclass/pre /var/lib/cobbler/triggers/delete/package /var/lib/cobbler/triggers/delete/package/post /var/lib/cobbler/triggers/delete/package/pre /var/lib/cobbler/triggers/delete/system /var/lib/cobbler/triggers/delete/system/post /var/lib/cobbler/triggers/delete/system/pre /var/lib/cobbler/triggers/delete/profile 以下略 ... 3812年9月4日火曜日
  39. 39. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎トラブルと運用というDevOps: 1) GlusterFS 3.3beta 下記のgluser.orgのドキュメントをみて歓喜した日々よ、さようなら >> ストレージをサービスするにはいつか乗り越えるまで取り下げる >> 正確に容量を取得するために全体にロックかけるのはわからないでもない けど、ちょっと困った実装(泣) 3912年9月4日火曜日
  40. 40. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ トラブルと運用というDevOps: 2) virt resize disk imageのリサイズ機能のリリース ・20GB + 拡張diskという当初の仕様は >> GlanceのOSイメージ(標準CentOS 6.2)の扱いを楽にするため >> GMOアプリクラウドのステージング機能から由来 ・ 意外と不評 (泣) >> アプリクラウドがLVMでくっつけるのが標準だったので考えが甘かっ た diskのサイズ変更(10%単位)ができるように ・拡張はimageにresizeをかける、fsckかければOSも何とか ・縮小側はOS側でちょっと困ったことに >> 縮小側imageは新規作成する仕様に 4012年9月4日火曜日
  41. 41. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ トラブルと運用というDevOps: 3) vnc Google chrome dev 20.xでコンパネを開いてみた あれ、noVNC動かない((((;゚Д゚))))ガクガクブルブル noVNCを更に新しいものに追従してupdate chrome 20.xがリリースされるまでになんとか修正 ブラウザの進化とともに、noVNC(html5)周りは常に注意が必要 4112年9月4日火曜日
  42. 42. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ DEMO: DNSを使ったname base冗長構成 DNSにsub domain とそのNSレコードを作る Internet sub domain NSでは、それ MacBook-Air:$ dig ns d.myvps.jp ぞれwwwを名乗らせる ;d.myvps.jp. IN NS MacBook-Air:$ dig www.d.myvps.jp @d-ns01.myvps.jp ;; ANSWER SECTION: ;; QUESTION SECTION: d.myvps.jp. 5 IN NS d-ns01.myvps.jp. ;www.d.myvps.jp. IN A d.myvps.jp. 5 IN NS d-ns02.myvps.jp. ;; ANSWER SECTION: www.d.myvps.jp. 5 IN A 157.7.129.212 ;; ADDITIONAL SECTION: d-ns01.myvps.jp. 86400 IN A 157.7.129.212 MacBook-Air:$ dig www.d.myvps.jp @d-ns02.myvps.jp d-ns02.myvps.jp. 86400 IN A 157.7.129.213 ;; QUESTION SECTION: ;www.d.myvps.jp. IN A DNS ;; ANSWER SECTION: www.d.myvps.jp. 5 IN A 157.7.129.213 DNS + DNS + web server web server L7(reverse proxy) L7(reverse proxy) d-ns01. d-ns02. w01. w02. 157.7.129.212 157.7.129.213 157.7.129.214 157.7.129.215 reverse proxyでw01, w02 を追加 4212年9月4日火曜日
  43. 43. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎まとめと今後の展開とか(1) ・とりあえず、200 > compute nodeのDiablo環境を運用中 ・OpenStack DiabloにかぎらずVPSへの適用にはちょっと手を入れる必要 がありそう ・OpenStack Hypervisor Driverまわりは実はまだまだやるべきことが たくさん残っているね(Essex以降でも) ・VPSなので、ネットワークはsimpleで構築しました (なので、セキュリティは各自、お願いm(。_。;))m ペコペコ… ) ・追加IPの要望(冗長、Floting IP)、IPv6などは今後の課題 >> さきほども、ブースで要望うけました >> vipとして追加IPを割り振るのか、追加NICとして割り振るのか 4312年9月4日火曜日
  44. 44. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎まとめと今後の展開とか(2) http://b.hatena.ne.jp/articles/201206/9110 4412年9月4日火曜日
  45. 45. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎まとめと今後の展開とか(2) はてな さんの要望もごもっとも。検討中 vncの機能周りはとくに 4512年9月4日火曜日
  46. 46. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ◎まとめと今後の展開とか(3) ・qemu-img convert周りの機能とかと、ストレージのリベンジで新しい機 能とか ・CentOS 6.3, Essexに移行するのか? 2nd Unit (OpenStackがversion upした時に、Hosting業者はどうすべきか) ・最近はCentOS 6.x + EPEL Essexを使い始めました(検証とか別案件) ・APIをモジュールとして追加できれば ==> VPS Stack 的な使い方 ・インスタンス追加アルゴリズムもモジュール(ドライバ)だと良い (LBのラウンドロビン、リーストコネクトなどと同様ユーザが選択) ・どんなコミニュティへの提案・貢献したらいいんだろう 4612年9月4日火曜日
  47. 47. OpenStack  +  KVM  =  お名前.com  VPS    〜~開発担当者が語る、ここだけの裏裏話〜~ ご清聴ありがとうございました Special Thanks! GMO Internet Inc., System Div., SI Team and Cloud Team 途中まで準備していただいた Yamada san 4712年9月4日火曜日

×