PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách triển khai PostgreSQL vào Docker Container bằng ClusterControl

Docker đã trở thành công cụ phổ biến nhất để tạo, triển khai và chạy các ứng dụng bằng cách sử dụng vùng chứa. Nó cho phép chúng tôi đóng gói một ứng dụng với tất cả các phần mà nó cần, chẳng hạn như thư viện và các phần phụ thuộc khác, và gửi tất cả thành một gói. Docker có thể được coi là một máy ảo, nhưng thay vì tạo ra toàn bộ hệ điều hành ảo, Docker cho phép các ứng dụng sử dụng cùng một nhân Linux với hệ thống mà chúng đang chạy và chỉ yêu cầu các ứng dụng được vận chuyển với những thứ chưa chạy trên đó. máy tính chủ. Điều này giúp tăng hiệu suất đáng kể và giảm kích thước của ứng dụng.

Trong blog này, chúng ta sẽ thấy cách chúng ta có thể dễ dàng triển khai thiết lập PostgreSQL thông qua Docker và cách chuyển thiết lập của chúng ta thành thiết lập sao chép chính / dự phòng bằng cách sử dụng ClusterControl.

Cách triển khai PostgreSQL với Docker

Đầu tiên, hãy xem cách triển khai PostgreSQL với Docker theo cách thủ công bằng cách sử dụng Hình ảnh Docker PostgreSQL.

Hình ảnh có sẵn trên Docker Hub và bạn có thể tìm thấy nó từ dòng lệnh:

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

Chúng tôi sẽ lấy kết quả đầu tiên. Chính thức. Vì vậy, chúng ta cần kéo hình ảnh:

$ docker pull postgres

Và chạy các vùng chứa nút ánh xạ một cổng cục bộ đến cổng cơ sở dữ liệu vào vùng chứa:

$ 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

Sau khi chạy các lệnh này, bạn phải tạo môi trường Docker này:

$ 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

Bây giờ, bạn có thể truy cập từng nút bằng lệnh sau:

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

Sau đó, bạn có thể tạo người dùng cơ sở dữ liệu, thay đổi cấu hình theo yêu cầu của bạn hoặc định cấu hình sao chép giữa các nút theo cách thủ công.

Cách nhập vùng chứa PostgreSQL của bạn vào ClusterControl

Tài nguyên liên quan ClusterControl cho PostgreSQL Triển khai PostgreSQL trên Docker Container Sử dụng Kubernetes để triển khai PostgreSQL

Bây giờ bạn đã thiết lập cụm PostgreSQL của mình, bạn vẫn cần theo dõi nó, cảnh báo trong trường hợp có vấn đề về hiệu suất, quản lý các bản sao lưu, phát hiện lỗi và tự động chuyển đổi dự phòng sang một máy chủ khỏe mạnh.

Nếu bạn đã có một cụm PostgreSQL chạy trên Docker và bạn muốn ClusterControl quản lý nó, bạn có thể chỉ cần chạy vùng chứa ClusterControl trong cùng một mạng Docker với các vùng chứa cơ sở dữ liệu. Yêu cầu duy nhất là đảm bảo các vùng chứa đích có các gói liên quan đến SSH được cài đặt (máy chủ openssh, máy khách openssh). Sau đó, cho phép SSH không mật khẩu từ ClusterControl vào vùng chứa cơ sở dữ liệu. Sau khi hoàn tất, hãy sử dụng tính năng “Nhập cụm / máy chủ hiện có” và cụm sẽ được nhập vào ClusterControl.

Đầu tiên, hãy Cài đặt các gói liên quan đến OpenSSH trên vùng chứa cơ sở dữ liệu, cho phép đăng nhập gốc, khởi động nó và đặt mật khẩu gốc:

$ 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

Khởi động vùng chứa ClusterControl (nếu chưa khởi động) và chuyển tiếp cổng 80 trên vùng chứa đến cổng 5000 trên máy chủ:

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

Xác minh rằng vùng chứa ClusterControl đã hoạt động:

$ 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

Mở trình duyệt web, truy cập http:// [Docker_Host]:5000 / clustercontrol và tạo người dùng và mật khẩu quản trị mặc định. Bây giờ bạn sẽ thấy trang chính của ClusterControl.

Bước cuối cùng là thiết lập SSH không mật khẩu cho tất cả các vùng chứa cơ sở dữ liệu. Đối với điều này, chúng ta cần biết Địa chỉ IP cho mỗi nút cơ sở dữ liệu. Để biết điều đó, chúng ta có thể chạy lệnh sau cho mỗi nút:

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

Sau đó, đính kèm vào bảng điều khiển tương tác vùng chứa ClusterControl:

$ docker exec -it clustercontrol bash

Sao chép khóa SSH vào tất cả các vùng chứa cơ sở dữ liệu:

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

Bây giờ, chúng ta có thể bắt đầu nhập cụm vào ClusterControl. Mở trình duyệt web và truy cập địa chỉ IP máy chủ thực của Docker với cổng được ánh xạ, ví dụ: http://192.168.100.150:5000/clustercontrol , nhấp vào “Nhập máy chủ / cụm hiện có”, rồi thêm thông tin sau.

Chúng tôi phải chỉ định Người dùng, Khóa hoặc Mật khẩu và cổng để kết nối bằng SSH với máy chủ của chúng tôi. Chúng tôi cũng cần một tên cho cụm mới của mình.

Sau khi thiết lập thông tin truy cập SSH, chúng ta phải xác định người dùng cơ sở dữ liệu, phiên bản, basedir và Địa chỉ IP hoặc Tên máy chủ cho mỗi nút cơ sở dữ liệu.

Đảm bảo rằng bạn nhận được dấu tích màu xanh lục khi nhập tên máy chủ hoặc địa chỉ IP, cho biết ClusterControl có thể giao tiếp với nút. Sau đó, nhấp vào nút Nhập và đợi cho đến khi ClusterControl hoàn thành công việc của nó. Bạn có thể theo dõi quá trình trong Phần Hoạt động ClusterControl.

Cụm cơ sở dữ liệu sẽ được liệt kê trong bảng điều khiển ClusterControl sau khi được nhập.

Lưu ý rằng, nếu bạn chỉ có một nút chính PostgreSQL, bạn có thể thêm nó vào ClusterControl. Sau đó, bạn có thể thêm các nút chờ từ giao diện người dùng ClusterControl để cho phép ClusterControl định cấu hình chúng cho bạn.

ClusterControlSingle Console cho Toàn bộ Cơ sở dữ liệu Cơ sở hạ tầng của bạnTìm hiểu những tính năng mới khác trong ClusterControlInstall ClusterControl MIỄN PHÍ

Cách triển khai vùng chứa PostgreSQL của bạn với ClusterControl

Bây giờ, hãy xem cách triển khai PostgreSQL với Docker bằng cách sử dụng Hình ảnh Docker CentOS (vàinines / centos-ssh) và Hình ảnh Docker ClusterControl (vàinines / clustercontrol).

Đầu tiên, chúng tôi sẽ triển khai Vùng chứa ClusterControl Docker bằng cách sử dụng phiên bản mới nhất, vì vậy chúng tôi cần kéo Hình ảnh Docker vàinines / clustercontrol.

$ docker pull severalnines/clustercontrol

Sau đó, chúng tôi sẽ chạy vùng chứa ClusterControl và xuất bản cổng 5000 để truy cập nó.

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

Bây giờ bạn có thể mở giao diện người dùng ClusterControl tại http:// [Docker_Host]:5000 / clustercontrol và tạo người dùng và mật khẩu quản trị viên mặc định.

Vàinines / centos-ssh đi kèm, ngoài dịch vụ SSH được bật, tính năng Tự động triển khai, nhưng nó chỉ hợp lệ cho Galera Cluster. PostgreSQL chưa được hỗ trợ. Vì vậy, chúng tôi sẽ đặt biến AUTO_DEPLOYMENT bằng 0 trong lệnh docker run để tạo các nút cơ sở dữ liệu.

$ 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

Sau khi chạy các lệnh này, chúng ta sẽ có môi trường Docker sau:

$ 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

Chúng ta cần biết Địa chỉ IP cho mỗi nút cơ sở dữ liệu. Để biết điều đó, chúng ta có thể chạy lệnh sau cho mỗi nút:

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

Bây giờ chúng ta đã thiết lập và chạy các nút máy chủ, chúng ta cần triển khai cụm cơ sở dữ liệu của mình. Để làm cho nó một cách dễ dàng, chúng tôi sẽ sử dụng ClusterControl.

Để thực hiện triển khai từ ClusterControl, hãy mở giao diện người dùng ClusterControl tại http:// [Docker_Host]:5000 / clustercontrol , sau đó chọn tùy chọn “Triển khai” và làm theo hướng dẫn xuất hiện.

Khi chọn PostgreSQL, chúng tôi phải chỉ định Người dùng, Khóa hoặc Mật khẩu và cổng để kết nối bằng SSH với máy chủ của chúng tôi. Chúng tôi cũng cần một tên cho cụm mới của mình và nếu chúng tôi muốn ClusterControl cài đặt phần mềm và cấu hình tương ứng cho chúng tôi.

Sau khi thiết lập thông tin truy cập SSH, chúng ta phải xác định người dùng cơ sở dữ liệu, phiên bản và datadir (tùy chọn). Chúng tôi cũng có thể chỉ định kho lưu trữ nào sẽ sử dụng.

Trong bước tiếp theo, chúng tôi cần thêm máy chủ của mình vào cụm mà chúng tôi sẽ tạo.

Khi thêm máy chủ của chúng tôi, chúng tôi có thể nhập IP hoặc tên máy chủ. Ở đây, chúng ta phải sử dụng Địa chỉ IP mà chúng ta đã nhận được từ mỗi vùng chứa trước đó.

Trong bước cuối cùng, chúng tôi có thể chọn xem bản sao của chúng tôi sẽ là Đồng bộ hay Không đồng bộ.

Chúng tôi có thể theo dõi trạng thái tạo cụm mới của mình từ trình theo dõi hoạt động ClusterControl.

Sau khi tác vụ hoàn thành, chúng ta có thể thấy cụm của mình trong màn hình ClusterControl chính.

Kết luận

Như chúng ta có thể thấy, việc triển khai PostgreSQL với Docker có thể dễ dàng ngay từ đầu nhưng sẽ yêu cầu thêm một chút công việc để định cấu hình sao chép. Cuối cùng, bạn nên theo dõi cụm của mình để xem điều gì đang xảy ra. Với ClusterControl, bạn có thể nhập hoặc triển khai cụm PostgreSQL của mình với Docker, cũng như tự động hóa các tác vụ giám sát và quản lý như sao lưu và tự động chuyển đổi dự phòng / phục hồi. Hãy dùng thử.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại Dấu thời gian Unix trong PostgreSQL

  2. Làm thế nào để ép kiểu mảng json sang mảng văn bản?

  3. Cách hoạt động của hàm Scale () trong PostgreSQL

  4. Cách nhanh chóng để khám phá số hàng của một bảng trong PostgreSQL

  5. xóa cột không tồn tại