AWS의 PostgreSQL: 우려 사항 제거

14920 단어 postgresauroraawsrds
나는 어떤 사람이 PostgreSQL 위탁 관리 서비스가 지역 사회에서 진정한 PostgreSQL이 아니라는 것을 듣고 읽었다.
이것은 잘못된 것이다. 내가 이 글을 쓴 것은 이 점을 분명히 하기 위해서이다.

EC2의 PostgreSQL


분명히, 당신은 EC2 실례에 PostgreSQL을 설치하여 Iaas (인프라 시설 즉 서비스) 에서 실행되는 데이터베이스로 사용할 수 있습니다.원본 코드에서 그것을 컴파일하고 원하는 확장을 추가할 수 있는 완전한 버전 선택이 있습니다.PostgreSQL은 구독할 필요가 없기 때문에 비용이 가장 낮습니다.하지만 당신은 모든'운영'업무를 해야 한다(그래서 TCO가 생각보다 높을 수도 있다).만약 당신이 이렇게 한다면, 당신의 백업을 잘 보관하세요.현재 무상태 응용 프로그램에 끼워 넣은 데이터베이스로 마이크로 서비스를 구축하는 추세이다. 사람들은 데이터베이스가 유상태 구성 요소라는 것을 잊어버렸다(15년 전에는 우리가 지구 구성 요소라고 불렀고 30년 전에는 지구 구성 요소라고 불렀다). 다른 곳에서 정지하고 시작할 수 없다.그러나 클라우드가 위탁 관리 솔루션이라고 생각한다면 EC2+EBS에 PostgreSQL을 설치하는 것은 효과적인 해결 방안이다.의심할 여지없이 당신은 지역 사회 박사 후의 관리자입니다.

RDS의 관리형 PostgreSQL


여기는 제가 잘못된 정보를 들은 부분이기 때문에 명확히 말씀드리자면, Amazon RDS for PostgreSQL은 진정한 PostgreSQL을 실행하고 있습니다. 이것은 Postgres 커뮤니티 소스 코드에서 컴파일된 것입니다. (우리는 슈퍼 사용자 접근 권한이 없기 때문에 보안 모델에 대해 약간의 변경만 해서 rdsadmin에 대한 조작을 허용합니다.)RDS는 모든 위탁 관리 관계 데이터베이스의 가족 이름으로 소스 데이터베이스(PostgreSQL,MySQL,MariaDB), 일부 상업 데이터베이스(Oracle 데이터베이스,Microsoft SQL Server)와 아마존 오로라(저는 뒤에서 토론할 것)를 포함한다.다음은 RDS에서 PostgreSQL 데이터베이스를 만드는 방법입니다. PostgreSQL 로고가 있는'PostgreSQL'을 선택할 수 있고 대부분의 지원되는 버전을 선택할 수 있습니다(본문을 작성할 때: 9.5.2에서 12.4 사이의 부차적인 버전).

여기에는 다른 뜻이 없습니다. 단 하나의 서비스만이 PostgreSQL 이름과 로고를 가지고 있습니다.너는 여기서 극광을 잘못 선택해서는 안 된다.아마존 RDS PostgreSQL 서비스를 만들면'진정한'PostgreSQL을 가지게 됩니다.너는 심지어 무료층에서 이렇게 할 수 있다.
버전 및 컴파일을 확인할 수 있습니다.

$ PGHOST=database-1.ce5fwv4akhjp.eu-central-1.rds.amazonaws.com PGPORT=5432 PGPASSWORD=postgres psql -U postgres

psql (12.4)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> select version();
                                                version
-------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
(1 row)
이러한 기능의 유일한 차이점은 관리되는 데이터베이스이기 때문에 사용자가 가진 권한이 없다는 것입니다.

postgres=> \du
                                                                     List of roles
    Role name    |                         Attributes                         |                          Member of

----------------------+------------------------------------------------------------+---------------------------------------------------
 postgres        | Create role, Create DB                                    +| {rds_superuser}
                 | Password valid until infinity                              |
 rds_ad          | Cannot login                                               | {}
 rds_iam         | Cannot login                                               | {}
 rds_password    | Cannot login                                               | {}
 rds_replication | Cannot login                                               | {}
 rds_superuser   | Cannot login                                               | {pg_monitor,pg_signal_backend,rds_replication,rds_password}
 rdsadmin        | Superuser, Create role, Create DB, Replication, Bypass RLS+| {}
                 | Password valid until infinity                              |
 rdsrepladmin    | No inheritance, Cannot login, Replication                  | {}

postgres=> select * from pg_hba_file_rules;

 line_number | type  |   database    | user_name  | address  | netmask | auth_method | options | error
------------------+-------+---------------+------------+----------+---------+-------------+---------+-------
           4 | local | {all}         | {all}      |          |         | md5         |         |
          10 | host  | {all}         | {rdsadmin} | samehost |         | md5         |         |
          11 | host  | {all}         | {rdsadmin} | 0.0.0.0  | 0.0.0.0 | reject      |         |
          12 | host  | {rdsadmin}    | {all}      | all      |         | reject      |         |
          13 | host  | {all}         | {all}      | 0.0.0.0  | 0.0.0.0 | md5         |         |
          14 | host  | {replication} | {all}      | samehost |         | md5         |         |

그러나 이는 수퍼유저가 아닌 커뮤니티 소스에서 설치된 PostgreSQL과 동일합니다.
RDS 전용 추가 라이브러리(오픈 소스 아님)도 있습니다.

postgres=> show shared_preload_libraries;

  shared_preload_libraries
----------------------------------
 rdsutils,pg_stat_statements

postgres=> select name,setting from pg_settings where name like 'rds.%';

                  name                  |                                                                                                                                                                                                                                                                                                                                                                                          setting                                                                                                                                                                                                                                                                                            
---------------------------------------------+------------------------------------------------------------------------
 rds.extensions                         | address_standardizer, address_standardizer_data_us, amcheck, aws_commons, aws_s3, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hll, hstore, hstore_plperl, intagg, intarray, ip4r, isn, jsonb_plperl, log_fdw, ltree, orafce, pageinspect, pgaudit, pgcrypto, pglogical, pgrouting, pgrowlocks, pgstattuple, pgtap, pg_buffercache, pg_freespacemap, pg_hint_plan, pg_prewarm, pg_proctab, pg_repack, pg_similarity, pg_stat_statements, pg_transport, pg_trgm, pg_visibility, plcoffee, plls, plperl, plpgsql, plprofiler, pltcl, plv8, postgis, postgis_tiger_geocoder, postgis_raster, postgis_topology, postgres_fdw, prefix, rdkit, sslinfo, tablefunc, test_parser, tsm_system_rows, tsm_system_time, unaccent, uuid-ossp
 rds.force_admin_logging_level          | disabled
 rds.force_autovacuum_logging_level     | info
 rds.internal_databases                 | rdsadmin,template0
 rds.logical_replication                | off
 rds.rds_superuser_reserved_connections | 2
 rds.restrict_logical_slot_creation     | off
 rds.restrict_password_commands         | off
 rds.superuser_variables                | session_replication_role
 rds.tablespace_path_prefix             | /rdsdbdata/db/base/tablespace
이것은 여전히 확장성을 허용하는 지역 사회 버전이다.
또한 RDS Performance Insights 시간 x축과 활동 세션 y축으로 데이터베이스 활동을 표시하고 이벤트를 기다리기 위해 아래로 뚫는 추가 기능도 있다.
궁금해서 PostgreSQL 릴리스에서 제공하는 회귀 테스트를 실행했습니다.

PGHOST=database-1.ce5fwv4akhjp.eu-central-1.rds.amazonaws.com PGPORT=5432 PGPASSWORD=postgres psql -U postgres -c "select version();"
cd /var/tmp
git clone --branch REL_12_STABLE https://github.com/postgres/postgres.git
cd postgres
./configure
cd src/test/regress
export PGHOST=database-1.ce5fwv4akhjp.eu-central-1.rds.amazonaws.com
export PGPORT=5432
export PGPASSWORD=postgres
export PGUSER=postgres
make installcheck
먼저 매개변수를 설정했지만 권한이 없어 실패했습니다.

============== dropping database "regression"         ==============
DROP DATABASE
============== creating database "regression"         ==============
CREATE DATABASE
ERROR:  permission denied to set parameter "lc_messages"
command failed: "/usr/local/pgsql/bin/psql" -X -c "ALTER DATABASE \"regression\" SET lc_messages TO 'C';ALTER DATABASE \"regression\" SET lc_m
onetary TO 'C';ALTER DATABASE \"regression\" SET lc_numeric TO 'C';ALTER DATABASE \"regression\" SET lc_time TO 'C';ALTER DATABASE \"regressio
n\" SET bytea_output TO 'hex';ALTER DATABASE \"regression\" SET timezone_abbreviations TO 'Default';" "regression"
make: *** [installcheck] Error 2
트랜잭션 데이터베이스에서 클라우드 공급자는 플랫폼을 보호하기 위해 관리 명령을 잠가야 하지만, 우리는 파라미터 그룹을 만들어서 이 파라미터를 정의할 수 있다.이것이 바로 제가 콘솔에서 한 것입니다. 그리고 pg regress에서 Alter 데이터베이스를 삭제했습니다.c:

sed -ie 's/"ALTER DATABASE/--&/' pg_regress.c
그리고 나는 회귀 테스트를 실행할 준비가 되어 있다.

[opc@a regress]$ make installcheck

...

../../../src/test/regress/pg_regress --inputdir=. --bindir='/usr/local/pgsql/bin'    --dlpath=. --max-concurrent-tests=20  --schedule=./serial_schedule
(using postmaster on database-1.ce5fwv4akhjp.eu-central-1.rds.amazonaws.com, port 5432)
============== dropping database "regression"         ==============
DROP DATABASE
============== creating database "regression"         ==============
CREATE DATABASE
============== running regression test queries        ==============
test tablespace                   ... FAILED     1406 ms
test boolean                      ... ok          684 ms
test char                         ... ok          209 ms
test name                         ... ok          311 ms
test varchar                      ... ok          201 ms
test text                         ... ok          549 ms
test int2                         ... ok          354 ms
test int4                         ... ok          580 ms
test int8                         ... ok          954 ms
test oid                          ... ok          222 ms
test float4                       ... FAILED      660 ms
test float8                       ... FAILED     1136 ms
test bit                          ... ok         1751 ms
test numeric                      ... ok         5388 ms

...

test hash_part                    ... ok          240 ms
test indexing                     ... FAILED     6406 ms
test partition_aggregate          ... ok         1569 ms
test partition_info               ... ok          620 ms
test event_trigger                ... FAILED     1237 ms
test fast_default                 ... ok         1990 ms
test stats                        ... FAILED      643 ms

======================================================
 90 of 194 tests failed, 1 of these failures ignored.
======================================================

The differences that caused some tests to fail can be viewed in the
file "/var/tmp/postgres/src/test/regress/regression.diffs".  A copy of the test summary that you see
above is saved in the file "/var/tmp/postgres/src/test/regress/regression.out".
권한이 부족하여 여러 개의 테스트가 실패했습니다.실제로 pg regression은 모든 특권을 원합니다.RDS PostgreSQL이 예상에 부합되는지 테스트할 때 pg 회귀를 사용하는 것은 좋은 생각이 아니다.그것은 기능 테스트를 위해 설계된 것이 아니다.

RDS Aurora에서 PostgreSQL과 유사한 API


이것이 바로 곤혹의 근원이다.아우라는 아마존이 만든 전용 데이터베이스다.그들은 먼저 MySQL을 갈라놓고 저장층을 수정함으로써 클라우드 로컬 데이터베이스를 구축한다.모든 다른 RDS 데이터베이스와 마찬가지로 데이터베이스 서비스는 데이터베이스 파일을 실례적으로 실행되는 데이터베이스 노드에 연결된 EBS 블록 저장소에 저장하는 것이 아니라 계산(EC2)과 저장소(여러 개의 AZ에 분포하여 높은 가용성을 제공하기 위해 DynamoDB 저장소와 유사)의 단독(미형) 서비스 분할을 제공한다.Aurora 코드는 소스가 아닌 MySQL 커뮤니티와는 매우 다릅니다.많은 개선으로 갈수록 많아지다.그것의 일부분은 EC2에서 실행되어 SQL 문장과 업무를 분석하고 최적화하며 실행하며 캐시에 있는 버퍼를 업데이트합니다.그것의 일부분은 저장 서버에서 실행되고 저장 서버는 다시 수신하여 데이터 블록에 적용됩니다. 이 데이터 블록은 카드 리더와 실례적으로 나누어 주고 공유됩니다.아마존은 2014년 Aurora를 RDS의 또 다른 데이터베이스 엔진으로 사용해 왔다.나는 이미 사본을 몇 개의 파일 아래에 붙였다.기록을 보려면 https://aws.amazon.com/rds/ 페이지의 조직 스냅샷을 보십시오.Amazon은 코드의 하단에 많은 수정을 했지만, 상단을 MySQL (버전 5) 과 호환하여 Aurora로의 응용 프로그램 이전을 간소화시켰다.Aurora는 MySQL과 호환되는 새로운 데이터베이스입니다.RDS에서 Aurora 서비스를 선택하면 호환되는 MySQL 버전을 선택할 수 있습니다.예를 들어, 최신 버전의 Aurora 2.09.레이블은 Aurora(MySQL 5.7)입니다.클라우드 로컬 스토리지가 수정되었을 뿐만 아니라 Amazon도 흥미로운 개선을 가져왔습니다. 불행하게도 이러한 개선은 소스 커뮤니티에 피드백되지 않았습니다.
다음은 아카이브를 캡처한 것입니다.org, 처음부터 Aurora에 사용되는 RDS는 MySQL에 사용되는 RDS와 다르다는 것을 보았습니다.Aurora에서 MySQL이나 PostgreSQL을 언급할 때 항상 "호환"을 언급합니다.

내가 보기에 아마존은 데이터베이스가 무엇인지, 그리고 그들의 전문 엔진이 무엇인지에 대해 어떠한 모호함도 가지고 있지 않다는 것이다.
MySQL이 호환되는 아우라는 2014년부터 2017년까지 유일하게 호환된 API이기 때문에 말하자면 길다.그리고 강력한 저장 엔진과 층이 좋은 코드가 있기 때문에 그들은 또 다른 스타일의 Aurora를 구축했고 Aurora의 MySQL을 PostgreSQL 상부로 대체했다.그리고 그들은 두 개의 전용 데이터베이스를 가지고 있다. 그것은 MySQL을 호환하는 Aurora와 PostgreSQL을 호환하는 Aurora이다.Aurora는 진정한 PostgreSQL 엔진으로 홍보된 적이 없는 '호환성' 으로 알고 있습니다.그들은 RDS PostgreSQL을 가지고 있다.나는 그것들이 서로 다른 용례가 있다고 생각한다.Aurora는 고가용성, 확장성 및 탄력성이 가장 중요한 경우에 적합할 수 있습니다.PostgreSQL은 더 낮은 블록 저장 지연을 제공할 수 있고 더 저렴할 수 있습니다. (그러나 Aurora serverless는 아주 적은 데이터베이스 비용을 낮출 수 있습니다.)
그러나 일부 Aurora 사용자들은 PostgreSQL 커뮤니티에 도움을 요청하고 있는 곤혹스러움이 여전히 존재한다.PostgreSQL 커뮤니티는 이 엔진을 잘 알고 있기 때문에 사용자들에게 큰 도움이 된다. (이 엔진은 좋은 문서 기록을 가지고 있으며 원본 코드와 원본 주석에 접근할 수 있기 때문이다.)그러나 그들은 극광을 위해 아무것도 할 수 없다. 왜냐하면 우리는 심지어 무엇이 수정되었는지조차 모른다.예를 들어, 내가 한 문장 previous post 에서 언급한 바와 같이, 일부 대기 사건은 특정한au Aurora이다. Postgres 메일 목록을 묻지 마라.또한 PostgreSQL 커뮤니티는 아마존이 PostgreSQL 코드에 대한 개선과 커뮤니티 공유에 감사할 것이라고 생각합니다.

기타 공용 클라우드의 PostgreSQL


아마존 RDS PostgreSQL은 지역 사회에서 진정한 PostgreSQL일 뿐만 아니라 내가 보기에도 가장 선진적인 관리 서비스 중의 하나이다.
  • Oracle Cloud는 PostgreSQL에 위탁 관리 서비스를 제공하지 않고 하나Bitnami image만 있다.나는 언젠가 우리가 MySQL과 같은 품질의 위탁 관리 서비스를 가질 수 있기를 바란다.
  • Azure는 오래된 서비스running on Windows를 제공했지만 Citus 데이터를 구매하고 유명한 PostgreSQL 공헌자를 고용하면서 상황이 달라질 것이다.
  • 구글 클라우드 데이터베이스에 괜찮은 위탁 관리 서비스가 하나 있는데,
  • .
    백업과 관련하여 Amazon RDS PostgreSQL은 오류를 방지하거나 복구할 수 있는 모든 기능을 갖추고 있으며 이러한 기능은 다음과 같습니다.


    프랭크 파초트

    관리형 데이터베이스 서비스의 5가지 주요 기능인 RDS PostgreSQL 검사 5가지👍1/5⌚✅마지막 백업 이후의 시점 (보존 기간 중 어느 시점) 으로 리스토어 가능
    2020년 11월 8일 밤 22:28

    좋은 웹페이지 즐겨찾기