0
点赞
收藏
分享

微信扫一扫

postgresql12主从同步流复制

安装主节点

此处我用docker-compose安装比较简单不做过多说明

编辑docker-compose.yml

version: "3.7"
services:
  postgres:
    hostname: postgres
    container_name: postgres
    restart: always
    image: harbor.xxx.com/xxx/postgres:12.14-bullseye
    volumes:
      - ./data/db:/var/lib/postgresql/data
      - ./init:/home/init
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    network_mode: host

修改postgres.conf文件

listen_addresses = '*'
max_connections = 1000		
shared_buffers = 128MB			
dynamic_shared_memory_type = posix	
max_wal_size = 1GB
min_wal_size = 80MB
logging_collector = on		
log_directory = 'pg_log'			
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'	
log_file_mode = 0600			
log_truncate_on_rotation = on	
log_rotation_age = 7d			
log_rotation_size = 100MB		
log_min_error_statement = error	
log_min_duration_statement = 2	
log_timezone = 'Asia/Shanghai'
client_min_messages = warning		
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'			
lc_monetary = 'en_US.utf8'			
lc_numeric = 'en_US.utf8'			
lc_time = 'en_US.utf8'				
default_text_search_config = 'pg_catalog.english'
wal_level = replica  
max_wal_senders = 5 
wal_keep_segments = 128 
wal_sender_timeout = 60s 
max_connections = 200 
hot_standby = on 
max_standby_streaming_delay = 30s 
wal_receiver_status_interval = 10s 
hot_standby_feedback = on 
wal_log_hints = on 
synchronous_standby_names = 'standby01'

修改pg_hba.conf文件

local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
host    all             all             10.10.10.0/24           md5
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    replication     all             10.10.10.0/24           md5
host all all all md5

启动容器

[root@test-riverxyz postgres]# docker-compose ps
  Name                Command              State   Ports
--------------------------------------------------------
postgres   docker-entrypoint.sh postgres   Up  

创建复制用户

CREATE ROLE replica login replication encrypted password 'replica';

部署从库

编辑docker-compose.yml

和主库一样此处略。

启动容器

使用pg_basebackup复制

pg_basebackup -F p --progress -D /deploy/sorts/postgres/data/db -h 10.10.10.103 -p 5432 -U replica --password

此处如果从库的数据目录有数据会提示非空,清除数据即可。

修改postgres.conf

listen_addresses = '*'
port = 5432
max_connections = 1000
shared_buffers = 128MB
dynamic_shared_memory_type = posix
max_wal_size = 1GB
min_wal_size = 80MB
log_timezone = 'Asia/Shanghai'
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'
primary_conninfo = 'application_name=standby01 host=10.10.10.103 port=5432 user=replica password=replica'
recovery_target_timeline = latest
max_connections = 200
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_wal_senders = 15

此处主要是primary_conninfo开始的几行跟主库不一样,需要注意。

启动从库

[root@k8s-master-10 postgres]# docker-compose ps
  Name                Command              State   Ports
--------------------------------------------------------
postgres   docker-entrypoint.sh postgres   Up  

验证是否同步

查询主备库是否正常

在主库上查询是否为备库

postgres=# select pg_is_in_recovery();
pg_is_in_recovery
f 
(1 row) 

这里f代表false说明他是主库不是备库。 在备库上查询是否为备库

postgres=# select pg_is_in_recovery();
pg_is_in_recovery
t
(1 row)

此为t表示true,表示他是个备库

查询流复制状态

postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
pid |   state   | client_addr  | sync_priority | sync_state
-----+-----------+--------------+---------------+------------
45 | streaming | 10.10.10.233 |             1 | sync
sync_state为sync表示为同步流复制
postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
  pid   |   state   | client_addr | sync_priority | sync_state 
--------+-----------+-------------+---------------+------------
 227742 | streaming | 10.255.0.64 |             0 | async
(1 row)

如果sync_state为async表示为异步流复制

复制验证

在主库上创建一张表 image.png 可以看到从库也创建了张表 image.png 参考链接: https://zhuanlan.zhihu.com/p/265949547 https://blog.csdn.net/shipeng1022/article/details/109065181 https://blog.csdn.net/weixin_39540651/article/details/103770421

举报

相关推荐

0 条评论