【OpenStack】CentOS7でファイルサーバ立てたけどやたらとスループットが悪い

使っていたNASの容量がもうパンパンだったので,大量にDisk詰んだRDOにCentOS7をたててファイルサーバとしてNAS代わりにした。

が,やったらと速度が出ない。
ファイル移行で8Mbps程度しか出ていない。

で,「Neutron 速度がでない」とかでぐぐってみると,大体同じ事象がたくさん出てくる。

NICにトラフィック処理をオフロードしていることが原因のようで。

ここらを参考にGROをOFFにした。

・ Slow network speed between VM and external
・ NICのオフロード機能を無効にする

    $ ethtool -k enp4s0
    Features for enp4s0:
    rx-checksumming: on
    tx-checksumming: off
            tx-checksum-ipv4: off
            tx-checksum-ip-generic: off [fixed]
            tx-checksum-ipv6: off
            tx-checksum-fcoe-crc: off [fixed]
            tx-checksum-sctp: off [fixed]
    scatter-gather: off
            tx-scatter-gather: off
            tx-scatter-gather-fraglist: off [fixed]
    tcp-segmentation-offload: off
            tx-tcp-segmentation: off
            tx-tcp-ecn-segmentation: off [fixed]
            tx-tcp6-segmentation: off
    udp-fragmentation-offload: off [fixed]
    generic-segmentation-offload: off [requested on]
    generic-receive-offload: on
    large-receive-offload: off [fixed]
    rx-vlan-offload: on
    tx-vlan-offload: on
    ntuple-filters: off [fixed]
    receive-hashing: off [fixed]
    highdma: off [fixed]
    rx-vlan-filter: off [fixed]
    vlan-challenged: off [fixed]
    tx-lockless: off [fixed]
    netns-local: off [fixed]
    tx-gso-robust: off [fixed]
    tx-fcoe-segmentation: off [fixed]
    tx-gre-segmentation: off [fixed]
    tx-ipip-segmentation: off [fixed]
    tx-sit-segmentation: off [fixed]
    tx-udp_tnl-segmentation: off [fixed]
    fcoe-mtu: off [fixed]
    tx-nocache-copy: off
    loopback: off [fixed]
    rx-fcs: off
    rx-all: off
    tx-vlan-stag-hw-insert: off [fixed]
    rx-vlan-stag-hw-parse: off [fixed]
    rx-vlan-stag-filter: off [fixed]
    l2-fwd-offload: off [fixed]
    busy-poll: off [fixed]

    $ sudo ethtool -K enp4s0 gro off
    $ ethtool -k enp4s0
    Features for enp4s0:
    rx-checksumming: on
    tx-checksumming: off
            tx-checksum-ipv4: off
            tx-checksum-ip-generic: off [fixed]
            tx-checksum-ipv6: off
            tx-checksum-fcoe-crc: off [fixed]
            tx-checksum-sctp: off [fixed]
    scatter-gather: off
            tx-scatter-gather: off
            tx-scatter-gather-fraglist: off [fixed]
    tcp-segmentation-offload: off
            tx-tcp-segmentation: off
            tx-tcp-ecn-segmentation: off [fixed]
            tx-tcp6-segmentation: off
    udp-fragmentation-offload: off [fixed]
    generic-segmentation-offload: off [requested on]

    generic-receive-offload: off   # OFFになった

    これで転送やりなおしたら200Mbpsくらいまで改善された。100Mbpsでした。
    しかし,これって再起動したらまた戻るんだっけか?

    rcスクリプトとかにethtoolを仕込んでおかないとダメっぽい。

    Turning off GRO on startup
    ・ How to persist ethtool settings through reboot

    # /etc/sysconfig/network-scripts/ifcfg-enp4s0
    ETHTOOL_OPTS=”gro off”

    これでどうかしら。

    【OpenStack】Cinder Volumeのバックアップ

    未だ理解できず。

    • Snapshot ・・・ ボリュームの一時点の状態を保存する。そのままでは使えないので,イメージにアップロードするか,ボリューム化するか。Passiveなやつ。
    • Clone・・・ボリュームの丸コピーをもう1つ作る。cinder create でソースをコピー元。cloneというコマンドは無い。openstack コマンドではどうなっているか知らない。
    • Backup・・・メタデータとかをDBに保存して,空のボリュームにデータをリストアするためのもの。

    あっているのか。この認識。

    インスタンスをボリュームから起動している場合のバックアップをどうしようかなーと考えていたんだが,

    1. オンラインでCinderのSnapshotを取る
    2. そのSnapshotをもとにVolumeを作成
    3. インスタンスのデータがぶっ飛んだら,このVolumeをもとに起動しなおし

    という感じで行けたりしないかな。
    システムにもよるだろうけど,そんな簡単には行かないか。

    vyos登録

    OpenStackのインスタンスにVyos欲しいから登録する。

    1. isoイメージ取得
    公式から取得。

    2. KVM上にインストールしてイメージ変換する方法もあるのだが,自分のレベルではESXのvmdkを変換かけるほうがお手軽そうなので,ESX側でvyosをインストールしてVMを作る。

    3. データストア上にあるvmdkファイルをCentOSへ持って行き(vyos-flat.vmdkとvyos.vmdk2つ)

    qemu-imgコマンドを使う。
    使い方はRedHatのページを参考。

    qemu-img convert -f vmdk -O qcow2 ./vyos.vmdk ./vyos-1.1.7.qcow2
    qemu-img convert -f vmdk -O qcow2 ./vyos.vmdk ./vyos-1.1.7.qcow2  0.79s user 3.79s system 20% cpu 22.574 total
    # ls -lrt
    -rw-r–r–  1 root     root    1073741824  4月 24 18:13 vyos-flat.vmdk
    -rw-r–r–  1 root     root                496  4月 24 18:13 vyos.vmdk

    -rw-r–r–  1 root     root      249102336  4月 24 18:20 vyos-1.1.7.qcow2

    4. OpenStackのホストOS上でイメージ登録

    # glance image-create --name vyos-1.1.7 --visibility public --disk-format qcow2 --progress --file ./vyos.qcow2  --container-format bare
    [=============================>] 100%
    +------------------+--------------------------------------+
    | Property         | Value                                |
    +------------------+--------------------------------------+
    | checksum         | dbeddf1559bd9642241379b2ed835a1b     |
    | container_format | bare                                 |
    | created_at       | 2016-04-24T09:27:45Z                 |
    | disk_format      | qcow2                                |
    | id               | 684a2629-4257-4862-aa7a-cd9312e8047c |
    | min_disk         | 0                                    |
    | min_ram          | 0                                    |
    | name             | vyos-1.1.7                           |
    | owner            | f734caeac646458cb7c8d38ce8ee4522     |
    | protected        | False                                |
    | size             | 249102336                            |
    | status           | active                               |
    | tags             | []                                   |
    | updated_at       | 2016-04-24T09:27:46Z                 |
    | virtual_size     | None                                 |
    | visibility       | public                               |
    +------------------+--------------------------------------+

    5. 終わり。
    試しに起動してみる。
    一応動くには動くが,インタフェースでNG。
    ドライバあたりかな?
    interfaceがadmin downなだけでした。
    FloatingIPを設定して無事Pingもとおるところまで確認できました。

    # set interface ethernet eth2
    # set interface ethernet eth2 address dhcp
    # set service ssh port 22

    これでSSHまでOK。

    —–

    こちらのサイトを参考にさせてもらってKVMでやったほうが順当なのか。

    インスタンスのリサイズができねー

    と,思ったらConfig修正が必要であった。

    参考)
    https://ask.openstack.org/en/question/80600/resize-image-issue/

    編集した後,nova-computeをリスタートしろと。

    自分の場合,computeだけでは反映されなかったので,nova系はひとしきりrestartしたら出来た。

    ■ /etc/nova/nova.conf 編集
    ~以下2行追加~
    allow_resize_to_same_host=True
    allow_migrate_to_same_host = True

    プロセス再起動
    # systemctl restart openstack-nova-api.service
    openstack-nova-cert.service openstack-nova-compute.service
    openstack-nova-conductor.service openstack-nova-consoleauth.service
    openstack-nova-scheduler.service

    プロセスは多分全部やらんでいいんだと思う。
    api, compute, scheduler くらいでいけんじゃないのかなんて勝手に思っています。

    shutdown/reboot失敗

    なんだかshutdown -h now とかrebootとかやるとたまーに落ちなくなる。

    メッセージとしては

    mdadm: Cannot remove ‘/lib/dracut/hooks/shutdown/30-dm-shutdown.sh’: Read-only filesystem or active volume grup?

    というのが出まくって,それはもう “#cat 数Tのファイル”をやった時のような状態に陥って永遠と画面が流れ続ける。

    色々とぐぐってみるのだが,fake raidで/boot領域をマウントしているからだーとか情報が出てくるのだが,イマイチしっくり来ない。

    ただ,こちらのサイトで対処策が出ていたので試しにやってみるとうまくいった。
    バグ情報にもっぽいのが出ているし,きっとそうなのだろう。
    1年近く解消していないのね。

    packstack Liberty 入れなおし

    packstackあまり考えずにインストールするとCinderのボリューム限度が20Gに縛られてしまうので,入れなおした。

    やったことは以下の通り。
    1. Cinder向けにパーティション切って,Volume Groupを「cinder-volumes」という名前で作成
    2. linux Bridge設定(/etc/sysctl.conf 編集 → sysctl -p /etc/sysctl.conf)
    3. いつもの通りPackstackのインストール手順で実施
    4. NetworkManager停止,NW周り編集,再起動
    5. Cinder.conf 修正
    6. デフォルトのNWやらを削除して自分色に変える
    answerfileは自分の環境向けにそこそこしっかり編集しておいたほうがいいということを学びましたとさ。
    HorizonはHTTPS化するの後からでもできるけど,ここでやっておいたほうが簡単。
    ■ answerfile変えた所一覧

    < # CONFIG_SSH_KEY=/root/.ssh/id_rsa.pub
    < CONFIG_DEFAULT_PASSWORD=<適宜>
    < CONFIG_MANILA_INSTALL=y
    < CONFIG_HEAT_INSTALL=y
    < CONFIG_NTP_SERVERS= <適宜>
    < CONFIG_USE_EPEL=y
    < CONFIG_MARIADB_PW=<適宜>
    < CONFIG_KEYSTONE_DB_PW=<適宜>
    < CONFIG_KEYSTONE_ADMIN_TOKEN=<適宜>
    < CONFIG_KEYSTONE_ADMIN_PW=<適宜>
    < CONFIG_KEYSTONE_DEMO_PW=<適宜>
    < CONFIG_GLANCE_DB_PW=<適宜>
    < CONFIG_GLANCE_KS_PW=<適宜>
    < CONFIG_CINDER_DB_PW=<適宜>
    < CONFIG_CINDER_KS_PW=<適宜>
    < CONFIG_CINDER_VOLUMES_CREATE=n
    < CONFIG_MANILA_DB_PW=<適宜>
    < CONFIG_MANILA_KS_PW=<適宜>
    < CONFIG_NOVA_DB_PW=<適宜>
    < CONFIG_NOVA_KS_PW=<適宜>
    < CONFIG_NEUTRON_KS_PW=<適宜>
    < CONFIG_NEUTRON_DB_PW=<適宜>
    < CONFIG_NEUTRON_METADATA_PW=<適宜>
    < CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex
    < CONFIG_HORIZON_SSL=y
    < CONFIG_HORIZON_SECRET_KEY=<適宜>
    < CONFIG_SWIFT_KS_PW=<適宜>
    < CONFIG_SWIFT_STORAGE_SIZE=<適宜>
    < CONFIG_HEAT_DB_PW=<適宜>
    < CONFIG_HEAT_KS_PW=<適宜>
    < CONFIG_HEAT_DOMAIN_PASSWORD=<適宜>
    < CONFIG_CEILOMETER_KS_PW=<適宜>

    < CONFIG_NAGIOS_PW=<適宜>

    Cinderでエラーがでる

    うまくいったと思ったが,インスタンス作成時に「イメージから起動(新しいボリュームを作成)」を選ぶとエラーになる。
    同じくボリュームだけ作成しようとしても「作成中」のステータスから進捗なしとなり使えん。

    なんじゃこりゃ。

    原因わかりやした。

    日本OpenStackユーザ会で質問したら(トピックスに相乗りした),速攻原因解明。
    packstackのアンサーファイルでCinderのオプション指定しないと20Gに制限されるとな。

    んーーーもう一度デプロイしてもいいんだけど,既存のLVMを拡張する方法でなんとかならんもんかしら。

    ———————————————————————————

    うはっ!!!
    パーティション拡張作業ミスってOSぶっ飛んだ・・・orz

    packstack Liberty インストール (続き)

    さて, 続き。

    ネットワークの作成だけど, とりあえず現状をチェック。

    +--------------------------------------+---------+------------------------------------------------------+
    | id | name | subnets |
    +--------------------------------------+---------+------------------------------------------------------+
    | 72973f3f-d8e9-42ec-9124-8cb9cdaf76bb | public | 284bfb53-6317-4659-a63a-80bc6f93eef4 172.24.4.224/28 |
    | 8c962f73-821c-4608-8e1d-4fe58f095ddb | private | 9060eb48-5020-448d-bd0e-ac57bd031e85 10.0.0.0/24 |
    +--------------------------------------+---------+------------------------------------------------------+

    アドレスを修正するのもいいけど, とりあえずまっさらにして位置から作ってみる。

    publicは 192.168.1.0/24
    privateは 172.16.10.0/24

    とする。

    基本はここにならってコマンドをたたいていく。

    ■ ルータ作成
    # neutron router-create Ext-Router

    ■ 外部ネットワーク作成
    # neutron net-create Ext-Net  --router:external --shared   --provider:network_type flat 
      --provider:physical_network enp4s0
    # neutron subnet-create Ext-Net 192.168.1.0/24 --name Ext-Subnet --gateway 192.168.1.1 
     --allocation-pool start=192.168.1.200,end=192.168.1.210 --disable-dhcp
    # neutron router-gateway-set Ext-Router Ext-Net

    ■ 内部ネットワーク作成
    # neutron net-create home-net
    # neutron subnet-create --name home-subnet --gateway 172.16.10.1 
     --dns-nameserver 192.168.1.1 
     --allocation-pool start=172.16.10.100,end=172.16.10.120 home-net 172.16.10.0/24
    # neutron router-interface-add Ext-Router home-subnet

    ひとまず完了。

    ネットワークトポロジの表示が変わったのね・・・。

    前の方がよかったなぁー。ウニョウニョ動くのは面白いんだけど, まとまりが悪い。

    イメージにCentOSとFedoraを登録したけど,テスト用にCirrosも入れとく。
    参考はオフィシャルDoc

    ■ イメージゲッツ

    # wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
    # # glance image-create --name "cirros" 
    > --file cirros-0.3.4-x86_64-disk.img
    > --disk-format qcow2 --container-format bare
    > --visibility public --progress
    [=============================>] 100%
    +------------------+--------------------------------------+
    | Property | Value |
    +------------------+--------------------------------------+
    | checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
    | container_format | bare |
    | created_at | 2016-04-16T07:17:53Z |
    | disk_format | qcow2 |
    | id | 75b3a669-20c4-498a-9685-a80d6acd3c81 |
    | min_disk | 0 |
    | min_ram | 0 |
    | name | cirros |
    | owner | ac31029ab4af4d06a027529077595a4d |
    | protected | False |
    | size | 13287936 |
    | status | active |
    | tags | [] |
    | updated_at | 2016-04-16T07:17:53Z |
    | virtual_size | None |
    | visibility | public |
    +------------------+--------------------------------------+

    登録された

    インスタンス起動
    Floating IP割当
    Security Group設定
    でSSHで接続して接続完了。

    オッケ。

    さて,次はESXのVMをこっちに移すかな。

    と思ったけど, 本当はVLANを複数引き込んでそれぞれに割り当てるFloatingIPを分けたいんだけどさてさて・・・。どないしょ。