I. Cài đặt và cấu hình Postgres
Các hướng dẫn triển khai này được sử dụng để tham khảo khi xây dựng công cụ cardano-db-sync, với mục tiêu là dễ dàng thiết lập và cung cấp một số cơ sở điều chỉnh cho những người mới sử dụng cơ sở dữ liệu Postgres.
1 Cài đặt Postgres.
Thực hiện các lệnh dưới đây để thiết lập máy chủ Postgres.
# Determine OS platform
OS_ID=$( (grep -i ^ID_LIKE= /etc/os-release || grep -i ^ID= /etc/os-release) | cut -d= -f 2)
DISTRO=$(grep -i ^NAME= /etc/os-release | cut -d= -f 2)
if [ -z "${OS_ID##*debian*}" ]; then
#Debian/Ubuntu
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
RELEASE=$(lsb_release -cs)
echo "deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
sudo apt-get -y install postgresql-16 postgresql-server-dev-16 postgresql-contrib libghc-hdbc-postgresql-dev
sudo systemctl restart postgresql
sudo systemctl enable postgresql
else
echo "We have no automated procedures for this ${DISTRO} system"
fi
Tạo người dùng trong Postgres
Đăng nhập vào phiên bản Postgres với quyền superuser:
echo $(whoami)
# <user>
sudo su postgres
psql
Lưu ý giá trị trả về từ lệnh echo $(whoami). Thay thế tất cả các trường hợp của <username> trong tài liệu dưới đây. Thực hiện các lệnh dưới đây trong giao diện psql. Thay thế <username> và <PasswordYouWant> bằng tên người dùng hệ điều hành của bạn (kết quả từ lệnh echo $(whoami) đã thực thi ở trên) và mật khẩu mà bạn muốn sử dụng để xác thực với Postgres:
CREATE ROLE <user> SUPERUSER LOGIN;
ALTER USER <user> PASSWORD 'PasswordYouWant';
\q
Gõ exit tại dòng lệnh để thoát khỏi Postgres và quay trở lại người dùng của bạn.
Xác minh đăng nhập vào phiên bản Postgres
export PGPASSFILE=$CNODE_HOME/priv/.pgpass
echo "/var/run/postgresql:5432:cexplorer:*:*" > $PGPASSFILE
chmod 0600 $PGPASSFILE
psql postgres
# psql (15.0)
# Type "help" for help.
#
# postgres=#
2. Cấu hình Postgres
Trước khi bạn bắt đầu điền dữ liệu vào cơ sở dữ liệu của mình bằng dữ liệu từ dbsync, dưới đây có thể là cấu hình cơ bản cho phiên bản Postgres của bạn bằng cách chỉnh sửa tệp /etc/postgresql/16/main/postgresql.conf.
Parameter | Value | Comment |
---|---|---|
data_directory | ‘/opt/cardano/cnode/guild-db/pgdb/15’ | Move postgres data directory to ZFS mount at /opt/cardano/cnode, ensure it’s writable by postgres user |
effective_cache_size | 8GB | Be conservative as Node and DBSync by themselves will need ~32-40GB of RAM if ledger-state is enabled |
effective_io_concurrency | 4 | Can go higher if you have substantially higher IOPs/IO throughputs |
lc_time | ‘en_US.UTF-8’ | Just to use standard server-side time formatting between instances, can adapt to your preferences |
log_timezone | ‘UTC’ | For consistency, to avoid timezone confusions |
maintenance_work_mem | 512MB | Helps with vacuum/index/foreign key maintainance (with 4 workers, it’s set to max 2GB) |
max_connections | 200 | Allow maximum of 200 connections, the koios connections are still controlled via postgrest db-pool |
max_parallel_maintenance_workers | 4 | Max workers postgres will use for maintainance |
max_parallel_workers | 4 | Max workers postgres will use across the system |
max_parallel_workers_per_gather | 2 | Parallel threads per query, do not increase to higher values as it will multiply memory usage |
max_wal_size | 4GB | Used for WAL automatic checkpoints (disabled later) |
max_worker_processes | 4 | Maximum number of background processes system can support |
min_wal_size | 1GB | Used for WAL automatic checkpoints (disabled later) |
random_page_cost | 1.1 | Use higher value if IOPs has trouble catching up (you can use 4 instead of 1.1) |
shared_buffers | 4GB | Conservative limit to allow for node/dbsync/zfs memory usage |
timezone | ‘UTC’ | For consistency, to avoid timezone confusions |
wal_buffers | 16MB | WAL consumption in shared buffer (disabled later) |
work_mem | 16MB | Base memory size before writing to temporary disk files |
Ngoài những điều trên, do bản chất sử dụng của dbsync (đồng bộ từ node và khởi động lại việc duyệt ngược trở lại snapshot trạng thái sổ cái đã lưu), chúng ta có thể tận dụng việc đồng bộ dữ liệu trên blockchain – vì chúng ta không bị ảnh hưởng bởi việc mất thông tin tạm thời khi khởi động lại phiên bản. Do đó, chúng ta có thể giảm nhẹ một số thiết lập liên quan đến việc đồng bộ dữ liệu , vì những thiết lập này ảnh hưởng đến IOPs và mức tải CPU. Chúng tôi khuyến nghị thiết lập 3 tùy chọn dưới đây trong tệp /etc/postgresql/16/main/postgresql.conf của bạn:
Parameter | Value |
---|---|
wal_level | minimal |
max_wal_senders | 0 |
synchronous_commit | off |
Sau khi bạn đã thực hiện xong các thay đổi, hãy đảm bảo khởi động lại dịch vụ Postgres bằng cách sử dụng lệnh
sudo systemctl restart postgresql
.