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

Как да разположите PostgreSQL в Docker контейнер с помощта на ClusterControl

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

В този блог ще видим как можем лесно да внедрим настройка на PostgreSQL чрез Docker и как да превърнем нашата настройка в настройка за първична/готовна репликация с помощта на ClusterControl.

Как да разположите PostgreSQL с Docker

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

Изображението е достъпно в Docker Hub и можете да го намерите от командния ред:

$ docker search postgres
NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
postgres                                     The PostgreSQL object-relational database sy…   6519                [OK]

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

$ docker pull postgres

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

$ docker run -d --name node1 -p 6551:5432 postgres
$ docker run -d --name node2 -p 6552:5432 postgres
$ docker run -d --name node3 -p 6553:5432 postgres

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

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                 PORTS                                                                                     NAMES
51038dbe21f8        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6553->5432/tcp                                                                    node3
b7a4211744e3        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6552->5432/tcp                                                                    node2
229c6bd23ff4        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6551->5432/tcp                                                                    node1

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

$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.
postgres=#

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

Как да импортирате вашите PostgreSQL контейнери в ClusterControl

Свързани ресурси ClusterControl за PostgreSQL Разгръщане на PostgreSQL в Docker контейнер Използване на Kubernetes за внедряване на PostgreSQL

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

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

Първо, нека инсталираме свързани пакети с OpenSSH в контейнерите на базата данни, разрешаваме влизането в root, стартираме го и задаваме root парола:

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

Стартирайте контейнера ClusterControl (ако не е стартиран) и пренасочете порт 80 на контейнера към порт 5000 на хоста:

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

Уверете се, че контейнерът ClusterControl е готов:

$ docker ps | grep clustercontrol
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"         4 hours ago         Up 4 hours (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

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

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

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

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

$ docker exec -it clustercontrol bash

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

$ ssh-copy-id 172.17.0.6
$ ssh-copy-id 172.17.0.7
$ ssh-copy-id 172.17.0.8

Сега можем да започнем да импортираме клъстера в ClusterControl. Отворете уеб браузър и отидете на физическия IP адрес на хост на Docker с картографирания порт, напр. http://192.168.100.150:5000/clustercontrol , щракнете върху „Импортиране на съществуващ сървър/клъстер“ и след това добавете следната информация.

Трябва да посочим потребител, ключ или парола и порт за свързване чрез SSH към нашите сървъри. Имаме нужда и от име за нашия нов клъстер.

След като настроим информацията за SSH достъп, трябва да дефинираме потребителя на базата данни, версията, основания и IP адреса или името на хоста за всеки възел на базата данни.

Уверете се, че получавате зелена отметка при въвеждане на името на хоста или IP адреса, което показва, че ClusterControl може да комуникира с възела. След това щракнете върху бутона Импортиране и изчакайте, докато ClusterControl завърши работата си. Можете да наблюдавате процеса в секцията за активност на ClusterControl.

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

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

ClusterControlЕдинична конзола за цялата ви инфраструктура на базата данни Открийте какво още е новото в ClusterControlИнсталирайте ClusterControl БЕЗПЛАТНО

Как да разположите вашите PostgreSQL контейнери с ClusterControl

Сега нека видим как да разположим PostgreSQL с Docker, като използваме изображение на CentOS Docker (severalnines/centos-ssh) и изображение на ClusterControl Docker (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 и създайте администраторски потребител и парола по подразбиране.

Nekolikonines/centos-ssh се предлага с, в допълнение към активираната SSH услуга, функция за автоматично разгръщане, но тя е валидна само за Galera Cluster. PostgreSQL все още не се поддържа. Така че ще зададем променливата AUTO_DEPLOYMENT в 0 в командата за изпълнение на docker, за да създадем възлите на базата данни.

$ docker run -d --name postgres1 -p 5551:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres2 -p 5552:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres3 -p 5553:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh

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

$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                    PORTS                                                                                     NAMES
0df916b918a9        severalnines/centos-ssh       "/entrypoint.sh"    4 seconds ago       Up 3 seconds              22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5553->5432/tcp                             postgres3
4c1829371b5e        severalnines/centos-ssh       "/entrypoint.sh"    11 seconds ago      Up 10 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5552->5432/tcp                             postgres2
79d4263dd7a1        severalnines/centos-ssh       "/entrypoint.sh"    32 seconds ago      Up 31 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5551->5432/tcp                             postgres1
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    38 minutes ago      Up 38 minutes (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

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

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

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

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

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

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

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

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

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

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

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

Заключение

Както видяхме, внедряването на PostgreSQL с Docker може да бъде лесно в началото, но ще изисква малко повече работа за конфигуриране на репликацията. И накрая, трябва да наблюдавате своя клъстер, за да видите какво се случва. С ClusterControl можете да импортирате или разгръщате своя PostgreSQL клъстер с 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. Задаването на схема в PostgreSQL JDBC изглежда не работи

  2. PostgreSQL ред към колони

  3. Попълване на поле Many2many (odoo 8)

  4. BeanCreationException:Грешка при създаването на bean с име 'flywayInitializer'

  5. Orbeon Forms Postgres DB връзка