TungstenFabricのsupport-info

TungstenFabric の動作を解析するとき、必要となる情報についてまとめておく。

まず、ファイルシステム上にある情報として、
/var/log/contrail, /etc/contrail 内の各ファイルと、各コンテナについての docker logs で、
各コンテナの状態について、ある程度の情報が分かるようになっている。

これ以外に、実際に cassandra の中に入っている情報や、プロセス内の詳細状況を調べる場合、以下から情報が取得できる。

config-api:
 http://(config-node):8082
inspect:
 http://(control-node):8083
 http://(vrouter-node):8085

それぞれのポートにブラウザ / curl 等でアクセスすることで、各プロセスについて、詳細情報の取得が出来る。
※特に http://(control-node):8083/Snh_ShowRouteReq で、controller が持っている経路が取得できるので、まずはこの情報があるとよいかもしれない

※ inspect については、xml でダウンロードされるが、以下のコマンド等で html に変換できる
yum install libxslt # centos7
curl https://raw.githubusercontent.com/Juniper/contrail-sandesh/master/library/common/webs/universal_parse.xsl
xsltproc universal_parse.xsl xxx.xml > xxx.html

これ以外に、一般的な os 情報 (sosreport の結果、など) や、オーケストレーターの情報が必要になるケースがある。
※ kolla openstack の場合 /etc/kolla, /var/lib/docker/volumes/kolla_log 等

メール等で情報を投げる際には、まずはこの辺りから進めるのがよいのではなかろうか。

configdbのデータ冗長の動作

Tungsten Fabric (以下、TF) ではデータベースとしてcassandra を使っているが、この部分の冗長の動作を確認してみている。

環境としては、こちらのリンク (http://aaabbb-200904.hatenablog.jp/entry/2018/04/28/215922) の k8s+TF をベースに、TF controller 部分を3台に増やしている。

provider_config:
  bms:
   ssh_user: root
   ssh_public_key: /root/.ssh/id_rsa.pub
   ssh_private_key: /root/.ssh/id_rsa
   domainsuffix: local
instances:
  bms1:
   provider: bms
   roles:
      config_database:
      config:
      control:
      analytics_database:
      analytics:
      webui:
      k8s_master:
      kubemanager:
   ip: 172.31.9.60
  bms2:
   provider: bms
   roles:
      config_database:
      config:
      control:
      analytics_database:
      analytics:
      webui:
      kubemanager:
   ip: 172.31.5.117
  bms3:
   provider: bms
   roles:
      config_database:
      config:
      control:
      analytics_database:
      analytics:
      webui:
      kubemanager:
   ip: 172.31.2.97
  bms11:
   provider: bms
   roles:
     vrouter:
     k8s_node:
   ip: 172.31.7.122
contrail_configuration:
  CONTAINER_REGISTRY: opencontrailnightly
  CONTRAIL_VERSION: latest
  KUBERNETES_CLUSTER_PROJECT: {}

cassandra のデータは、作成・変更時、ノード間でレプリケートされる動作になるのだが、その際のレプリカの数は KEYSPACE で定義されたreplication-factor によって決まる。
http://cassandra.apache.org/doc/latest/architecture/dynamo.html#replication-strategy

cqlsh で確認してみたところ、config では replication-factor 3 となっており、ノード数分のデータが保持されるようになっていた。
このため、万一 ディスクエラー等で データが破損しても、別のノードのデータからローカルのデータを復旧できるようになっている。

※ config (一部keyspace のみ抜粋)

# docker exec -it config_database_cassandra_1 bash
root@ip-172-31-9-60:/# cqlsh 127.0.0.1 9041
Connected to contrail_database at 127.0.0.1:9041.
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh> DESCRIBE KEYSPACES 

system_schema  config_db_uuid      system_traces         dm_keyspace
system_auth    to_bgp_keyspace     useragent           
system         system_distributed  svc_monitor_keyspace

cqlsh> 
cqlsh> DESCRIBE to_bgp_keyspace

CREATE KEYSPACE to_bgp_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}  AND durable_writes = true;
(snip)

上記 cqlsh は、cassandra のデータの確認・変更を行うコマンドだが、 cassandra のプロセスの状態については、nodetool というコマンドで確認できる。
nodetool info, nodetool status 等を実行することで、現在のデータ容量/ヒープ使用量、クラスタ内の各ノードの状態、等が確認出来る。
※ 7201 は configdb 用の管理ポートに対応

root@ip-172-31-9-60:/# nodetool -p 7201 info
ID                     : c1c03c07-7553-419a-a902-a3ccacd69ea0
Gossip active          : true
Thrift active          : true
Native Transport active: true
Load                   : 100.94 KiB   <-- DBのデータ容量が 約 100KB であることを確認可能
Generation No          : 1529829846
Uptime (seconds)       : 1307
Heap Memory (MB)       : 87.37 / 1936.00   <-- java heap の使用量が 87MB 程度であることを確認可能
Off Heap Memory (MB)   : 0.00
Data Center            : datacenter1
Rack                   : rack1
Exceptions             : 0
Key Cache              : entries 31, size 2.46 KiB, capacity 96 MiB, 417 hits, 523 requests, 0.797 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 0, size 0 bytes, capacity 48 MiB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 16, size 1 MiB, capacity 452 MiB, 178 misses, 1651 requests, 0.892 recent hit rate, NaN microseconds miss latency
Percent Repaired       : 100.0%
Token                  : (invoke with -T/--tokens to see all 256 tokens)
root@ip-172-31-9-60:/#

root@ip-172-31-9-60:/# nodetool -p 7201 status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.31.9.60   578.4 KiB  256          100.0%            c1c03c07-7553-419a-a902-a3ccacd69ea0  rack1
UN  172.31.5.117  434.21 KiB  256          100.0%            65f5c795-1f98-4e65-9d5e-10bacf2af7a4  rack1
UN  172.31.2.97   578.68 KiB  256          100.0%            ba2b4ece-740b-4cd2-a157-fb9c2f1e0d65  rack1
root@ip-172-31-9-60:/#
 -> 3台ともUp/Normal の状態であることが確認可能

cassandra が 3台とも動作している状態であれば、webui, API等からconfigに変更が行われた際に、各DB間で自動的にレプリケートが行われるため、特に追加の作業は発生しない。
ただし、以下の状況の際には、レプリケートが自動で行われないため、レプリケートの実施のために、手動で、nodetool repair を発行する必要がある。
1. cassandra のうちの1台が 3時間 (デフォルト値: http://cassandra.apache.org/doc/latest/configuration/cassandra_config_file.html#max-hint-window-in-ms ) 以上停止し、その間に別のノードで書き込みが行われた場合
2. ディスクの破損等によって、cassandra のデータが消失した場合

※ 以下も参照
http://cassandra.apache.org/doc/latest/operating/repair.html


nodetool repair 実行時には以下のような出力が発生し、DBの修復が行われる
※ データ量によるが、インストール直後のconfigdb であれば10秒程度で完了する

root@ip-172-31-9-60:/# nodetool -p 7201 repair --full
[2018-06-24 09:06:30,116] Starting repair command #1 (e204ce60-778d-11e8-a576-1d0021e0e5fc), repairing keyspace to_bgp_keyspace with repair options (parallelism: parallel, primary range: false, incremental: false, job threads: 1, ColumnFamilies: [], dataCenters: [], hosts: [], # of ranges: 768, pull repair: false)
[2018-06-24 09:06:33,428] Repair session e24559d0-778d-11e8-a576-1d0021e0e5fc for range [(-5608140120549516339,-5575501037168442187], (-8319274023993233504,-8299210256863649616], (-4245142859867217208,-4240769915265534326], (1027014965654704718,1029169142596609729], (5022264611528068477,5035402145262803026], (-2571074354323857941,-2554982761970724031], (-4470575950908750827,-4449301038271372254], (-5384933651707468057,-5373862792440986216], (-5352184587049184101,-5350028384852015586], (-3332727924868644218,-3300828413730832178], (327426618458049693,333131064481674807], (-1962725683988
(snip)

また、データ破損時の repair の動作を確認するため、以下のようなコマンドで1台分のconfigdb の削除を行い、削除されたノード上で、nodetool repair を発行してみた。

(3台で実施)# docker-compose -f /etc/contrail/config_database/docker-compose.yaml down
(1台で実施)# rm -rf /var/lib/docker/volumes/config_database_config_cassandra/_data/*
(3台で実施)# docker-compose -f /etc/contrail/config_database/docker-compose.yaml up -d

この際、nodetool info の出力上は、削除後に repair 率が一旦下がり、repair 後に100%に戻る動作となった。

※ 削除直後
root@ip-172-31-9-60:/# nodetool -p 7201 info
ID                     : c1c03c07-7553-419a-a902-a3ccacd69ea0
Gossip active          : true
Thrift active          : true
Native Transport active: true
Load                   : 578.4 KiB
Generation No          : 1529832761
Uptime (seconds)       : 349
Heap Memory (MB)       : 183.52 / 1936.00
Off Heap Memory (MB)   : 0.00
Data Center            : datacenter1
Rack                   : rack1
Exceptions             : 0
Key Cache              : entries 144, size 13.6 KiB, capacity 96 MiB, 4798 hits, 4947 requests, 0.970 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 0, size 0 bytes, capacity 48 MiB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 25, size 1.56 MiB, capacity 452 MiB, 39 misses, 5127 requests, 0.992 recent hit rate, NaN microseconds miss latency
Percent Repaired       : 93.39964148074145%   <-- repair 率が低下
Token                  : (invoke with -T/--tokens to see all 256 tokens)
root@ip-172-31-9-60:/#

※nodetool repair後
root@ip-172-31-9-60:/# nodetool -p 7201 info
ID                     : c1c03c07-7553-419a-a902-a3ccacd69ea0
Gossip active          : true
Thrift active          : true
Native Transport active: true
Load                   : 598.03 KiB
Generation No          : 1529832761
Uptime (seconds)       : 460
Heap Memory (MB)       : 91.59 / 1936.00
Off Heap Memory (MB)   : 0.00
Data Center            : datacenter1
Rack                   : rack1
Exceptions             : 0
Key Cache              : entries 150, size 14.2 KiB, capacity 96 MiB, 4816 hits, 4965 requests, 0.970 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 0, size 0 bytes, capacity 48 MiB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 29, size 1.81 MiB, capacity 452 MiB, 43 misses, 5186 requests, 0.992 recent hit rate, 3371.628 microseconds miss latency
Percent Repaired       : 100.0%   <-- repair 率が回復
Token                  : (invoke with -T/--tokens to see all 256 tokens)
root@ip-172-31-9-60:/#

また、上記出力だけだと、どの部分が修復されたのか、等が確認できなかったため、再度同じ環境を作成して、cassandra のログを確認してみたところ、
以下のようにログ出力が行われており、nodetool repair 発行時にデータレプリケートが実施されていることが確認できた。
※ 05:49, 05:54 の2回 nodetool repair を実行したのだが、1度目の実行では、out of sync, performing streaming repair 等のログが発生して、データ修復が発生しており、2回目では修復が行われていないことがわかる

# docker exec -it config_database_cassandra_1 bash

root@ip-172-31-3-118:/# grep 'RepairJobTask' /var/log/cassandra/system.log | grep -v RepairRunnable
INFO  [RepairJobTask:2] 2018-07-01 05:49:24,671 SyncTask.java:73 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 have 4 range(s) out of sync for route_target_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:24,673 SyncTask.java:73 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 have 4 range(s) out of sync for route_target_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:24,674 LocalSyncTask.java:71 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 4 ranges with /172.31.3.108
INFO  [RepairJobTask:4] 2018-07-01 05:49:24,675 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for route_target_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:24,675 LocalSyncTask.java:71 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 4 ranges with /172.31.15.136
INFO  [RepairJobTask:1] 2018-07-01 05:49:24,707 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:24,707 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:24,716 StreamResultFuture.java:90 - [Stream #826ab040-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:3] 2018-07-01 05:49:24,719 StreamResultFuture.java:90 - [Stream #826afe60-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:6] 2018-07-01 05:49:24,721 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:24,729 RepairJob.java:143 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] service_chain_table is fully synced
INFO  [RepairJobTask:5] 2018-07-01 05:49:24,743 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:24,744 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:24,745 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:24,745 RepairJob.java:143 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] service_chain_uuid_table is fully synced
INFO  [RepairJobTask:4] 2018-07-01 05:49:24,750 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:24,751 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:6] 2018-07-01 05:49:24,752 SyncTask.java:66 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:24,752 RepairJob.java:143 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] service_chain_ip_address_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:24,972 RepairJob.java:143 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] route_target_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:24,974 RepairSession.java:270 - [repair #806c9650-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:3] 2018-07-01 05:49:27,364 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:27,365 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:27,366 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:27,366 RepairJob.java:143 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] dm_pnf_resource_table is fully synced
INFO  [RepairJobTask:1] 2018-07-01 05:49:27,405 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:27,406 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:27,407 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:27,407 RepairJob.java:143 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] dm_pr_vn_ip_table is fully synced
INFO  [RepairJobTask:4] 2018-07-01 05:49:27,423 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:27,424 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:27,425 SyncTask.java:66 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:27,425 RepairJob.java:143 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] dm_pr_ae_id_table is fully synced
INFO  [RepairJobTask:1] 2018-07-01 05:49:27,426 RepairSession.java:270 - [repair #82d5ce20-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:2] 2018-07-01 05:49:28,374 SyncTask.java:66 - [repair #8439f200-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for useragent_keyval_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:28,375 SyncTask.java:66 - [repair #8439f200-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for useragent_keyval_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:28,380 SyncTask.java:66 - [repair #8439f200-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for useragent_keyval_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:28,381 RepairJob.java:143 - [repair #8439f200-7cf2-11e8-ad88-a1b725c94e34] useragent_keyval_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:28,382 RepairSession.java:270 - [repair #8439f200-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:4] 2018-07-01 05:49:30,803 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_instance_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:30,803 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_instance_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:30,807 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_instance_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:30,808 RepairJob.java:143 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] service_instance_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:30,893 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for healthmonitor_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:30,904 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for healthmonitor_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:30,905 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for healthmonitor_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:30,905 RepairJob.java:143 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] healthmonitor_table is fully synced
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,007 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for pool_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:31,007 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for pool_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:31,008 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for pool_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:31,008 RepairJob.java:143 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] pool_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:31,071 SyncTask.java:66 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for loadbalancer_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,071 SyncTask.java:73 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 have 3 range(s) out of sync for loadbalancer_table
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,072 LocalSyncTask.java:71 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 3 ranges with /172.31.3.108
INFO  [RepairJobTask:4] 2018-07-01 05:49:31,073 SyncTask.java:73 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 have 3 range(s) out of sync for loadbalancer_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:31,073 LocalSyncTask.java:71 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 3 ranges with /172.31.15.136
INFO  [RepairJobTask:4] 2018-07-01 05:49:31,075 StreamResultFuture.java:90 - [Stream #863acb10-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,075 StreamResultFuture.java:90 - [Stream #863aa400-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,188 RepairJob.java:143 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] loadbalancer_table is fully synced
INFO  [RepairJobTask:5] 2018-07-01 05:49:31,189 RepairSession.java:270 - [repair #84ca9940-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:4] 2018-07-01 05:49:33,099 SyncTask.java:66 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_fq_name_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,100 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 have 32 range(s) out of sync for obj_fq_name_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,101 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 32 ranges with /172.31.15.136
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,105 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 have 32 range(s) out of sync for obj_fq_name_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,105 StreamResultFuture.java:90 - [Stream #87703dd0-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,105 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 32 ranges with /172.31.3.108
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,106 StreamResultFuture.java:90 - [Stream #8770da10-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,169 SyncTask.java:66 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_uuid_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:33,177 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 have 120 range(s) out of sync for obj_uuid_table
INFO  [RepairJobTask:4] 2018-07-01 05:49:33,177 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 120 ranges with /172.31.3.108
INFO  [RepairJobTask:3] 2018-07-01 05:49:33,179 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 have 120 range(s) out of sync for obj_uuid_table
INFO  [RepairJobTask:3] 2018-07-01 05:49:33,179 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 120 ranges with /172.31.15.136
INFO  [RepairJobTask:3] 2018-07-01 05:49:33,182 StreamResultFuture.java:90 - [Stream #877c24b0-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:4] 2018-07-01 05:49:33,184 StreamResultFuture.java:90 - [Stream #877bd690-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:4] 2018-07-01 05:49:33,348 SyncTask.java:66 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_shared_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,349 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 have 3 range(s) out of sync for obj_shared_table
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,349 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 3 ranges with /172.31.3.108
INFO  [RepairJobTask:1] 2018-07-01 05:49:33,350 StreamResultFuture.java:90 - [Stream #87961550-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,350 SyncTask.java:73 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 have 3 range(s) out of sync for obj_shared_table
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,350 LocalSyncTask.java:71 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Performing streaming repair of 3 ranges with /172.31.15.136
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,351 StreamResultFuture.java:90 - [Stream #87963c60-7cf2-11e8-ad88-a1b725c94e34] Executing streaming plan for Repair
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,457 RepairJob.java:143 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] obj_fq_name_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,488 RepairJob.java:143 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] obj_uuid_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,526 RepairJob.java:143 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] obj_shared_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:33,528 RepairSession.java:270 - [repair #866bc620-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:49:34,098 SyncTask.java:66 - [repair #87cf74d0-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for events
INFO  [RepairJobTask:2] 2018-07-01 05:49:34,098 RepairJob.java:143 - [repair #87cf74d0-7cf2-11e8-ad88-a1b725c94e34] events is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:34,110 SyncTask.java:66 - [repair #87cf74d0-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for sessions
INFO  [RepairJobTask:3] 2018-07-01 05:49:34,111 RepairJob.java:143 - [repair #87cf74d0-7cf2-11e8-ad88-a1b725c94e34] sessions is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:34,113 RepairSession.java:270 - [repair #87cf74d0-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:3] 2018-07-01 05:49:34,419 SyncTask.java:66 - [repair #8802e0e0-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for sessions
INFO  [RepairJobTask:2] 2018-07-01 05:49:34,420 RepairJob.java:143 - [repair #8802e0e0-7cf2-11e8-ad88-a1b725c94e34] sessions is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:49:34,424 SyncTask.java:66 - [repair #8802e0e0-7cf2-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for events
INFO  [RepairJobTask:3] 2018-07-01 05:49:34,424 RepairJob.java:143 - [repair #8802e0e0-7cf2-11e8-ad88-a1b725c94e34] events is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:49:34,425 RepairSession.java:270 - [repair #8802e0e0-7cf2-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:5] 2018-07-01 05:54:42,625 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:42,625 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:42,626 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_ip_address_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:42,632 RepairJob.java:143 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] service_chain_ip_address_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:54:42,748 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:42,749 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:42,749 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:42,750 RepairJob.java:143 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] service_chain_table is fully synced
INFO  [RepairJobTask:4] 2018-07-01 05:54:42,796 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:42,797 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:42,798 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_chain_uuid_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:42,798 RepairJob.java:143 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] service_chain_uuid_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:54:42,833 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for route_target_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:42,833 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for route_target_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:42,834 SyncTask.java:66 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for route_target_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:42,835 RepairJob.java:143 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] route_target_table is fully synced
INFO  [RepairJobTask:4] 2018-07-01 05:54:42,837 RepairSession.java:270 - [repair #3edda390-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:54:44,466 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:44,467 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,471 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pr_vn_ip_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:44,472 RepairJob.java:143 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] dm_pr_vn_ip_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:54:44,477 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,478 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:7] 2018-07-01 05:54:44,478 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pnf_resource_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,480 RepairJob.java:143 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] dm_pnf_resource_table is fully synced
INFO  [RepairJobTask:6] 2018-07-01 05:54:44,495 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,496 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:7] 2018-07-01 05:54:44,497 SyncTask.java:66 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for dm_pr_ae_id_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,499 RepairJob.java:143 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] dm_pr_ae_id_table is fully synced
INFO  [RepairJobTask:5] 2018-07-01 05:54:44,505 RepairSession.java:270 - [repair #4030b070-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:54:45,183 SyncTask.java:66 - [repair #4134b2f0-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for useragent_keyval_table
INFO  [RepairJobTask:1] 2018-07-01 05:54:45,186 SyncTask.java:66 - [repair #4134b2f0-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for useragent_keyval_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:45,189 SyncTask.java:66 - [repair #4134b2f0-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for useragent_keyval_table
INFO  [RepairJobTask:1] 2018-07-01 05:54:45,190 RepairJob.java:143 - [repair #4134b2f0-7cf3-11e8-ad88-a1b725c94e34] useragent_keyval_table is fully synced
INFO  [RepairJobTask:1] 2018-07-01 05:54:45,191 RepairSession.java:270 - [repair #4134b2f0-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:54:47,073 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for healthmonitor_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:47,073 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for healthmonitor_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:47,074 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for healthmonitor_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:47,077 RepairJob.java:143 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] healthmonitor_table is fully synced
INFO  [RepairJobTask:1] 2018-07-01 05:54:47,114 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for service_instance_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:47,115 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for service_instance_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:47,115 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for service_instance_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:47,116 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for pool_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:47,119 RepairJob.java:143 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] service_instance_table is fully synced
INFO  [RepairJobTask:5] 2018-07-01 05:54:47,120 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for pool_table
INFO  [RepairJobTask:6] 2018-07-01 05:54:47,121 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for pool_table
INFO  [RepairJobTask:5] 2018-07-01 05:54:47,121 RepairJob.java:143 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] pool_table is fully synced
INFO  [RepairJobTask:6] 2018-07-01 05:54:47,182 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for loadbalancer_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:47,183 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for loadbalancer_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:47,183 SyncTask.java:66 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for loadbalancer_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:47,184 RepairJob.java:143 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] loadbalancer_table is fully synced
INFO  [RepairJobTask:4] 2018-07-01 05:54:47,185 RepairSession.java:270 - [repair #41948630-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:4] 2018-07-01 05:54:48,708 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_shared_table
INFO  [RepairJobTask:1] 2018-07-01 05:54:48,709 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for obj_shared_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:48,711 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for obj_shared_table
INFO  [RepairJobTask:1] 2018-07-01 05:54:48,712 RepairJob.java:143 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] obj_shared_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:54:48,748 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_fq_name_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:48,749 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for obj_fq_name_table
INFO  [RepairJobTask:3] 2018-07-01 05:54:48,750 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for obj_fq_name_table
INFO  [RepairJobTask:4] 2018-07-01 05:54:48,751 RepairJob.java:143 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] obj_fq_name_table is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:54:48,880 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.15.136 are consistent for obj_uuid_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:48,880 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for obj_uuid_table
INFO  [RepairJobTask:1] 2018-07-01 05:54:48,881 SyncTask.java:66 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for obj_uuid_table
INFO  [RepairJobTask:2] 2018-07-01 05:54:48,881 RepairJob.java:143 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] obj_uuid_table is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:54:48,883 RepairSession.java:270 - [repair #42d06190-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:54:49,330 SyncTask.java:66 - [repair #43c2b0d0-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for sessions
INFO  [RepairJobTask:3] 2018-07-01 05:54:49,330 RepairJob.java:143 - [repair #43c2b0d0-7cf3-11e8-ad88-a1b725c94e34] sessions is fully synced
INFO  [RepairJobTask:1] 2018-07-01 05:54:49,335 SyncTask.java:66 - [repair #43c2b0d0-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.3.108 and /172.31.3.118 are consistent for events
INFO  [RepairJobTask:3] 2018-07-01 05:54:49,335 RepairJob.java:143 - [repair #43c2b0d0-7cf3-11e8-ad88-a1b725c94e34] events is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:54:49,336 RepairSession.java:270 - [repair #43c2b0d0-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
INFO  [RepairJobTask:1] 2018-07-01 05:54:49,639 SyncTask.java:66 - [repair #43e61752-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for events
INFO  [RepairJobTask:2] 2018-07-01 05:54:49,639 RepairJob.java:143 - [repair #43e61752-7cf3-11e8-ad88-a1b725c94e34] events is fully synced
INFO  [RepairJobTask:2] 2018-07-01 05:54:49,640 SyncTask.java:66 - [repair #43e61752-7cf3-11e8-ad88-a1b725c94e34] Endpoints /172.31.15.136 and /172.31.3.118 are consistent for sessions
INFO  [RepairJobTask:3] 2018-07-01 05:54:49,641 RepairJob.java:143 - [repair #43e61752-7cf3-11e8-ad88-a1b725c94e34] sessions is fully synced
INFO  [RepairJobTask:3] 2018-07-01 05:54:49,641 RepairSession.java:270 - [repair #43e61752-7cf3-11e8-ad88-a1b725c94e34] Session completed successfully
root@ip-172-31-3-118:/# 

定期的に nodetool repair を実施しておけば (3台同時にデータ破損、等の場合を除いて) コンフィグデータは複数ノード上にレプリカが保持される、といってよいのではなかろうか。

transparent service chain

Tungsten Fabric では、以前記載したL3 のサービスチェイン (http://aaabbb-200904.hatenablog.jp/entry/2017/10/29/223844) に加えて、L2のVNFのサービスチェインにも対応している。
http://www.opencontrail.org/building-and-testing-layer2-service-images-for-opencontrail/

この場合、vrouter と vrouter の間で、L2 (linux bridgeのような動作) のVNFを挟む構成になるのだが、この際、実際には、送信元のvrouter と 送信先のvrouter の mac address をサービスチェイン用の値に書き換え、そちらを使って、VNFを通すような仕組みとなっている。
※ vrouter 自体は、この場合もルーターとして振る舞うため、left, right のサブネットは異なっていてもよいことに注意

設定方法としては、リンク先のブログと同様で、
Service Template で、'Mode': 'Transparent' を選ぶ必要があること以外は、L3サービスチェインと同じ操作となる。

※ VNFとして、VyOSで試す場合、以下のコンフィグを設定することで、L2サービスチェインが動作することを確認している

set interfaces bridge br0
set interfaces ethernet eth1 bridge-group bridge br0
set interfaces ethernet eth2 bridge-group bridge br0

TF gatewaylessの経路をVyOSに配布

Tungsten Fabric (以下、TF) のgatewayless では、vrouter 上に存在し、ip fabric forwarding が有効になっているvmi (通常は、コンテナを想定) について、その経路を、bgp (family inet) で配布する機能がある。
https://github.com/Juniper/contrail-specs/blob/master/gateway-less-forwarding.md

このため、vrouter と同じセグメントのルーター (vrouterのデフォルトゲートウェイを想定) に対して、peer を張ることで、ルーターとコンテナの間で、直接ping が飛ぶようにすることが出来る。
※ 以前のブログでは、/32 で static route を定義していたが、bgp で経路を渡せるようにしておけば、経路を個別に定義する必要は無くなる
http://aaabbb-200904.hatenablog.jp/entry/2018/05/14/003319

準備として、前回同様、k8s+TF の環境をaws上に構築し、default-k8s-pod-network に ip fabric forwarding の設定を行っておく。

この後、上記の k8s master / slave と同じサブネットに、vyos (ami-6946f70f) のインスタンスを作成する。
※ t2.small (1 cpu, 2 GB mem), 4GB disk を指定
※ TF controller: 172.31.11.86, TF vrouter: 172.31.2.194, vyos: 172.31.10.140 の環境を使用

vyos が起動してきたら、以下のように、TF controller とのbgp設定を実施しておく。

# set protocols bgp 65311 neighbor 172.31.11.86 remote-as 64512

上記の設定が終わったら、TFのwebui の Configure > Infrastructure > BGP Routers から、以下の画面のように、BGP の定義を作成する。
f:id:aaabbb_200904:20180609235935p:plain
f:id:aaabbb_200904:20180609235946p:plain

設定が終わった後、vyos に戻って、bgp が上がってくることを確認する (上がってくるまで 45秒-1分程度かかった)

vyos@VyOS-AMI:~$ show ip bgp summary 
BGP router identifier 172.31.10.140, local AS number 65311
IPv4 Unicast - max multipaths: ebgp 1 ibgp 1
RIB entries 5, using 480 bytes of memory
Peers 1, using 4560 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.31.11.86    4 64512      14      13        0    0    0 00:00:08        3

Total number of neighbors 1
vyos@VyOS-AMI:~$

vyos 上でbgp の経路を確認すると、以下のようにコンテナへの経路 (next-hop は vrouter のip) が流れてきており、bgp inetでの経路配布が、正しく行われていることが確認出来る。

vyos@VyOS-AMI:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [210/0] via 172.31.0.1, eth0
B>* 10.47.255.250/32 [20/100] via 172.31.2.194, eth0, 00:00:30
B>* 10.47.255.251/32 [20/100] via 172.31.2.194, eth0, 00:00:30
B>* 10.47.255.252/32 [20/100] via 172.31.2.194, eth0, 00:00:30
C>* 127.0.0.0/8 is directly connected, lo
C>* 172.31.0.0/20 is directly connected, eth0
vyos@VyOS-AMI:~$


また、この状態で、コンテナからvyosに対してping が飛ぶことを確認出来る。
※ 前回同様、aws上の ネットワーク&セキュリティ > インターフェース、の定義で、"送信元・送信先の変更チェック"、を無効にする必要があるので注意 (vrouter 用のec2インスタンスに対して実施する必要あり)

/ # ip -o a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000\    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue \    link/ether 02:dd:9c:4e:dc:6b brd ff:ff:ff:ff:ff:ff
11: eth0    inet 10.47.255.251/12 scope global eth0\       valid_lft forever preferred_lft forever
11: eth0    inet6 fe80::c0cd:54ff:fefc:4ce0/64 scope link \       valid_lft forever preferred_lft forever
/ # 
/ # 
/ # ping 172.31.10.140
PING 172.31.10.140 (172.31.10.140): 56 data bytes
64 bytes from 172.31.10.140: seq=0 ttl=63 time=0.762 ms
64 bytes from 172.31.10.140: seq=1 ttl=63 time=0.529 ms
^C
--- 172.31.10.140 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.529/0.645/0.762 ms
/ #

ネットワーク分離の要件が無い、等の理由で、オーバーレイを使う必要がない環境では、上記の構成を検討してみるのもよいのではなかろうか。

プロキシ環境下でのTungsten Fabricインストール

プロキシ環境で、Tungsten Fabric (以下、TF) をインストール出来るか、について確認した際のまとめとなる。
※ 確認時には、k8s との組み合わせで試したので、openstack インストールの場合には、また別の設定が必要になるかもしれない。
※ ベースの手順としては、以下のリンクの k8s の部分を使用している。
http://aaabbb-200904.hatenablog.jp/entry/2018/04/28/215922

TF のインストーラーは docker コンテナのダウンロード以外に、パッケージインストール等を実施している。
※ こちらで試した際には、yum, pip で実施されていた

基本的には、上記のツールがproxy を使用するように設定していけばよい (export http_proxy=x.x.x.x:3128 など) のだが、
これ以外に、kubeadm init, kubeadm join も上記環境変数の影響を受けるようなので、no_proxy 等の設定も必要となった。

以下に、必要となった設定をまとめていく。
※ proxy の ip, port は 172.31.12.136, 3128 として記載

(configure_instances.yml 前に必要な設定)
1. /etc/yum.conf の最後尾に以下を追記(全ノード)
proxy=http://172.31.12.136:3128

2. /root/.bashrc の最後尾に以下を追記(全ノード)
export http_proxy=http://172.31.12.136:3128
export https_proxy=http://172.31.12.136:3128
export no_proxy=localhost,127.0.0.1,172.31.1.193,172.31.15.21
※ 172.31.1.193,172.31.15.21 は、それぞれ masterノード, slaveノードのip

3. config/instance.yaml内で、contrail_configuration 内に、以下の2行を追記(playbook実行ノード)
 contrail_configuration:
  HTTPS_PROXY: 172.31.12.136:3128
  HTTP_PROXY: 172.31.12.136:3128

x. git でインストーラーを取得する場合、以下も実施(playbook実行ノード)
$ git config --global http.proxy http://172.31.12.136:3128
$ git config --global https.proxy http://172.31.12.136:3128

上記設定により、configure_instance.yml のplaybook が通るようになるはずである。

(install_contrail.yml前に必要な設定)
1. config/instance.yaml内で、以下の2行を削除(playbook実行ノード)
 contrail_configuration:
  HTTPS_PROXY: 172.31.12.136:3128
  HTTP_PROXY: 172.31.12.136:3128
※ こちらが残ったままだと、TF内の各 api 通信がproxy経由になる事象が発生し、一部のプロセスが上がらなくなった

2. docker サービスにプロキシを設定(全ノード)
# cp -i /usr/lib/systemd/system/docker.service /etc/systemd/system/
# vi /etc/systemd/system/docker.service
(ExecStart の行の前に以下を追記)
Environment="HTTP_PROXY=http://172.31.12.136:3128"
# systemctl daemon-reload
# systemctl restart docker

上記設定後、install_contrail.yml の playbook を流すことで、インストールが完了することを確認できた。
f:id:aaabbb_200904:20180609194804p:plain

analytics機能無しでのインストールを行った場合の動作

Tungsten Fabric の analytics は、アラーム、可視化などの多くの有用な機能を提供するが、既に監視の仕組みが別途あるような場合には、analytics 無しで、control / vrouter 等の機能だけを、使いたいケースもあるかもしれない。

この場合を想定して、controller / analytics / analyticsdb のうち、controller だけでのデプロイを試してみている。

設定方法は、以下のリンクのk8sの場合と同様だが、インストール時の設定としては以下を使用している
http://aaabbb-200904.hatenablog.jp/entry/2018/04/28/215922
※ リンク先と比べて、analytics, analytics_database の2行を削除している

provider_config:
  bms:
   ssh_user: root
   ssh_public_key: /root/.ssh/id_rsa.pub
   ssh_private_key: /root/.ssh/id_rsa
   domainsuffix: local
instances:
  bms1:
   provider: bms
   roles:
      config_database:
      config:
      control:
      webui:
      k8s_master:
      kubemanager:
   ip: 172.31.15.99
  bms2:
   provider: bms
   roles:
     vrouter:
     k8s_node:
   ip: 172.31.1.148
contrail_configuration:
  CONTAINER_REGISTRY: opencontrailnightly
  CONTRAIL_VERSION: latest
  KUBERNETES_CLUSTER_PROJECT: {}

インストールが終わった後、contrail-status を実行したところ、以下の結果となった。
※ collector への接続が張れない状態となっている

(master)
[root@ip-172-31-15-99 ~]# contrail-status 
Pod         Service         Original Name                          State    Status            
config      api             contrail-controller-config-api         running  Up About an hour  
config      cassandra       contrail-external-cassandra            running  Up About an hour  
config      device-manager  contrail-controller-config-devicemgr   running  Up About an hour  
config      nodemgr         contrail-nodemgr                       running  Up About an hour  
config      rabbitmq        contrail-external-rabbitmq             running  Up About an hour  
config      schema          contrail-controller-config-schema      running  Up About an hour  
config      svc-monitor     contrail-controller-config-svcmonitor  running  Up About an hour  
config      zookeeper       contrail-external-zookeeper            running  Up About an hour  
control     control         contrail-controller-control-control    running  Up About an hour  
control     dns             contrail-controller-control-dns        running  Up About an hour  
control     named           contrail-controller-control-named      running  Up About an hour  
control     nodemgr         contrail-nodemgr                       running  Up About an hour  
kubernetes  kube-manager    contrail-kubernetes-kube-manager       running  Up About an hour  
webui       job             contrail-controller-webui-job          running  Up About an hour  
webui       web             contrail-controller-webui-web          running  Up About an hour  

== Contrail control ==
control: initializing (Collector connection down)
nodemgr: initializing (Collector connection down)
named: active
dns: active

== Contrail config ==
api: initializing (Collector connection down)
zookeeper: active
svc-monitor: initializing (Collector connection down)
nodemgr: initializing (Collector connection down)
device-manager: initializing (Collector connection down)
cassandra: active
rabbitmq: active
schema: initializing (Collector connection down)

== Contrail webui ==
web: active
job: active

== Contrail kubernetes ==
kube-manager: initializing (Collector connection down)

[root@ip-172-31-15-99 ~]#

(slave)
[root@ip-172-31-1-148 ~]# contrail-status 
Pod      Service  Original Name           State    Status            
vrouter  agent    contrail-vrouter-agent  running  Up About an hour  
vrouter  nodemgr  contrail-nodemgr        running  Up About an hour  

vrouter kernel module is PRESENT
== Contrail vrouter ==
nodemgr: initializing (Collector connection down)
agent: active (Collector connection down)

[root@ip-172-31-1-148 ~]# 

webui を開いてみたところ、Monitor の部分は、ほとんどの値が取得できない状態になっているが、Configure の部分は、通常通り、動作する状態となった。
f:id:aaabbb_200904:20180519210117p:plain
f:id:aaabbb_200904:20180519210132p:plain

また、この状態で、cirros2つをk8s上に作成してみたところ、特に問題なく疎通が可能となった。
control / config / vrouter だけが関連する部分については、一応動いているように見える。

[root@ip-172-31-15-99 1_initial]# kubectl get pod -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP              NODE
cirros1   1/1       Running   0          31s       10.47.255.251   ip-172-31-1-148.ap-northeast-1.compute.internal
cirros2   1/1       Running   0          27s       10.47.255.250   ip-172-31-1-148.ap-northeast-1.compute.internal
[root@ip-172-31-15-99 1_initial]# 
[root@ip-172-31-15-99 1_initial]# 
[root@ip-172-31-15-99 1_initial]# kubectl exec -it cirros1 sh
/ # ping 10.47.255.250
PING 10.47.255.250 (10.47.255.250): 56 data bytes
64 bytes from 10.47.255.250: seq=0 ttl=63 time=0.421 ms
64 bytes from 10.47.255.250: seq=1 ttl=63 time=0.080 ms
^C
--- 10.47.255.250 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.080/0.250/0.421 ms
/ # 
/ # 
/ # 
/ # [root@ip-172-31-15-99 1_initial]# 
[root@ip-172-31-15-99 1_initial]# 


メモリ使用量も、analytics ありの場合と比べてかなり抑えられていたので、メモリ制限が厳しく、alarm 等を設定する必要が無い場合は、こちらの構成であれば、動作させられるのかもしれない。

※ analytics 無しの場合
[root@ip-172-31-15-99 1_initial]# free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        5.9G        4.1G         18M        5.5G        9.0G
Swap:            0B          0B          0B
[root@ip-172-31-15-99 1_initial]#

※ analytics 有りの場合
[root@ip-172-31-7-53 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            15G         11G        247M         18M        3.5G        3.1G
Swap:            0B          0B          0B
[root@ip-172-31-7-53 ~]# 

contrail-status, nodemgr, analytics

Tungsten Fabric では、contrail-status というコマンドで、各コンポーネントのステータスを確認することが出来る。
こちらの動作と、実際に、ステータス情報を提供するnodemgr について、ざっくりとまとめていく。
合わせて nodemgr 等からの情報を集約管理する、analytics という機能についてもまとめておく。

contrail-status, nodemgr

contrail-status の実体は以下のpython スクリプトとなっており、スクリプト内で、プロセスの有無、systemctl の結果、nodemgr の応答、等を取得し、各コンポーネントの状況を出力している。
https://github.com/Juniper/contrail-controller/blob/master/src/config/utils/contrail-status.py

[root@ip-172-31-7-53 ~]# contrail-status 
Pod         Service         Original Name                          State    Status             
analytics   alarm-gen       contrail-analytics-alarm-gen           running  Up 14 minutes      
analytics   api             contrail-analytics-api                 running  Up 14 minutes      
analytics   collector       contrail-analytics-collector           running  Up 14 minutes      
analytics   nodemgr         contrail-nodemgr                       running  Up 14 minutes      
analytics   query-engine    contrail-analytics-query-engine        running  Up 14 minutes      
config      api             contrail-controller-config-api         running  Up 16 minutes      
config      cassandra       contrail-external-cassandra            running  Up 18 minutes      
config      device-manager  contrail-controller-config-devicemgr   running  Up 16 minutes      
config      nodemgr         contrail-nodemgr                       running  Up 16 minutes      
config      rabbitmq        contrail-external-rabbitmq             running  Up 18 minutes      
config      schema          contrail-controller-config-schema      running  Up 16 minutes      
config      svc-monitor     contrail-controller-config-svcmonitor  running  Up 16 minutes      
config      zookeeper       contrail-external-zookeeper            running  Up 18 minutes      
control     control         contrail-controller-control-control    running  Up 15 minutes      
control     dns             contrail-controller-control-dns        running  Up 15 minutes      
control     named           contrail-controller-control-named      running  Up 15 minutes      
control     nodemgr         contrail-nodemgr                       running  Up 15 minutes      
database    cassandra       contrail-external-cassandra            running  Up 14 minutes      
database    kafka           contrail-external-kafka                running  Up 14 minutes      
database    nodemgr         contrail-nodemgr                       running  Up 14 minutes      
database    zookeeper       contrail-external-zookeeper            running  Up 14 minutes      
kubernetes  kube-manager    contrail-kubernetes-kube-manager       running  Up About a minute  
webui       job             contrail-controller-webui-job          running  Up 16 minutes      
webui       web             contrail-controller-webui-web          running  Up 16 minutes      

== Contrail control ==
control: active
nodemgr: initializing (NTP state unsynchronized.)
named: active
dns: active

== Contrail kubernetes ==
kube-manager: active

== Contrail database ==
kafka: active
nodemgr: initializing (Disk for DB is too low. NTP state unsynchronized.)
zookeeper: active
cassandra: active

== Contrail analytics ==
nodemgr: initializing (NTP state unsynchronized.)
api: active
collector: active
query-engine: active
alarm-gen: active

== Contrail webui ==
web: active
job: active

== Contrail config ==
api: active
zookeeper: active
svc-monitor: active
nodemgr: initializing (Disk for DB is too low. NTP state unsynchronized.)
device-manager: active
cassandra: active
rabbitmq: active
schema: active

[root@ip-172-31-7-53 ~]# 


このうち、nodemgr は、各ノード上の常駐プロセスとして動作しており、実体としては、以下のファイルになる。
https://github.com/Juniper/contrail-controller/tree/master/src/nodemgr/common
※ プロセスの有無だけでなく、cassandra の状態、CPU, Mem, Disk の使用量、コアファイル出力の有無、ntpの設定状況、等も確認しているようである

また、contrail-status はnodemgr からNodeの状態を取得する際、以下のようなHTTPリクエストを発行している。
http://(nodemgr-ip:port)/Snh_SandeshUVECacheReq?x=NodeStatus

コマンドではなく、HTTP クライアントから情報取得を行いたい場合、上記のURLにリクエストを投げることでも、データの取得が可能となる。

※ vrouter上で、vrouter-nodemgr のポートに対して実行した場合:
[root@ip-172-31-10-212 ~]# curl localhost:8085/Snh_SandeshUVECacheReq?x=NodeStatus
<?xml-stylesheet type="text/xsl" href="/universal_parse.xsl"?><__NodeStatusUVE_list type="slist"><NodeStatusUVE type="sandesh"><data type="struct" identifier="1"><NodeStatus><name type="string" identifier="1" key="ObjectVRouter">ip-172-31-10-212.ap-northeast-1.compute.internal</name><process_status type="list" identifier="4" aggtype="union"><list type="struct" size="1"><ProcessStatus><module_id type="string" identifier="1">contrail-vrouter-agent</module_id><instance_id type="string" identifier="2">0</instance_id><state type="string" identifier="3">Functional</state><connection_infos type="list" identifier="4"><list type="struct" size="3"><ConnectionInfo><type type="string" identifier="1">XMPP</type><name type="string" identifier="2">control-node:172.31.7.53</name><server_addrs type="list" identifier="3"><list type="string" size="1"><element>172.31.7.53:5269</element></list></server_addrs><status type="string" identifier="4">Up</status><description type="string" identifier="5">OpenSent</description></ConnectionInfo><ConnectionInfo><type type="string" identifier="1">XMPP</type><name type="string" identifier="2">dns-server:172.31.7.53</name><server_addrs type="list" identifier="3"><list type="string" size="1"><element>172.31.7.53:53</element></list></server_addrs><status type="string" identifier="4">Up</status><description type="string" identifier="5">OpenSent</description></ConnectionInfo><ConnectionInfo><type type="string" identifier="1">Collector</type><name type="string" identifier="2"></name><server_addrs type="list" identifier="3"><list type="string" size="1"><element>172.31.7.53:8086</element></list></server_addrs><status type="string" identifier="4">Up</status><description type="string" identifier="5">Established</description></ConnectionInfo></list></connection_infos><description type="string" identifier="5"></description></ProcessStatus></list></process_status></NodeStatus></data></NodeStatusUVE><SandeshUVECacheResp type="sandesh"><returned type="u32" identifier="1">1</returned><period type="i32" identifier="2">0</period><more type="bool" identifier="0">false</more></SandeshUVECacheResp></__NodeStatusUVE_list>[root@ip-172-31-10-212 ~]# 
[root@ip-172-31-10-212 ~]# 

また、上記のポートにブラウザでアクセスすることで、画面から同じリクエストを投げることもできるようになっている。
1. vrouterの8085番ポートにアクセスし、sandesh_uve.xml を選択
f:id:aaabbb_200904:20180519204136p:plain
2. SandeshUVECacheReq に tname: NodeStatus を入力
f:id:aaabbb_200904:20180519204153p:plain
3. 上記と同じ情報が出力される
f:id:aaabbb_200904:20180519204200p:plain

analytics

また、上記のNodeStatus の結果を含む、各コンポーネントの状態や、パフォーマンス値は、Sandesh というプロトコル (実体はThrift) で、Tungsten Fabric のanalytics に送付されている。
http://www.opencontrail.org/sandesh-a-sdn-analytics-interface/

analytics では、contrail-collector というプロセスが動いており、送付された値を cassandra に書き込む動作となっている。
このため、各ノードのNodeStatus をまとめて確認したい場合、analyticsに対して処理を投げることでも、確認が可能となる。

analytics への処理の投げ方は、cli経由, webui経由, API経由の3つがある。

cli経由で値を取得する場合、contrail-flows, contrail-logs, contrail-stats などのコマンドが用意されており、それぞれ、analytics 内のflow, log, stat といった情報を取得出来る。
https://github.com/Juniper/contrail-controller/wiki/Contrail-utility-scripts-for-getting-logs,-stats-and-flows-from-analytics

※ 実体は、以下の3ファイルに対応する
https://github.com/Juniper/contrail-analytics/blob/master/contrail-opserver/flow.py
https://github.com/Juniper/contrail-analytics/blob/master/contrail-opserver/log.py
https://github.com/Juniper/contrail-analytics/blob/master/contrail-opserver/stats.py

※※ ちなみに、4.1以降では、session という値が追加され、contrail-sessions というコマンドも追加されていた
https://github.com/Juniper/contrail-specs/blob/master/session_collection.md

webui では、Query の画面内に、Flow, Log, Stat といったタブが存在しており、上記のcli に対応した内容が取得出来る。
f:id:aaabbb_200904:20180519204446p:plain

APIで投げる場合は、以下のリンクを参照
https://github.com/Juniper/contrail-controller/wiki/Contrail-Analytics-Documentation


NodeStatus については、UVEという扱いになっており、上記のcli の中では、contrail-logs で、ステータス変化時のログを取得出来る。
※ UVE の動作については、以下を参照
http://www.opencontrail.org/operational-state-in-the-opencontrail-system-uve-user-visible-entities-through-analytics-api/
https://github.com/Juniper/contrail-analytics/blob/master/contrail-opserver/docs/opserver.rst

※ control-node の場合
[root@ip-172-31-7-53 ~]# docker exec -it analytics_api_1 contrail-logs --object-type control-node --last 1m
2018 May 19 09:50:19.426686 ip-172-31-7-53.ap-northeast-1.compute.internal [:contrail-control-nodemgr:] : NodeStatusUVE: [NodeStatus: name = ip-172-31-7-53.ap-northeast-1.compute.internal, disk_usage_info: {/dev/xvda1: [partition_type = xfs, partition_space_used_1k = 5917572, partition_space_available_1k = 25528424, percentage_partition_space_used = 19], }, process_mem_cpu_usage: {contrail-control: [mem_virt = 34528, cpu_share = 0.05, mem_res = 16832], contrail-control-nodemgr: [mem_virt = 45792, cpu_share = 0.57, mem_res = 26360], contrail-dns: [mem_virt = 32068, cpu_share = 0.04, mem_res = 14544], contrail-named: [mem_virt = 21168, cpu_share = 0.0, mem_res = 21160], }, [SysMemInfo: total = 16265888, used = 12171632, free = 262316, buffers = 2600, cached = 3829340, node_type = control-node], [SysCpuInfo: one_min_avg = 0.92, five_min_avg = 1.36, fifteen_min_avg = 1.42, cpu_share = 6.26, node_type = control-node]]
[root@ip-172-31-7-53 ~]# 

※ vrouter の場合
[root@ip-172-31-7-53 ~]# docker exec -it analytics_api_1 contrail-logs --object-type vrouter --last 1m --message-type NodeStatusUVE
2018 May 19 09:53:32.427291 ip-172-31-10-212.ap-northeast-1.compute.internal [:contrail-vrouter-nodemgr:] : NodeStatusUVE: [NodeStatus: name = ip-172-31-10-212.ap-northeast-1.compute.internal, disk_usage_info: {/dev/xvda1: [partition_type = xfs, partition_space_used_1k = 3161708, partition_space_available_1k = 28284288, percentage_partition_space_used = 10], }, process_mem_cpu_usage: {contrail-vrouter-agent: [mem_virt = 218252, cpu_share = 0.47, mem_res = 122904], contrail-vrouter-nodemgr: [mem_virt = 60320, cpu_share = 0.4, mem_res = 26260], }, [SysMemInfo: total = 16265888, used = 705984, free = 14651512, buffers = 2600, cached = 905792, node_type = vrouter], [SysCpuInfo: one_min_avg = 0.07, five_min_avg = 0.09, fifteen_min_avg = 0.08, cpu_share = 0.35, node_type = vrouter]]
[root@ip-172-31-7-53 ~]#


また、UVEについて、最新のステータスを確認する場合には、curl 等を使って、以下のようにanalytics-nodeの8081番ポートにHTTP GETを投げることで、状態を取得することができる。

※ UVEのリストを確認
[root@ip-172-31-7-53 ~]# curl localhost:8081/analytics/uves | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3108  100  3108    0     0   381k      0 --:--:-- --:--:-- --:--:--  433k
[
    {
        "href": "http://localhost:8081/analytics/uves/storage-pools",
        "name": "storage-pools"
    },
    {
        "href": "http://localhost:8081/analytics/uves/xmpp-peers",
        "name": "xmpp-peers"
    },
    {
        "href": "http://localhost:8081/analytics/uves/storage-clusters",
        "name": "storage-clusters"
    },
(snip)

※ control node のリストを確認
[root@ip-172-31-7-53 ~]# curl localhost:8081/analytics/uves/control-nodes | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   173  100   173    0     0  19983      0 --:--:-- --:--:-- --:--:-- 21625
[
    {
        "href": "http://localhost:8081/analytics/uves/control-node/ip-172-31-7-53.ap-northeast-1.compute.internal?flat",
        "name": "ip-172-31-7-53.ap-northeast-1.compute.internal"
    }
]

※ 特定のcontrol node について、値を取得
[root@ip-172-31-7-53 ~]# curl localhost:8081/analytics/uves/control-node/ip-172-31-7-53.ap-northeast-1.compute.internal?flat | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6547    0  6547    0     0   790k      0 --:--:-- --:--:-- --:--:--  913k
{
    "BgpRouterState": {
        "__T": 1526722031429953,
        "admin_down": false,
        "amqp_conn_info": {
            "connection_status": true,
            "connection_status_change_at": "2018-May-19 09:12:10.534881",
            "url": "amqp://guest:guest@172.31.7.53:5672"
        },
        "bgp_router_ip_list": [
            "172.31.7.53"
        ],
(snip)
    "NodeStatus": {
        "__T": 1526729660881411,
        "build_info": "{\"build-info\" : [{\"build-version\" : \"5.1.0\", \"build-time\" : \"2018-05-19 02:35:01.870887\", \"build-user\" : \"zuul\", \"build-hostname\" : \"centos-7-4-builder-juniper-contrail-ci-c-0000046385.novalocal\", \"build-id\" : \"5.1.0-107.el7\", \"build-number\" : \"@contrail\"}]}",
        "deleted": false,
        "disk_usage_info": {
            "/dev/xvda1": {
                "partition_space_available_1k": 25205956,
                "partition_space_used_1k": 6240040,
                "partition_type": "xfs",
                "percentage_partition_space_used": 20
            }
        },
        "installed_package_version": "5.1.0-107.el7",
(snip)
        "process_status": [
            {
                "description": "NTP state unsynchronized.",
                "instance_id": "0",
                "module_id": "contrail-control-nodemgr",
                "state": "Non-Functional"
            },
            {
                "connection_infos": [
                    {
                        "description": "Established",
(snip)          

また、NodeStatus を webui から確認する場合、
Monitor > Infrastructure > (ノード種別) > (ノード名) で、'Advanced View' を選ぶことでも確認可能となる。
※ 下記では、Analytics Nodes で process status を確認し、process reporting as non-functional となっている原因を確認している
f:id:aaabbb_200904:20180519204835p:plain
f:id:aaabbb_200904:20180519204845p:plain
f:id:aaabbb_200904:20180519204855p:plain

まとめ

以上のように、各コンポーネントが正しく動作しているか、については、いくつかの確認方法がある。
webui に入れる場合には、NodeStatusUVE を確認、sshログインのみの場合には、contrail-status か、必要に応じて、api から値を取得、などによって確認、というのがよいのではなかろうか。