【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”

    これでどうかしら。

    NAT除外設定

    Cisco IOSでNAT設定を入れている時に,特定のセグメントへの通信のみNATさせずに実アドレスで通信させる設定のメモ。

    単純にaccess-listのPermitの前段に除外したいACLを入れてあげればよいかと思いきや,うまくいかない。
    どうしたらいいかというと,Route-Mapを使う。

    ! ACL設定

    ip access-list extended No_NAT
    deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
    permit ip 192.168.1.0 0.0.0.255 any

    ! Route-Map設定
    route-map RM_NAT permit 10

    match ip address No_NAT

    ! NAT設定
    ip nat inside source route-map RM_NAT pool VLAN1

    メモ) AristaのvEOSをESX6で動かすとき

    vmdkファイルをthickへ変換しないとESX6では動かない模様。

    参考)Tip for Arista vEOS on VMware ESX 6

    ESXへログインして以下コマンドでvmdkファイルをthinからthickへ変更する。

    #  vmkfstools -i ./vEOS-lab-4.16.6M-s001.vmdk -d eagerzeroedthick
    ./vEOS-lab-4.16.6M-s001-thick.vmdk

    で,あとはこのディスクをアタッチしてisoからbootすれば無事に起動。

    完全にCiscoライクね

    2020年

    なんだかんだ,こういうものを描けるのってすごいよね。
    見ていてわくわくするわ。


    ただ,インフラエンジニアとしてこの辺どう絡むのかサッパリだ。

    要件定義書とか設計書を未だにエクセルでゴリゴリ書いているのを見るとゲンナリするから,こんなデバイスでニュイーンニュイーンて欲しい機能を集めると勝手に要件定義書ができるって仕組みできるとイイナ。

    そう考えるとやっぱある程度コードできんとダメなんだな。未だに全然だけど。

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

    未だ理解できず。

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

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

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

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

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

    ESXアップデートメモ

    UPDATE2にしようしようと忘れていた。

    ので,ちゃっちゃとやった。
    参考)ESXi 5.x/6.x ホストにコマンド ラインからパッチをインストールする (2092895)
    my vmwareからパッチをDL。

    ESXへSSHで接続。
    チャレンジレスポンスでやらんと認証うまくいかない。

    ・現状チェック
    esxcli system version get
       Product: VMware ESXi
       Version: 6.0.0
       Build: Releasebuild-2494585
       Update: 0
       Patch: 0

    ・profile確認
    # esxcli software profile get
    ESXi-6.0.0-2494585-standard
       Name: ESXi-6.0.0-2494585-standard
       Vendor: VMware, Inc.
       Creation Time: 2015-05-13T15:47:49
       Modification Time: 2015-05-13T15:49:08
       Stateless Ready: True

       Description:

    ・メンテナンスモード移行
    vim-cmd hostsvc/maintenance_mode_enter

    ・パッチ中身確認
    # software sources profile list
    -d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
    Name                              Vendor        Acceptance Level
    ——————————–  ————  —————-
    ESXi-6.0.0-20160301001s-no-tools  VMware, Inc.  PartnerSupported
    ESXi-6.0.0-20160302001-standard   VMware, Inc.  PartnerSupported
    ESXi-6.0.0-20160301001s-standard  VMware, Inc.  PartnerSupported
    ESXi-6.0.0-20160302001-no-tools   VMware, Inc.  PartnerSupported

    ・テスト
     esxcli software profile update –dry-run
    -d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
    -p ESXi-6.0.0-20160302001-standard

    ・Go!
     esxcli software profile update
    -d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
    -p ESXi-6.0.0-20160302001-standard

    Update Result
       Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.

       Reboot Required: true

    ・再起動
    # reboot

    ・確認
    # esxcli system version get
       Product: VMware ESXi
       Version: 6.0.0
       Build: Releasebuild-3620759
       Update: 2

       Patch: 34
    esxcli software profile get
    (Updated) ESXi-6.0.0-2494585-standard
       Name: (Updated) ESXi-6.0.0-2494585-standard
       Vendor: esxhome
       Creation Time: 2016-07-01T00:18:32
       Modification Time: 2016-07-01T00:19:18
       Stateless Ready: True
       Description:

    ・メンテナンスモードExit
    vim-cmd hostsvc/maintenance_mode_exit

    以上。

    AWS上のVyosと家のC841とでIPSecを試す~VTI編~

    VTIでも設定したのでメモ・・・。

    ACLいらないし, GRE分のオーバーヘッド(24バイト)も減るしこっちのほうがなんかいいかも。
    # IP以外のプロトコルなんてあんま使わないしな。

     ■ MTU
    #sh int tu1
    Tunnel1 is up, line protocol is up
      Hardware is Tunnel
      Internet address is 192.168.48.234/29
      MTU 17862 bytes, BW 100 Kbit/sec, DLY 50000 usec,
         reliability 255/255, txload 1/255, rxload 1/255
      Encapsulation TUNNEL, loopback not set
      Keepalive set (5 sec), retries 3
      Tunnel linestate evaluation up
      Tunnel source 192.168.1.2 (Vlan100), destination 52.196.175.0
       Tunnel Subblocks:
          src-track:
             Tunnel1 source tracking subblock associated with Vlan100
              Set of tunnels with source Vlan100, 1 member (includes iterators), on interface <OK>
      Tunnel protocol/transport IPSEC/IP
      Tunnel TTL 255
      Tunnel transport MTU 1422 bytes
      Tunnel transmit bandwidth 8000 (kbps)
      Tunnel receive bandwidth 8000 (kbps)
      Tunnel protection via IPSec (profile “VTI”)
      Last input 19:27:49, output 18:54:11, output hang never
      Last clearing of “show interface” counters 3d17h
      Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 330
      Queueing strategy: fifo
      Output queue: 0/0 (size/max)
      5 minute input rate 0 bits/sec, 0 packets/sec
      5 minute output rate 0 bits/sec, 0 packets/sec
         12728 packets input, 1119256 bytes, 0 no buffer
         Received 0 broadcasts (0 IP multicasts)
         0 runts, 0 giants, 0 throttles
         0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
         68893 packets output, 4199880 bytes, 0 underruns
         0 output errors, 0 collisions, 0 interface resets
         0 unknown protocol drops
         0 output buffer failures, 0 output buffers swapped out
     permit ip host 172.16.1.1 host 172.16.1.2

    以下, Config抜粋。

    ■ Cisco 抜粋
    !
    crypto isakmp policy 5
     encr aes 256
     hash sha256
     authentication pre-share
     group 14
     lifetime 3600
    crypto isakmp key aws address A.A.A.A  255.255.255.255
    crypto isakmp keepalive 30 30
    !
    !
    crypto ipsec transform-set IPSEC esp-aes 256 esp-sha256-hmac 
     mode tunnel
    !
    crypto ipsec profile VTI
     set transform-set IPSEC
     set pfs group14

    !
    !
    !
    interface Tunnel1
     ip address 192.168.254.1 255.255.255.0
     ip mtu 1422   ! ← いらないかも。 不要でした。 ※
     ip ospf network broadcast
     ip ospf hello-interval 5
     keepalive 5 3
     tunnel source Vlan100
     tunnel mode ipsec ipv4
     tunnel destination A.A.A.A
     tunnel protection ipsec profile VTI

    !
    interface Vlan100
     ip address 192.168.1.2 255.255.255.0
     ip virtual-reassembly in
    !
    !
    !
    router ospf 1
     network 192.168.10.0 0.0.0.255 area 0
     network 192.168.254.0 0.0.0.255 area 0
    !
    !
    ip access-list extended AWS_GRE
    !
     permit ip host 172.16.1.1 host 172.16.1.2

    ※ VTIはMTUを自動計算するから設定は不要(Ciscoのページ参照

    ■ Vyos 抜粋
    set interfaces loopback lo address ‘172.16.1.2/32’
    set interfaces vti vti1 address ‘192.168.48.233/29’
    set interfaces vti vti1 ip ospf dead-interval ’20’
    set interfaces vti vti1 ip ospf hello-interval ‘5’
    set interfaces vti vti1 ip ospf network ‘broadcast’
    set interfaces vti vti1 ip ospf priority ‘1’
    set interfaces vti vti1 ip ospf retransmit-interval ‘5’
    set interfaces vti vti1 ip ospf transmit-delay ‘1’
    set interfaces vti vti1 mtu ‘1422’

    set protocols ospf area 0 network ‘192.168.254.0/24’
    set protocols ospf area 0 network ‘10.10.20.0/24′
    set protocols ospf log-adjacency-changes ‘detail’
    set protocols static route 0.0.0.0/0 next-hop 10.10.10.1 distance ‘1’
    —-
    set vpn ipsec esp-group ESP_AWS compression ‘disable’
    set vpn ipsec esp-group ESP_AWS lifetime ‘3600’
    set vpn ipsec esp-group ESP_AWS mode ‘tunnel’
    set vpn ipsec esp-group ESP_AWS pfs ‘enable’
    set vpn ipsec esp-group ESP_AWS proposal 1 encryption ‘aes256’
    set vpn ipsec esp-group ESP_AWS proposal 1 hash ‘sha256’
    set vpn ipsec ike-group IKE_AWS dead-peer-detection action ‘hold’
    set vpn ipsec ike-group IKE_AWS dead-peer-detection interval ’30’
    set vpn ipsec ike-group IKE_AWS dead-peer-detection timeout ‘120’
    set vpn ipsec ike-group IKE_AWS lifetime ‘3600’
    set vpn ipsec ike-group IKE_AWS proposal 1 dh-group ’14’
    set vpn ipsec ike-group IKE_AWS proposal 1 encryption ‘aes256’
    set vpn ipsec ike-group IKE_AWS proposal 1 hash ‘sha256’
    set vpn ipsec ipsec-interfaces interface ‘eth0’
    set vpn ipsec logging log-modes ‘all’
    set vpn ipsec nat-traversal ‘enable’
    set vpn ipsec site-to-site peer Global IP authentication mode ‘pre-shared-secret’
    set vpn ipsec site-to-site peer Global IP authentication pre-shared-secret ‘aws’
    set vpn ipsec site-to-site peer Global IP authentication remote-id ‘192.168.1.2’
    set vpn ipsec site-to-site peer Global IP connection-type ‘respond’
    set vpn ipsec site-to-site peer Global IP ike-group ‘IKE_BB’
    set vpn ipsec site-to-site peer Global IP ikev2-reauth ‘inherit’
    set vpn ipsec site-to-site peer Global IP local-address ‘10.200.10.50’
    set vpn ipsec site-to-site peer Global IP vti bind ‘vti1’
    set vpn ipsec site-to-site peer Global IP vti esp-group ‘ESP_BB’

    トンネル張った後に, 「OSPFでネイバーがーーー」ってなったけどMTUサイズがあっていなかったから。合わせればState Fullになる。