Bắt đầu từ đâu?
Nơi tốt nhất tôi có thể tìm để bắt đầu không gì khác hơn là tài liệu chính thức. Ngoài ra còn có một kênh Youtube GCP cho những người thích đa phương tiện. Sau khi tìm thấy chính mình trong vùng đất tài liệu Cloud SQL, tôi đã chuyển sang Khái niệm nơi chúng tôi được hứa sẽ "phát triển sự hiểu biết sâu sắc" về sản phẩm.
Hãy bắt đầu!
Các tính năng của Google Cloud của PostgreSQL
Google Cloud SQL dành cho PostgreSQL cung cấp tất cả các tính năng tiêu chuẩn mà chúng tôi mong đợi từ một giải pháp được quản lý:tính khả dụng cao với tính năng chuyển đổi dự phòng tự động, sao lưu tự động, mã hóa khi nghỉ và chuyển, ghi nhật ký và giám sát nâng cao, và của khóa học một API phong phú để tương tác với tất cả các dịch vụ.
Và lịch sử một chút, hỗ trợ PostgreSQL bắt đầu vào tháng 3 năm 2017, cho đến thời điểm đó, công cụ cơ sở dữ liệu duy nhất được hỗ trợ là MySQL.
Cloud SQL chạy PostgreSQL trên nền tảng điện toán Thế hệ thứ hai của Google. Danh sách đầy đủ các tính năng có sẵn ở đây và cũng có ở đây. Xem lại trước đây, rõ ràng là chưa bao giờ có nền tảng Thế hệ thứ nhất cho PostgreSQL.
Cơ sở dữ liệu chạy trên nền tảng Thế hệ thứ hai dự kiến sẽ chạy với tốc độ nhanh hơn 7 lần và có dung lượng lưu trữ nhiều hơn 20 lần. Blog thông báo về nền tảng Thế hệ thứ hai đi sâu vào chi tiết của việc chạy thử nghiệm sysbench để so sánh Google Cloud SQL với AWS của đối thủ cạnh tranh chính sau đó trong cả hai phiên bản RDS và Aurora. Kết quả đã làm tôi ngạc nhiên khi chúng cho thấy Cloud SQL hoạt động tốt hơn trong khi các thử nghiệm gần đây được thực hiện bằng AWS Benchmark được phát hành khoảng một năm sau đó đã kết luận ngược lại. Đó là khoảng thời gian hỗ trợ PostgreSQL có sẵn. Trong khi tôi cảm thấy khó chịu với ý tưởng tự mình chạy điểm chuẩn, tôi đoán rằng có hai yếu tố tiềm ẩn có thể ảnh hưởng đến kết quả:điểm chuẩn sysbench của Google sử dụng các thông số khác nhau và AWS có thể đã cải thiện sản phẩm của họ trong thời gian đó.
Tương thích với GCP PostgreSQL
Như mong đợi, Google Cloud SQL dành cho PostgreSQL gần như là một bản thay thế bổ sung cho phiên bản cộng đồng và hỗ trợ tất cả các ngôn ngữ thủ tục SQL PL / pgSQL.
Một số tính năng không khả dụng vì lý do bảo mật, ví dụ:quyền truy cập SUPERUSER. Các tính năng khác đã bị loại bỏ do những rủi ro tiềm ẩn đối với sự ổn định và hiệu suất của sản phẩm. Cuối cùng, một số tùy chọn và thông số không thể thay đổi được, mặc dù có thể thực hiện các yêu cầu thay đổi hành vi đó thông qua Nhóm thảo luận Cloud SQL.
Cloud SQL cũng tương thích với giao thức PostgreSQL.
Khi nói đến cách ly giao dịch, Cloud SQL tuân theo hành vi mặc định của PostgreSQL, mặc định là mức cô lập Đã cam kết đọc.
Đối với một số thông số cấu hình máy chủ, Cloud SQL triển khai các phạm vi khác nhau vì những lý do không được giải thích trong tài liệu, vẫn là một điều quan trọng cần nhớ.
Mạng
Có nhiều cách để kết nối với cơ sở dữ liệu, tùy thuộc vào việc phiên bản đó nằm trên mạng riêng hay mạng công cộng (các ứng dụng kết nối từ bên ngoài GCP). Chung cho cả hai trường hợp là VPC được xác định trước do Google quản lý, nơi có tất cả các phiên bản cơ sở dữ liệu Cloud SQL.
IP Riêng
Máy khách kết nối với địa chỉ IP riêng được định tuyến qua kết nối ngang hàng giữa các VPC lưu trữ máy khách và phiên bản cơ sở dữ liệu tương ứng. Mặc dù không dành riêng cho PostgreSQL, điều quan trọng là phải xem lại các yêu cầu mạng, để tránh các sự cố kết nối. Một gotcha:sau khi được bật, khả năng IP riêng không thể bị xóa.
Kết nối từ Ứng dụng Bên ngoài
Kết nối từ các ứng dụng được lưu trữ bên ngoài GCP, có thể và phải được mã hóa. Ngoài ra, để tránh các cuộc tấn công khác nhau, các kết nối máy khách và ứng dụng phải cài đặt chứng chỉ máy khách được cung cấp. Quy trình tạo và định cấu hình chứng chỉ hơi phức tạp, đòi hỏi các công cụ tùy chỉnh để đảm bảo rằng chứng chỉ được gia hạn định kỳ. Đó có thể là một trong những lý do tại sao Google cung cấp tùy chọn sử dụng Cloud SQL Proxy.
Kết nối bằng Cloud SQL Proxy
Việc thiết lập khá đơn giản, trên thực tế, tôi thấy đúng với tất cả các hướng dẫn trong tài liệu Google Cloud SQL. Trên một lưu ý liên quan, việc gửi phản hồi về tài liệu rất đơn giản và tính năng chụp ảnh màn hình là lần đầu tiên đối với tôi.
Có nhiều cách để cấp phép kết nối proxy và tôi đã chọn định cấu hình tài khoản dịch vụ, giống như được nêu trong tài liệu Cloud SQL Proxy.
Khi mọi thứ đã sẵn sàng, đã đến lúc khởi động proxy:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5432 -credential_file=omiday-427c34fce588.json
2019/07/14 21:22:43 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:22:43 using credential file for authentication; [email protected]
2019/07/14 21:22:43 Listening on 127.0.0.1:5432 for omiday:us-west1:s9s201907141919
2019/07/14 21:22:43 Ready for new connections
Để kết nối với phiên bản từ xa, chúng tôi hiện đang sử dụng proxy bằng cách chỉ định localhost thay vì địa chỉ IP công cộng của phiên bản:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1"
Pager usage is off.
psql (11.4, server 9.6.11)
Type "help" for help.
Lưu ý rằng không có mã hóa nào vì chúng tôi đang kết nối cục bộ và proxy sẽ đảm nhận việc mã hóa lưu lượng truy cập vào đám mây.
Một tác vụ DBA phổ biến là xem các kết nối đến cơ sở dữ liệu bằng cách truy vấn pg_stat_activity. Tài liệu nói rằng các kết nối proxy sẽ được hiển thị dưới dạng cloudqlproxy ~ 1.2.3.4, vì vậy tôi muốn xác minh xác nhận quyền sở hữu đó. Tôi đã mở hai phiên dưới dạng postgres, một phiên qua proxy và một phiên khác từ địa chỉ nhà riêng của tôi, vì vậy, truy vấn sau sẽ thực hiện:
[email protected]:5432 postgres> select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 924
usesysid | 16389
usename | postgres
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2019-07-15 04:25:37.614205+00
xact_start | 2019-07-15 04:28:43.477681+00
query_start | 2019-07-15 04:28:43.477681+00
state_change | 2019-07-15 04:28:43.477684+00
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 8229
query | select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 2 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 946
usesysid | 16389
usename | postgres
application_name | psql
client_addr | <MY_HOME_IP_ADDRESS>
client_hostname |
client_port | 60796
backend_start | 2019-07-15 04:27:50.378282+00
xact_start |
query_start |
state_change | 2019-07-15 04:27:50.45613+00
wait_event_type |
wait_event |
state | idle
backend_xid |
backend_xmin |
query |
Có vẻ như thay vào đó các kết nối proxy được xác định là client_port ==-1 và client_addr trống. Điều này có thể được xác nhận thêm bằng cách so sánh dấu thời gian cho backend_start và nhật ký proxy bên dưới:
2019/07/14 21:25:37 New connection for "omiday:us-west1:s9s201907141919"
Tính khả dụng cao của PostgreSQL trên Google Cloud
Google Cloud SQL dành cho PostgreSQL đảm bảo tính khả dụng cao bằng cách sử dụng đồng bộ hóa dữ liệu lưu trữ mức thấp bằng các đĩa liên tục trong khu vực. Chuyển đổi dự phòng là tự động, với khoảng thời gian kiểm tra nhịp tim là một giây và chuyển đổi dự phòng được kích hoạt sau khoảng 60 giây.
Hiệu suất và Giám sát
Phần Hiệu suất của tài liệu chỉ ra các quy tắc chung của đám mây:giữ cho cơ sở dữ liệu (cả bản sao chép và đọc) gần ứng dụng và chia tỷ lệ phiên bản theo chiều dọc. Điều nổi bật là khuyến nghị cung cấp phiên bản có ít nhất 60 GB RAM khi hiệu suất là quan trọng.
Stackdriver cung cấp khả năng giám sát và ghi nhật ký, cũng như quyền truy cập vào nhật ký PostgreSQL:
Kiểm soát Truy cập
Điều này được triển khai ở cấp dự án, phiên bản và cơ sở dữ liệu.
Kiểm soát Truy cập Dự án
Kiểm soát truy cập dự án là kiểm soát truy cập dành riêng cho đám mây - nó sử dụng khái niệm vai trò IAM để cho phép các thành viên dự án (người dùng, nhóm hoặc tài khoản dịch vụ) truy cập vào các tài nguyên Cloud SQL khác nhau. Danh sách các vai trò hơi dễ hiểu, để có mô tả chi tiết về từng vai trò và các quyền liên quan, hãy tham khảo APIs Explorer hoặc API quản trị Cloud SQL cho một trong các ngôn ngữ lập trình được hỗ trợ.
Để chứng minh cách hoạt động của các vai trò IAM, hãy tạo tài khoản dịch vụ chỉ đọc (người xem):
Bắt đầu phiên bản proxy mới trên cổng 5433 bằng tài khoản dịch vụ được liên kết với vai trò của người xem:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5433 -credential_file=omiday-4508243deca9.json
2019/07/14 21:49:56 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:49:56 using credential file for authentication; [email protected]
2019/07/14 21:49:56 Listening on 127.0.0.1:5433 for omiday:us-west1:s9s201907141919
2019/07/14 21:49:56 Ready for new connections
Mở kết nối psql tới 127.0.0.1:5433:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1 port=5433"
Lệnh thoát bằng:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Rất tiếc! Hãy kiểm tra nhật ký proxy:
2019/07/14 21:50:33 New connection for "omiday:us-west1:s9s201907141919"
2019/07/14 21:50:33 couldn't connect to "omiday:us-west1:s9s201907141919": ensure that the account has access to "omiday:us-west1:s9s201907141919" (and make sure there's no typo in that name). Error during createEphemeral for omiday:us-west1:s9s201907141919: googleapi: Error 403: The client is not authorized to make this request., notAuthorized
Kiểm soát Truy cập Phiên bản
Quyền truy cập cấp phiên bản phụ thuộc vào nguồn kết nối:
Sự kết hợp của các phương thức ủy quyền thay thế pg_hba.conf phổ biến.
Sao lưu và Phục hồi
Theo mặc định, sao lưu tự động được bật:
Mặc dù các bản sao lưu không ảnh hưởng đến hoạt động đọc và ghi cơ sở dữ liệu nhưng chúng ảnh hưởng đến hiệu suất và do đó, nên lập lịch sao lưu trong thời gian hoạt động thấp hơn.
Để dự phòng, các bản sao lưu có thể được lưu trữ ở hai khu vực (có tính phí bổ sung) với tùy chọn chọn vị trí tùy chỉnh.
Để tiết kiệm dung lượng lưu trữ, hãy sử dụng tính năng nén. Các tệp nén .gz được khôi phục một cách minh bạch.
Cloud SQL cũng hỗ trợ sao chép phiên bản. Đối với tập dữ liệu nhỏ nhất, hoạt động mất khoảng 3 phút:
Thời gian bắt đầu sao chép 10:07:10:
Nhật ký PostgreSQL cho thấy PostgreSQL có sẵn trên phiên bản nhân bản lúc 10:10:47:
Đó vẫn là cách dễ dàng hơn so với sao lưu và khôi phục, để tạo bản sao của một phiên bản cho mục đích thử nghiệm, phát triển hoặc khắc phục sự cố.
Các phương pháp hay nhất của Google Cloud cho PostgreSQL
- Định cấu hình chính sách kích hoạt cho các phiên bản không bắt buộc phải chạy 24/7.
- Đặt phiên bản cơ sở dữ liệu trong cùng một vùng hoặc khu vực với các phiên bản máy tính và ứng dụng App Engine để tránh độ trễ mạng.
- Tạo phiên bản cơ sở dữ liệu trong cùng một vùng với Compute Engine. Nếu sử dụng bất kỳ loại kết nối nào khác, hãy chấp nhận vùng mặc định.
- Người dùng được tạo bằng Cloud SQL theo mặc định là người dùng siêu cấp trên đám mây. Sử dụng PostgreSQL ALTER ROLE để sửa đổi quyền của họ.
- Sử dụng phiên bản Cloud SQL Proxy mới nhất.
- Tên phiên bản phải bao gồm dấu thời gian để có thể sử dụng lại tên đó khi xóa và tạo lại phiên bản.
- pg_dump mặc định bao gồm các đối tượng lớn. Nếu cơ sở dữ liệu chứa BLOB-s, hãy thực hiện kết xuất trong khoảng thời gian hoạt động thấp để ngăn phiên bản không phản hồi.
- Sử dụng gcloud sql connect để nhanh chóng kết nối từ một máy khách bên ngoài mà không cần đưa địa chỉ IP của máy khách vào danh sách trắng.
- Đăng ký nhóm thông báo để nhận thông báo về các cập nhật và cảnh báo sản phẩm, chẳng hạn như các vấn đề khi tạo phiên bản:
- Đảm bảo rằng các ứng dụng triển khai các kỹ thuật quản lý kết nối cơ sở dữ liệu.
- Các phiên bản bị dừng hơn 90 ngày sẽ bị xóa trừ khi chúng không ở trạng thái tạm ngừng.
- Thực hiện chuyển đổi dự phòng thủ công để kiểm tra hành vi của ứng dụng và độ dài thời gian ngừng hoạt động.
- Sử dụng phiên bản công cụ mặc định.
- Dung lượng lưu trữ cho các phiên bản được định cấu hình để tự động tăng dung lượng lưu trữ, sẽ tăng lên 25 GB. Vì không thể lấy lại không gian lưu trữ, hãy đặt giới hạn tăng lên đối với kích thước ước tính của cơ sở dữ liệu trong chu kỳ ngân sách tiếp theo và theo dõi các truy vấn đang chạy,
- Sử dụng thời gian bảo trì “sớm hơn” cho các trường hợp thử nghiệm:
- Các ứng dụng phải sử dụng các kết nối tồn tại và thời gian dự phòng theo cấp số nhân để nhanh chóng khôi phục sau khi khởi động lại phiên bản.
- Ứng dụng dựa trên các bản sao đã đọc nên cân nhắc sử dụng 3 bản sao để tránh các sự cố do hỏng đĩa liên tục trong khu vực dẫn đến cả hai bản sao đều không khả dụng.
- Định cấu hình các bản sao đã đọc để cải thiện hiệu suất đọc.
- Bắt buộc phải khởi động lại phiên bản khi cập nhật danh sách địa chỉ IP được phép truy cập phiên bản công khai để ngắt kết nối các kết nối hiện có.
- Xem lại nhóm dành riêng cho StackOverflow Cloud SQL để biết thêm thông tin.
Khởi chạy Danh sách kiểm tra cho Cloud SQL
Phần danh sách kiểm tra trong tài liệu cung cấp tổng quan về các hoạt động được đề xuất khi thiết lập phiên bản Cloud SQL sẵn sàng sản xuất cho PostgreSQL. Đặc biệt, các ứng dụng phải được thiết kế để xử lý việc khởi động lại Cloud SQL. Ngoài ra, mặc dù không có giới hạn truy vấn trên giây nhưng vẫn có giới hạn kết nối.
Hỗ trợ Tiện ích mở rộng PostgreSQL GCP
Cloud SQL hỗ trợ hầu hết các phần mở rộng PostgreSQL. Tính đến thời điểm này, trong số 52 tiện ích mở rộng cộng đồng, có 22 tiện ích mở rộng không được hỗ trợ và 2 tiện ích mở rộng PostGIS không được hỗ trợ.
postgis_raster
postgis_sfcgal
Đối với các tiện ích mở rộng PostgreSQL, chúng tôi có thể xem xét kho đóng góp của PostgreSQL hoặc tốt hơn, khác với đầu ra của pg_available_extensions:
Thượng lưu:
~ $ psql -U postgres -p 54396
Pager usage is off.
psql (11.4, server 9.6.14)
Type "help" for help.
[email protected][local]:54396 postgres# select * from pg_available_extensions order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+----------------------------------------------------------------------
adminpack | 1.1 | | administrative functions for PostgreSQL
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
hstore_plperl | 1.0 | | transform between hstore and plperl
hstore_plperlu | 1.0 | | transform between hstore and plperlu
hstore_plpython2u | 1.0 | | transform between hstore and plpython2u
hstore_plpythonu | 1.0 | | transform between hstore and plpythonu
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
ltree_plpython2u | 1.0 | | transform between ltree and plpython2u
ltree_plpythonu | 1.0 | | transform between ltree and plpythonu
moddatetime | 1.0 | | functions for tracking last modification time
pageinspect | 1.5 | | inspect the contents of database pages at a low level
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_freespacemap | 1.1 | | examine the free space map (FSM)
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pg_visibility | 1.1 | | examine the visibility map (VM) and page-level visibility info
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgres_fdw | 1.0 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.1 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
timetravel | 1.0 | | functions for implementing time travel
tsearch2 | 1.0 | | compatibility package for pre-8.3 text search functions
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
xml2 | 1.1 | | XPath querying and XSLT
Cloud SQL:
[email protected]:5432 postgres> select * from pg_available_extensions where name !~ '^postgis' order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+--------------------------------------------------------------------
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
Các tiện ích mở rộng không được hỗ trợ trong Cloud SQL:
Các chức năng quản trịadminpack 1.1 administrative functions for PostgreSQL
autoinc 1.0 functions for autoincrementing fields
dblink 1.2 connect to other PostgreSQL databases from within a database
file_fdw 1.0 foreign-data wrapper for flat file access
hstore_plperl 1.0 transform between hstore and plperl
hstore_plperlu 1.0 transform between hstore and plperlu
hstore_plpython2u 1.0 transform between hstore and plpython2u
hstore_plpythonu 1.0 transform between hstore and plpythonu
insert_username 1.0 functions for tracking who changed a table
ltree_plpython2u 1.0 transform between ltree and plpython2u
ltree_plpythonu 1.0 transform between ltree and plpythonu
moddatetime 1.0 functions for tracking last modification time
pageinspect 1.5 inspect the contents of database pages at a low level
pg_freespacemap 1.1 examine the free space map (FSM)
pg_visibility 1.1 examine the visibility map (VM) and page-level visibility info
postgres_fdw 1.0 foreign-data wrapper for remote PostgreSQL servers
refint 1.0 functions for implementing referential integrity (obsolete)
seg 1.1 data type for representing line segments or floating-point intervals
tcn 1.0 Triggered change notifications
timetravel 1.0 functions for implementing time travel
tsearch2 1.0 compatibility package for pre-8.3 text search functions
xml2 1.1 XPath querying and XSLT
Ghi nhật ký
Các hoạt động được thực hiện trong Cloud SQL được ghi lại trong tab Hoạt động cùng với tất cả các chi tiết. Ví dụ từ việc tạo một phiên bản, hiển thị tất cả chi tiết phiên bản:
Chuyển PostgreSQL sang GCP
Để cung cấp khả năng di chuyển các cài đặt PostgreSQL tại chỗ, Google tận dụng pgBouncer.
Lưu ý rằng không có trình hướng dẫn GCP Console cho việc di chuyển PostgreSQL.
DBA Hãy coi chừng!
Tính khả dụng và nhân rộng cao
Một nút chính không thể chuyển đổi dự phòng thành một bản sao đã đọc. Phần tương tự nêu ra các khía cạnh quan trọng khác của các bản sao đã đọc:
- có thể được thực hiện ngoại tuyến bất kỳ lúc nào để vá lỗi
- không theo dõi nút chính trong một vùng khác sau khi chuyển đổi dự phòng - vì quá trình sao chép là đồng bộ, điều này có thể ảnh hưởng đến độ trễ của bản sao
- không có sự cân bằng tải giữa các bản sao, nói cách khác, không có ứng dụng điểm cuối nào có thể được trỏ tới
- kích thước phiên bản sao ít nhất phải bằng kích thước của nút chính
- không sao chép giữa các vùng
- không thể sao lưu các bản sao
- tất cả các bản sao phải được xóa trước khi một bản sao chính có thể được khôi phục từ bản sao lưu hoặc bị xóa
- sao chép theo tầng không khả dụng
Người dùng
Theo mặc định, “cloud superuser” là postgres, là một thành viên của vai trò cloudqlsuperuser. Đổi lại, cloudqlsuperuser kế thừa các vai trò PostgreSQL mặc định:
[email protected]:5432 postgres> \du+ postgres
List of roles
Role name | Attributes | Member of | Description
-----------+------------------------+---------------------+-------------
postgres | Create role, Create DB | {cloudsqlsuperuser} |
[email protected]:5432 postgres> \du+ cloudsqlsuperuser
List of roles
Role name | Attributes | Member of | Description
-------------------+------------------------+--------------+-------------
cloudsqlsuperuser | Create role, Create DB | {pg_monitor} |
Lưu ý rằng các vai trò SUPERUSER và REPLICATION không khả dụng.
Sao lưu và phục hồi
Không thể xuất các bản sao lưu.
Không thể sử dụng các bản sao lưu để nâng cấp một phiên bản, tức là khôi phục vào một công cụ PostgreSQL khác.
Các tính năng như PITR, Sao chép lôgic và Biên dịch JIT không khả dụng. Yêu cầu về tính năng có thể được gửi trong Trình theo dõi vấn đề của Google.
Mã hóa
Tạo phiên bản SSL / TLS được bật nhưng không được thực thi:
Trong chế độ này, bạn có thể yêu cầu mã hóa, tuy nhiên không thể xác thực chứng chỉ.
~ $ psql "sslmode=verify-ca user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: root certificate file "/home/lelu/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
Pager usage is off.
psql (11.4, server 9.6.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.
Cố gắng kết nối bằng psql với phiên bản được thực thi SSL sẽ trả về lỗi tự giải thích:
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: FATAL: connection requires a valid client certificate
Bộ nhớ
- Bộ nhớ có thể tăng lên sau khi tạo phiên bản nhưng không bao giờ giảm, vì vậy hãy coi chừng chi phí liên quan đến không gian bộ nhớ ngày càng tăng hoặc định cấu hình giới hạn tăng.
- Bộ nhớ được giới hạn ở 30 TB.
CPU
Các phiên bản có thể được tạo với ít hơn một lõi, tuy nhiên, tùy chọn này không khả dụng trong Bảng điều khiển Cloud SQL vì phiên bản phải được tạo bằng cách chỉ định một trong các loại máy mẫu, trong trường hợp này - bậc:
Ví dụ về cách tạo phiên bản mã chia sẻ bằng gcloud bên trong Cloud Shell:
Số lượng CPU được giới hạn ở 64, một giới hạn tương đối thấp đối với cài đặt, xem xét lại thời điểm 9.2 được đánh giá là các máy chủ cao cấp bắt đầu ở 32 lõi.
Vị trí Phiên bản
Vị trí đa vùng chỉ khả dụng để sao lưu.
Truy cập qua IP Công cộng
Theo mặc định, Trình hướng dẫn Bảng điều khiển GCP chỉ cho phép truy cập địa chỉ IP công khai, tuy nhiên, quyền truy cập bị từ chối cho đến khi mạng của khách hàng được định cấu hình:
Bảo trì
Các bản cập nhật có thể vượt quá cửa sổ bảo trì và các bản sao đã đọc được cập nhật bất kỳ lúc nào.
Tài liệu không chỉ định thời lượng của cửa sổ bảo trì là bao lâu. Thông tin được cung cấp khi tạo phiên bản:
Các thay đổi đối với số lượng CPU, kích thước bộ nhớ hoặc vùng chứa phiên bản định vị yêu cầu cơ sở dữ liệu ngoại tuyến trong vài phút.
Người dùng
Cloud SQL sử dụng các thuật ngữ “vai trò” và “người dùng” thay thế cho nhau.
Tính khả dụng cao
Chi phí cho một cấu hình có tính khả dụng cao gấp đôi phiên bản độc lập và bao gồm cả dung lượng lưu trữ.
Tự động chuyển đổi dự phòng được bắt đầu sau khoảng 60 giây sau khi nút chính không khả dụng. Theo báo cáo của Oracle MAA, điều này tương đương với khoản lỗ $ 5,800 mỗi phút. Cân nhắc rằng phải mất từ 2 đến 3 phút cho đến khi các ứng dụng có thể kết nối lại, sự cố mất điện tăng gấp đôi lên gấp ba lần. Ngoài ra, khoảng thời gian 60 giây nhịp tim dường như không phải là một tùy chọn có thể định cấu hình.
Sao chép
Không thể truy cập các bản sao đã đọc bằng một điểm cuối duy nhất, mỗi điểm nhận một địa chỉ IP mới:
Đĩa liên tục khu vực cung cấp dự phòng dữ liệu với chi phí hiệu suất ghi.
Cloud SQL sẽ không chuyển đổi dự phòng để đọc các bản sao, do đó trình đọc không thể được coi là giải pháp có tính khả dụng cao
Bản sao bên ngoài và bản chính bên ngoài hiện không được hỗ trợ.
Đang kết nối với Phiên bản
Google does not automatically renew the instance SSL certificates, however, both the initiation and rotation procedures can be automated.
If the application is built on the App Engine platform additional limits apply, such as 60 seconds for a database request to complete, 60 concurrent connections for PHP applications. The “App Engine Limits” section in Quotas and limits provides more details:
IP addresses in the range 172.17.0.0/16 are reserved.
Administration
Once started, operations cannot be canceled. Runaway queries can still be stopped by using the pg_terminate_backend and pg_cancel_backend PostgreSQL built-in functions.
A short demonstration using two psql sessions and starting a long running query in the second session:
[email protected]:5432 postgres> select now(); select pg_sleep(3600); select now();
now
-------------------------------
2019-07-16 02:08:18.739177+00
(1 row)
In the first session, cancel the long running query:
[email protected]:5432 postgres> select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2182
client_addr | 173.180.222.170
client_port | 56208
query | select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
backend_start | 2019-07-16 01:57:34.99011+00
-[ RECORD 2 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2263
client_addr | 173.180.222.170
client_port | 56276
query | select pg_sleep(3600);
backend_start | 2019-07-16 02:07:43.860829+00
[email protected]:5432 postgres> select pg_cancel_backend(2263); select now();
-[ RECORD 1 ]-----+--
pg_cancel_backend | t
-[ RECORD 1 ]----------------------
now | 2019-07-16 02:09:09.600399+00
Comparing the timestamps between the two sessions:
ERROR: canceling statement due to user request
now
-------------------------------
2019-07-16 02:09:09.602573+00
(1 row)
It’s a match!
While restarting an instance is a recommended method when attempting to resolve database instance issues, avoid restarting before the first restart completed.
Data Import and Export
CSV import/export is limited to one database.
Exporting data as an SQL dump that can be imported later, requires a custom pg_dump command.
To quote from the documentation:
pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \
| sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql
Pricing
Charge Type | Instance ON | Instance OFF |
Storage | Yes | Yes |
Instance | No | Yes |
Troubleshooting
Ghi nhật ký
All actions are recorded and can be viewed under the Activity tab.
Resources
Review the Diagnosing Issues with Cloud SQL instances and Known issues sections in the documentation.
Kết luận
Although missing some important features the PostgreSQL DBA is used to, namely PITR and Logical Replication, Google Cloud SQL provides out of the box high-availability, replication, encryption, and automatic storage increase, just to name a few, making manage PostgreSQL an appealing solution for organizations looking to quickly deploy their PostgreSQL workloads or even migrating from Oracle.
Developers can take advantage of cheap instances such as shared CPU (less than one CPU).
Google approaches the PostgreSQL engine adoption in a conservative manner, the stable offering lagging behind current upstream by 3 versions.
Just as with any solution provider consider getting support which can come in handy during edge scenarios such as when instances are suspended.
For professional support, Google maintains a list of partners which currently includes one of the PostgreSQL professional services , namely EDB.