Truyền phát sao chép trong PostgreSQL


7

Tôi đang cố gắng thiết lập hai máy chủ PostgreSQL trên một máy và thực hiện sao chép phát trực tuyến. Tôi đã thành công một lần, nhưng khi tôi đã thử lại theo chính xác các bước tương tự thì nó không hoạt động .. Đó là các bước: Tôi có $ PGDATA = home / postgresql / 9.1 / data và $ STANDBY = home / postgresql / 9.1 / dữ liệu2

  1. Thiết lập hai nút:
    initdb -D $ PGDATA
    initdb -D $ TIÊU CHUẨN
  2. Trong nút chính tạo một người dùng để nhân rộng. Tôi làm điều đó trong pgAdmin (nó có đặc quyền siêu người dùng)
  3. Trong nút chính trong pg_hba.conf thêm phần cho phép kết nối ở chế độ chờ: host replication repuser 127.0.0.1/0 md5
  4. Trong nút chính trong postgresql.conf được đặt:

    max_wal_senders = 1
    archive_mode = bật
    archive_command = 'cp% p ~ / postgresql / backup / archivingir /% f'
    wal_level = lưu trữ
    wal_keep_segments = 32

  5. Bắt đầu nút chủ và thực hiện sao lưu cơ sở:

    psql -d dellstore2 -c "CHỌN pg_start_backup ('sao lưu để sao chép', đúng)"
    rsync -av $ {PGDATA} / $ STANDBY - bao gồm postmaster.pid
    psql -d dellstore2 -c "chọn pg_stop_backup ()"
    
    pg_stop_backup nói rằng mọi thứ đều ổn, tất cả các tệp WAL đã được lưu trữ

  6. Trong nút dự phòng (data2) tôi tạo recovery.conf với:

    chế độ chờ_mode = 'trên'
    chính_conninfo = 'host = 127.0.0.1 port = 5432 user = repuser password = haslo'
    trigger_file = '/home/michau/postgresql/replication.trigger'
    restore_command = 'cp / home / michau / postgresql / backup / archuredir /% f "% p"'

  7. Bắt đầu nút chủ, sau đó bắt đầu nút chờ - sao chép sẽ bắt đầu và chế độ chờ sẽ bắt kịp với nút chính. Đó chính xác là những gì đã xảy ra lần đầu tiên. Bây giờ khi tôi bắt đầu chế độ chờ, tôi nhận được: lỗi "Địa chỉ đã được sử dụng" . Tất nhiên cả dự phòng và chủ đều có cùng một cổng được chỉ định trong postgresql.conf (chúng có chính xác các tệp postgresql.conf). Nếu tôi thay đổi cổng ở chế độ chờ thành 5433 thì tôi nhận được:

    LOG: hệ thống cơ sở dữ liệu đã ngừng hoạt động trong phục hồi vào 2012-06-12 19:48:01 CEST
    LOG: vào chế độ chờ
    cp: không thể stat / home / michau / postgresql / backup / archivingir / 000000010000000000000007: Không có tệp hoặc thư mục như vậy
    LOG: trạng thái phục hồi nhất quán đạt được tại 0/7000070
    LOG: bản ghi có độ dài bằng 0 tại 0/7000070
    cp: không thể stat / home / michau / postgresql / backup / archivingir / 000000010000000000000007: Không có tệp hoặc thư mục như vậy
    LOG: sao chép phát trực tuyến kết nối thành công với chính
    ĐĂNG NHẬP: làm lại bắt đầu từ 0/7000070
    

Và nó chỉ treo ở đây. Chạy ps -ef | sản lượng grep postgresql:

michau 2491 1898 0 19:46 pts / 0 00:00:00 postgres -D /home/michau/postgresql/9.1/data
michau 2493 2491 0 19:46? 00:00:01 postgres: quá trình nhà văn
michau 2494 2491 0 19:46? 00:00:00 postgres: quá trình nhà văn wal
michau 2495 2491 0 19:46? 00:00:00 postgres: quá trình khởi động autovacuum
michau 2496 2491 0 19:46? 00:00:00 postgres: quá trình lưu trữ cuối cùng là 000000010000000000000008
michau 2497 2491 0 19:46? 00:00:00 postgres: quy trình thu thập số liệu thống kê
michau 2571 2214 0 19:49 điểm / 1 00:00:00 postgres -D /home/michau/postgresql/9.1/data2
michau 2572 2571 0 19:49? 00:00:01 postgres: quá trình khởi động phục hồi 000000010000000000000009
michau 2575 2571 0 19:49? 00:00:01 postgres: quá trình nhà văn
michau 2578 2571 0 19:49? 00:00:02 postgres: quá trình nhận wal phát 0 / 99782DC
michau 2579 2491 0 19:49? 00:00:00 postgres: repal process repuser 127.0.0.1 (42142) streaming 0 / 99782DC
michau 2586 2491 0 19:51? 00:00:00 postgres: michau postgres :: 1 (49941) nhàn rỗi
michau 2587 2491 0 19:51? 00:00:01 postgres: michau dellstore2 :: 1 (49942) nhàn rỗi
0000000010000009 đang phục hồi khi thay đổi trong một thời gian, nhưng trong nửa giờ thì không còn nữa.

Tôi chắc chắn có một cái gì đó tôi phải làm lần đầu tiên và không được viết ra hoặc một cái gì đó, nhưng tôi hoàn toàn không biết phải nói nó là gì. Tôi sẽ đánh giá cao sự giúp đỡ nào.


Để làm rõ cấu hình của bạn trên Slave, bạn sử dụng số cổng nào cho các khóa này trong postgresql.conf? 'cổng' và 'chính_conninfo'? Cái trước phải là 5433 và cái sau là 5432.
Mark Stosberg

1
Đó là những gì tôi có ngay bây giờ, nhưng bản sao không hoạt động. Không phải các cổng giống nhau trong chủ và nô lệ nên trong trường hợp chuyển đổi dự phòng, nô lệ có thể thay thế chủ?
michauwilliam

2
Vì vậy, những gì không làm việc? Theo psđầu ra, việc nhân rộng dường như hoạt động.
Daniel Vérité

3
Các cổng không thể giống nhau khi chúng chạy trên cùng một máy. Việc chuyển đổi dự phòng thường được thực hiện với nhiều hơn một máy vật lý như với một máy đơn lẻ là vô nghĩa.
Lươn

Câu trả lời:


7

Bản sao PostgreSQL không bao giờ hoàn tất khôi phục. Đây là do thiết kế. Về cơ bản, một bản sao luôn ở chế độ "phục hồi sau thảm họa" ngoại trừ việc nó đang sử dụng nhận các phân đoạn WAL từ bản gốc chứ không phải trên đĩa.

Vì vậy, những gì bạn đang thấy không gây lo ngại. Nếu nó chưa hoạt động, thì bạn sẽ cần cung cấp một mô tả chi tiết hơn về những gì bạn đang cố gắng làm và những gì không hoạt động. Nhưng theo như bạn đang đăng thì có vẻ như bình thường.



0

Bạn có đang bắt đầu PostgreSQL ở chế độ chờ bằng lệnh postgresql không? Nếu có thì bạn nên sử dụng lệnh pg_ctl vì nó tách tiến trình máy chủ DB khỏi thiết bị đầu cuối. Với lệnh postgresql, nó sẽ chỉ hiển thị đầu ra nhật ký trên màn hình như bạn đã mô tả và ở đó vì đây là máy chủ dự phòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.