Database
 sql >> база данни >  >> RDS >> Database

Ръководство за внедряване на TimescaleDB с Docker

В днешно време Docker е най-разпространеният инструмент за създаване, внедряване и стартиране на приложения чрез използване на контейнери. Позволява ни да пакетираме приложение с всички необходими части, като библиотеки и други зависимости, и да го изпратим като един пакет. Може да се разглежда като виртуална машина, но вместо да създава цяла виртуална операционна система, Docker позволява на приложенията да използват същото ядро ​​на Linux като системата, на която работят, и изисква приложенията да се доставят само с неща, които все още не се изпълняват. хост компютъра. Това дава значително увеличение на производителността и намалява размера на приложението.

В случай на Docker Images, те идват с предварително дефинирана версия на ОС и пакетите се инсталират по начин, който е решен от лицето, създало изображението. Възможно е да искате да използвате различна ОС или може би искате да инсталирате пакетите по различен начин. В тези случаи трябва да използвате чисто изображение на Docker OS и да инсталирате софтуера от нулата.

Репликацията е често срещана функция в средата на база данни, така че след като сте разположили TimescaleDB Docker Images, ако искате да конфигурирате настройка за репликация, ще трябва да го направите ръчно от контейнера, като използвате Docker файл или дори скрипт. Тази задача може да бъде сложна, ако нямате познания за Docker.

В този блог ще видим как можем да внедрим TimescaleDB чрез Docker, като използваме TimescaleDB Docker Image, а след това ще видим как да го инсталираме от нулата с помощта на изображение на CentOS Docker и ClusterControl.

Как да внедрите TimescaleDB с изображение на Docker

Първо, нека видим как да разположим TimescaleDB, като използваме изображение на Docker, достъпно в Docker Hub.

$ docker search timescaledb
NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
timescale/timescaledb                      An open-source time-series database optimize…   52

Ще вземем първия резултат. И така, трябва да изтеглим това изображение:

$ docker pull timescale/timescaledb

И стартирайте контейнерите на възел, които преобразуват локален порт към порта на базата данни в контейнера:

$ docker run -d --name timescaledb1 -p 7551:5432 timescale/timescaledb
$ docker run -d --name timescaledb2 -p 7552:5432 timescale/timescaledb

След като изпълните тези команди, трябва да създадете тази Docker среда:

$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
6d3bfc75fe39        timescale/timescaledb   "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       0.0.0.0:7552->5432/tcp   timescaledb2
748d5167041f        timescale/timescaledb   "docker-entrypoint.s…"   16 minutes ago      Up 16 minutes       0.0.0.0:7551->5432/tcp   timescaledb1

Сега можете да получите достъп до всеки възел със следните команди:

$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (9.6.13)
Type "help" for help.
postgres=#

Както можете да видите, това изображение на Docker съдържа версия TimescaleDB 9.6 по подразбиране и е инсталирано на Alpine Linux v3.9. Можете да използвате различна версия на TimescaleDB, като промените етикета:

$ docker pull timescale/timescaledb:latest-pg11

След това можете да създадете потребител на база данни, да промените конфигурацията според вашите изисквания или да конфигурирате ръчно репликация между възлите.

Как да разположите TimescaleDB с ClusterControl

Сега, нека да видим как да разположим TimescaleDB с Docker, като използваме изображение на CentOS Docker (centos) и изображение на Docker ClusterControl (severalnines/clustercontrol).

Първо, ще разположим ClusterControl Docker Container, използвайки най-новата версия, така че трябва да изтеглим изображението за докер няколко деветки/clustercontrol.

$ docker pull severalnines/clustercontrol

След това ще стартираме контейнера ClusterControl и ще публикуваме порт 5000 за достъп до него.

$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Сега можем да отворим потребителския интерфейс на ClusterControl на адрес http://[Docker_Host]:5000/clustercontrol и да създадем администраторски потребител и парола по подразбиране.

Официалното изображение на Docker на CentOS идва без SSH услуга, така че ще го инсталираме и ще разрешим връзката от възела ClusterControl без парола с помощта на SSH ключ.

$ docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5378                [OK]

И така, ще изтеглим официалното изображение на Docker на CentOS.

$ docker pull centos

След това ще изпълним два контейнера на възли, timescale1 и timescale2, свързани с ClusterControl и ще съпоставим локален порт за свързване към базата данни (по избор).

$ docker run -dt --privileged --name timescale1 -p 8551:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
$ docker run -dt --privileged --name timescale2 -p 8552:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init

Тъй като трябва да инсталираме и конфигурираме SSH услугата, трябва да стартираме контейнера с привилегировани и /usr/sbin/init параметри, за да можем да управляваме услугата вътре в контейнера.

След като изпълним тези команди, трябва да създадем тази Docker среда:

$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                       PORTS                                                                                     NAMES
230686d8126e        centos                        "/usr/sbin/init"    4 seconds ago       Up 3 seconds                 0.0.0.0:8552->5432/tcp                                                                    timescale2
c0e7b245f7fe        centos                        "/usr/sbin/init"    23 seconds ago      Up 22 seconds                0.0.0.0:8551->5432/tcp                                                                    timescale1
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    2 weeks ago         Up About an hour (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

Имаме достъп до всеки възел със следната команда:

$ docker exec -ti [db-container] bash

Както споменахме по-рано, трябва да инсталираме SSH услугата, така че нека да я инсталираме, да разрешим root достъпа и да зададем root парола за всеки контейнер на база данни:

$ docker exec -ti [db-container] yum update -y
$ docker exec -ti [db-container] yum install -y openssh-server openssh-clients
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] systemctl start sshd
$ docker exec -it [db-container] passwd

Последната стъпка е да настроите SSH без парола към всички контейнери на база данни. За това трябва да знаем IP адреса за всеки възел на базата данни. За да го разберем, можем да изпълним следната команда за всеки възел:

$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.5",

След това прикачете към интерактивната конзола на контейнера ClusterControl:

$ docker exec -it clustercontrol bash

И копирайте SSH ключа във всички контейнери на база данни:

$ ssh-copy-id 172.17.0.5

Сега имаме стартирани и работещи сървърни възли, трябва да разположим нашия клъстер от база данни. За да го направим по лесен начин, ще използваме ClusterControl.

За да извършите внедряване от ClusterControl, отворете потребителския интерфейс на ClusterControl на адрес http://[Docker_Host]:5000/clustercontrol, след което изберете опцията „Внедряване“ и следвайте инструкциите, които се появяват.

Когато избираме TimescaleDB, трябва да посочим потребител, ключ или парола и порт за свързване чрез SSH към нашите сървъри. Също така имаме нужда от име за нашия нов клъстер и ако искаме ClusterControl да инсталира съответния софтуер и конфигурации вместо нас.

След като настроим информацията за SSH достъп, трябва да дефинираме потребителя на базата данни, версията и datadir (по избор). Можем също да посочим кое хранилище да използваме.

В следващата стъпка трябва да добавим нашите сървъри към клъстера, който ще създадем.

Тук трябва да използваме IP адреса, който получихме от всеки контейнер по-рано.

В последната стъпка можем да изберем дали нашата репликация ще бъде синхронна или асинхронна.

Можем да наблюдаваме състоянието на създаването на нашия нов клъстер от монитора на активността на ClusterControl.

След като задачата приключи, можем да видим нашия клъстер в главния екран на ClusterControl.

Имайте предвид, че ако искате да добавите още възли в режим на готовност, можете да го направите от потребителския интерфейс на ClusterControl в менюто Действия на клъстера.

По същия начин, ако вашият TimescaleDB клъстер работи на Docker и искате ClusterControl да го управлява, за да може да използва всички функции на тази система като наблюдение, архивиране, автоматично превключване при отказ и дори повече, можете просто да стартирате Контейнер ClusterControl в същата Docker мрежа като контейнерите на базата данни. Единственото изискване е да се гарантира, че целевите контейнери имат инсталирани свързани с SSH пакети (openssh-server, openssh-clients). След това разрешете SSH без парола от ClusterControl към контейнерите на базата данни. След като приключите, използвайте функцията „Импортиране на съществуващ сървър/клъстер“ и клъстерът трябва да бъде импортиран в ClusterControl.

Един възможен проблем при стартиране на контейнери е присвояването на IP адрес или име на хост. Без инструмент за оркестриране като Kubernetes, IP адресът или името на хост може да са различни, ако спрете възлите и създадете нови контейнери, преди да го стартирате отново. Ще имате различен IP адрес за старите възли и ClusterControl предполага, че всички възли работят в среда със специален IP адрес или име на хост, така че след промяна на IP адреса трябва да импортирате отново клъстера в ClusterControl. Има много решения за този проблем, можете да проверите тази връзка, за да използвате Kubernetes със StatefulSet, или тази за стартиране на контейнери без инструмент за оркестриране.

Заключение

Както видяхме, внедряването на TimescaleDB с Docker трябва да бъде лесно, ако не искате да конфигурирате среда за репликация или отказ и ако не искате да правите промени в версията на ОС или инсталацията на пакети от база данни.

С ClusterControl можете да импортирате или разгръщате своя TimescaleDB клъстер с Docker, като използвате изображението на ОС, което предпочитате, както и да автоматизирате задачите за наблюдение и управление като архивиране и автоматично превключване/възстановяване.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Колко скъпи са имплицитните преобразувания отстрани на колона?

  2. SQL по-малко или равно на (=) оператор за начинаещи

  3. Какво бих искал да видя в Amazon EC2 за управление на бази данни

  4. Кога да преминете към по-голям RDS екземпляр

  5. Какво прави дизайнерът на база данни?