postgresql+patroni+ zookeeper这样的组合架构下,修改PG参数的方式有很多种,比如修改postgresql.base.conf,然后重启pg数据库,但这不是一个好主意;也可以通过zk的命令来修改,但是其命令格式实在不敢恭维。因此建议的修改方式是通过patroni来修改。
首先看一份参数文件:
[postgres@micky1pg_log]$ patronictl -c /home/postgres/patroni/pg_micky01.yml show-config
loop_wait:10
master_start_timeout:300
maximum_lag_on_failover:1048576
postgresql:
parameters:
archive_command: /bin/date
archive_mode: true
autovacuum: true
autovacuum_max_workers: 3
bgwriter_delay: 10ms
checkpoint_timeout: 30min
full_page_writes: true
hot_standby: true
listen_addresses: '*'
log_autovacuum_min_duration: -1
log_checkpoints: true
log_connections: true
log_destination: csvlog
log_directory: log
log_file_mode: 384
log_filename:postgresql-%Y-%m-%d_%H%M%S.log
log_min_messages: warning
log_rotation_age: 1d
log_rotation_size: 10MB
log_timezone: Asia/Shanghai
log_truncate_on_rotation: false
logging_collector: true
maintenance_work_mem: 128MB
max_connections: 1000
max_wal_senders: 10
max_wal_size: 1GB
min_wal_size: 80MB
port: 1921
random_page_cost: 2.0
seq_page_cost: 1.0
shared_buffers: 128MB
superuser_reserved_connections: 3
synchronous_commit: false
unix_socket_directories: /tmp
unix_socket_group: ''
unix_socket_permissions: 511
wal_keep_segments: 512
wal_level: logical
work_mem: 4MB
use_pg_rewind: true
use_slots: true
retry_timeout:10
synchronous_mode:false
ttl: 30
注意加粗字体部分,这个是格式,如果看不到parameters,或这个关键字的位置不对,修改是无效的,徒劳。
另外参数和值的格式是:parameter:value
而不是:parameter = value
当然,还要注意中文字符,因为有时候败就败在“低级错误”上。
修改参数的命令为:
patronictl -c /home/postgres/patroni/pg_micky01.yml edit-config
其中patronictl是patroni的命令,如果环境变量里没有生命期路径的话,需要给出绝对路径;
/home/postgres/patroni是安装patroni的位置;
/home/postgres/patroni/pg_micky01.yml是定义集群的参数文件。
-c 和edit-config是patronictl命令的参数,edit-config用来编辑配置文件。
修改的时候和vi命令的用法是一样的,修改完会出现下面提示:
log_filename: 'postgresql-%a.log'
log_truncate_on_rotation: on
log_rotation_age: 1d
log_rotation_size: 0
logging_collector: on
log_file_mode: 0600
archive_command: 'cp %p /archive_wals/%f'
retry_timeout: 10
synchronous_mode: true
ttl: 30
~
~
~
"/tmp/pg_micky-config-abnp60jp.yaml" 36L, 832C written
---
+++
@@ -22,6 +22,15 @@
wal_level: replica
wal_log_hints: 'on'
work_mem: 32MB
+ log_destination: 'stderr'
+ log_directory: 'log'
+ log_filename: 'postgresql-%a.log'
+ log_truncate_on_rotation: on
+ log_rotation_age: 1d
+ log_rotation_size: 0
+ logging_collector: on
+ log_file_mode: 0600
+ archive_command: 'cp %p /archive_wals/%f'
retry_timeout: 10
synchronous_mode: true
ttl: 30
Apply these changes? [y/N]: y
Configuration changed
这样输入Y,然后保存设置,如果值设置不合理或字符错误,则不能被保存。
保存之后,patroni会自动同步其他节点这些参数,同时reload PG数据库参数使其生效。
但是,有些参数需要重启PG才能生效:
[postgres@micky1 ~]$ patronictl -c /home/postgres/patroni/pg_micky1.yml list
+ Cluster: pg_micky (6864143465257765565) ---+---------+----+-----------+ -------------------+
| Member | Host | Role | State | TL | Lag in MB | Pending restart |
+------------+----------------+--------------+---------+----+-----------+ -------------------+
| pg_micky01 | 192.168.140.74 | Sync Standby | running | 5 | 0 | * |
| pg_micky02 | 192.168.140.75 | | running | 5 | 0 | * |
| pg_micky03 | 192.168.140.76 | Leader | running | 5 | | * |
+------------+----------------+--------------+---------+----+-----------+ -------------------+
可以通过patroni的命令整个集群重启:
patronictl -c /home/postgres/patroni/pg_micky01.yml restart pg_micky
或者逐个节点重启:
patronictl -c /home/postgres/patroni/pg_micky01.yml restart pg_micky pg_micky01
patronictl -c /home/postgres/patroni/pg_micky01.yml restart pg_micky pg_micky02
patronictl -c /home/postgres/patroni/pg_micky01.yml restart pg_micky pg_micky03
评论
