Подключение к базе данных в кластере ClickHouse

  • Через интернет, если вы настроили публичный доступ для нужного хоста. К таким хостам подключиться можно только используя SSL-соединение.
  • С виртуальных машин Яндекс.Облака, расположенных в той же виртуальной сети. Если к хосту нет публичного доступа, для подключения с таких ВМ SSL-соединение использовать необязательно.

К кластеру ClickHouse можно подключиться как с помощью клиента командной строки (порт 9440), так и по HTTP-интерфейсу (порт 8443). Все соединения с кластерами БД шифруются.

Получение SSL-сертификата

Чтобы использовать шифрованное соединение, необходимо получить SSL-сертификат:

wget "https://storage.yandexcloud.net/cloud-certs/CA.pem"

Подключение с помощью ClickHouse CLI

Чтобы подключиться к кластеру с помощью клиента командной строки, укажите путь к SSL-сертификату в конфигурационном файле, в элементе <caConfig>:

<config>
  <openSSL>
    <client>
      <loadDefaultCAFile>true</loadDefaultCAFile>
      <caConfig>[путь к SSL-сертификату]</caConfig>
      <cacheSessions>true</cacheSessions>
      <disableProtocols>sslv2,sslv3</disableProtocols>
      <preferServerCiphers>true</preferServerCiphers>
      <invalidCertificateHandler>
        <name>RejectCertificateHandler</name>
      </invalidCertificateHandler>
    </client>
  </openSSL>
</config>

Затем запустите ClickHouse CLI со следующими параметрами:

clickhouse-client --host <FQDN хоста> \
                  -s \
                  --user <имя пользователя БД> \
                  --password <пароль пользователя БД> \
                  -q "<запрос к БД>"
                  --port 9440

Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.

Подключение по HTTP

Отправьте запрос, указав путь к полученному SSL-сертификату, атрибуты базы данных и текст запроса в формате urlencoded:

curl --cacert <путь к SSL-сертификату> \
     -H "X-ClickHouse-User: <имя пользователя БД>" \
     -H "X-ClickHouse-Key: <пароль пользователя БД>" \
     'https://<FQDN хоста>:8443/?database=<имя БД>&query=SELECT%20now()'

При подключении с помощью HTTP-метода GET возможны только операции чтения. GET-запрос операции записи всегда вызовет ошибку, как при использовании параметра соединения readonly=1. Для операций записи всегда используйте метод POST:

curl -X POST \
     --cacert <путь к SSL-сертификату> \
     -H "X-ClickHouse-User: <имя пользователя БД>" \
     -H "X-ClickHouse-Key: <пароль пользователя БД>" \
     'https://<FQDN хоста>:8443/?database=<имя БД>&query=INSERT%20INTO%20Customers%20%28CustomerName%2C%20Address%29%20VALUES%20%28%27Example%20Exampleson%27%2C%20%27Moscow%2C%20Lva%20Tolstogo%2C%2016%27%29%3B'