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 PostgreSQLBâ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ử.