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, както и да автоматизирате задачите за наблюдение и управление, като архивиране и автоматично превключване/възстановяване. Изпробвайте го.