У меня есть некоторые средства автоматизации для настройки кластерного сервиса [Galera], который использует etcd для определения местоположения сервиса.Затем я получил балансировщик нагрузки, который считывает эту информацию для инициализации и запуска.
Проблема в том, что при тестировании автоматического заживления я заметил, что есть пустые etcd 'каталоги', где были старые узлы,ака не хватает nodes
подключа.Это вызывает проблемы в конфигурации балансировщика нагрузки.
Ниже приведен результат curl http://etcd/... | jq .node.nodes[]
, который иллюстрирует проблему.
Как отфильтровать подобъекты, у которых нет *Клавиша 1009 *, например: 172.17.0.16
?
{
"key": "/galera/mariadb_galera/172.17.0.8",
"dir": true,
"nodes": [
{
"key": "/galera/mariadb_galera/172.17.0.8/ipaddress",
"value": "172.17.0.8",
"modifiedIndex": 9,
"createdIndex": 9
},
{
"key": "/galera/mariadb_galera/172.17.0.8/wsrep_local_state_comment",
"value": "Synced",
"expiration": "2018-10-17T21:24:48.94524993Z",
"ttl": 2,
"modifiedIndex": 52905,
"createdIndex": 52905
},
{
"key": "/galera/mariadb_galera/172.17.0.8/seqno",
"value": "1367",
"expiration": "2018-10-17T21:24:49.213778533Z",
"ttl": 2,
"modifiedIndex": 52907,
"createdIndex": 52907
}
],
"modifiedIndex": 9,
"createdIndex": 9
}
{
"key": "/galera/mariadb_galera/172.17.0.16",
"dir": true,
"modifiedIndex": 48,
"createdIndex": 48
}
{
"key": "/galera/mariadb_galera/172.17.0.17",
"dir": true,
"modifiedIndex": 111,
"createdIndex": 111
}
{
"key": "/galera/mariadb_galera/172.17.0.11",
"dir": true,
"nodes": [
{
"key": "/galera/mariadb_galera/172.17.0.11/wsrep_local_state_comment",
"value": "Synced",
"expiration": "2018-10-17T21:24:55.990291814Z",
"ttl": 9,
"modifiedIndex": 52909,
"createdIndex": 52909
},
{
"key": "/galera/mariadb_galera/172.17.0.11/seqno",
"value": "1367",
"expiration": "2018-10-17T21:24:56.113268568Z",
"ttl": 9,
"modifiedIndex": 52910,
"createdIndex": 52910
}
],
"modifiedIndex": 50749,
"createdIndex": 50749
}
{
"key": "/galera/mariadb_galera/172.17.0.14",
"dir": true,
"nodes": [
{
"key": "/galera/mariadb_galera/172.17.0.14/wsrep_local_state_comment",
"value": "Synced",
"expiration": "2018-10-17T21:24:49.029444262Z",
"ttl": 2,
"modifiedIndex": 52906,
"createdIndex": 52906
},
{
"key": "/galera/mariadb_galera/172.17.0.14/seqno",
"value": "1367",
"expiration": "2018-10-17T21:24:49.358067474Z",
"ttl": 2,
"modifiedIndex": 52908,
"createdIndex": 52908
}
],
"modifiedIndex": 52076,
"createdIndex": 52076
}
Обычно я использовал бы jq .node.nodes[].key
, и результат был бы следующим, представляя живые узлы:
"/galera/mariadb_galera/172.17.0.8"
"/galera/mariadb_galera/172.17.0.11"
"/galera/mariadb_galera/172.17.0.14"
Но без фильтрацииэто пустые узлы, которые включают в себя узлы, которые больше не существуют:
"/galera/mariadb_galera/172.17.0.8"
"/galera/mariadb_galera/172.17.0.16"
"/galera/mariadb_galera/172.17.0.17"
"/galera/mariadb_galera/172.17.0.11"
"/galera/mariadb_galera/172.17.0.14"