postgres主从配置

一 .主备机器规划(各节点均进行以下操作)
1 设置host
master,slave两节点都要操作。
vi /etc/hosts
192.168.0.1 host1
192.168.0.1 host2

2.创建系统用户及datadir
useradd postgres
echo “postgres” | passwd postgres --stdin
mkdir /data/postgres/data -p
mkdir /data/postgres/log -p
mkdir /data/postgres/pg_archive -p
chown -R postgres.postgres /data/postgres/

3.解压安装文件;
yum -y update gcc
yum -y install g==
yum -y install g++
yum -y install gcc+
yum install -y libxml2-devel.x86_64
yum search libxml2-devel
yum search gcc
yum -y install libtool
yum -y install gcc-c++.x86_64
yum search readline
yum install -y readline-devel.x86_64
yum install -y zlib-devel.x86_86
cd /usr/local/
tar zxf /root/postgresql-9.5.10.tar.gz
cd /usr/local/postgresql-9.5.10/
./configure --prefix=/usr/local/pgsql --with-libxml
make
make install

4.环境变量配置及yum,各节点均操作
su - postgres
vi .bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export PGHOME=/usr/local/pgsql
export PGDATA=/data/postgres/data/
export PG_PATH=/usr/local/pgsql/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib/
export PATH=$PGHOME/bin:$PATH:
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres
export PGDATABASE=postgres

source .bash_profile

二.主库安装;
1.主库初始化postgresql;
initdb -D /data/postgres/data/ -E UTF-8 --locale=zh_CN.UTF-8

2.修改参数配置(相关参数需要按机器配置调节);
vi /data/postgres/data/postgresql.conf

listen_addresses = '*'          # what IP address(es) to listen on;
                                       
port = 5432                             # (change requires restart)
max_connections = 1000                  # (change requires restart)
                                       
shared_buffers = 400MB                 # min 128kB
                                       
work_mem = 8MB                          # min 64kB
maintenance_work_mem = 100MB           # min 1MB
dynamic_shared_memory_type = posix      # the default is the first option
                                     
bgwriter_delay = 10ms                   # 10-10000ms between rounds
wal_level = hot_standby                 # minimal, archive, hot_standby, or logical
                                        # (change requires restart)
synchronous_commit = on         # synchronization level;
                                
wal_buffers = 16MB                      # min 32kB, -1 sets based on shared_buffers
                                        # (change requires restart)
checkpoint_timeout = 5min               # range 30s-1h
archive_mode = on               # enables archiving; off, on, or always
                              
archive_command = 'cp %p /data/postgres/pg_archive/%f'   # command to use to archive a logfile segment
                               
                          
max_wal_senders = 8             # max number of walsender processes
                                # (change requires restart)
wal_keep_segments = 128         # in logfile segments, 16MB each; 0 disables
                                # (change requires restart)
                             
hot_standby = on                        # "on" allows queries during recovery
                                      
max_standby_archive_delay = -1  # max delay before canceling queries
                            
max_standby_streaming_delay = -1        # max delay before canceling queries
                                   
wal_receiver_status_interval = 2s       # send replies at least this often
                                     
default_statistics_target = 100 # range 1-10000
constraint_exclusion = partition        # on, off, or partition
                           
log_destination = 'csvlog'              # Valid values are combinations of
                                   
logging_collector = on                  # Enable capturing of stderr and csvlog
                                       
log_directory = 'pg_log'                # directory where log files are written,
                                        # can be absolute or relative to PGDATA
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
                                        # can include strftime() escapes
log_file_mode = 0600                    # creation mode for log files,
                                      
log_rotation_age = 60d                  # Automatic rotation of logfiles will
                                        # happen after that time.  0 disables.
log_rotation_size = 1000MB              # Automatic rotation of logfiles will
                                       
log_statement = 'mod'                   # none, ddl, mod, all
                                       
log_timezone = 'PRC'
                                       
datestyle = 'iso, mdy'
timezone = 'PRC'
                                       
lc_messages = 'en_US.UTF-8'                     # locale for system error message
                                        # strings
lc_monetary = 'en_US.UTF-8'                     # locale for monetary formatting
lc_numeric = 'en_US.UTF-8'                      # locale for number formatting
lc_time = 'en_US.UTF-8'                         # locale for time formatting
default_text_search_config = 'pg_catalog.english'
                                        # (change requires restart)
                                        # (change requires restart)
                                        # directory 'conf.d'
#include '/var/lib/pgsql/tmp/rep_mode.conf' # added by pgsql RA

3.启动主数据库并建立同步用户
pg_ctl -D /data/postgres/data -l /data/postgres/log/pg_server.log start &
create role replicator login replication encrypted password ‘replicator’;
管理账号:
postgres=# create role admin superuser encrypted password ‘admin’;

4.配置
4.1 pg_hba IP限制;
vi /data/postgres/data/pg_hba.conf
添加下面内容
host replication replicator 10.39.43.0/24 trust

4.2 pg_hba生效:
pg_ctl -D /data/postgres/data/ reload

三.从库安装;(多从,步骤相同)
1.不需要初始化,直接从主库备份就行,如有DATA直接删掉或改名掉
pg_basebackup -h 192.168.0.1 -U replicator -F p -P -D /data/postgres/data/
可能得输入密码
备注:
-h,主库主机,-p,主库服务端口;
-U,复制用户;
-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;
-P,同–progress,显示进度;
-D,输出到指定目录;

2.从上创建恢复文件recovery.conf

2.1.文件来源 此步可忽略
cp /usr/local/pgsql/share/recovery.conf.sample /data/postgres/data/recovery.conf

2.2
recovery文件中的参数
cat >>/data/postgres/data/recovery.conf <<EOF
standby_mode = on
primary_conninfo = ‘host=192.168.0.1 port=5432 user=replicator password=replicator’
recovery_target_timeline=‘latest’
EOF

备注:
vim ~/data/recovery.conf #在做基础备份时,也可通过-R参数在备份结束后自动生产一个recovery.conf文件
standby_mode = on #指明从库身份
primary_conninfo = ‘host=10.39.45.24 port=5432 user=同步用的用户名 password=密码’ #连接到主库信息
ecovery_target_timeline = ‘latest’ #同步到最新数据
指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库
#trigger_file = ‘/postgres/data/trigger_activestandby’
因为主库采用的是md5认证,这里需要密码认证。

3.启动从库数据服务
chmod 0700 /data/postgres/data/ -R
pg_ctl -D /data/postgres/data -l /data/postgres/log/pg_server.log start &

4.验证主从配置
2.4.1查看主库sender进程
ps -ef|grep postgres
查看有wal sender process 数据库中创建的同步用的用户名 从库地址

2.4.2查看从库sender进程
ps -ef|grep postgres
查看有wal receiver process

2.4.3用SQL看主从状态
psql
select * from pg_stat_replication;
主库会显示sync_state为async 地址是从库地址
从库查状态无记录

猜你喜欢

转载自blog.csdn.net/u014609263/article/details/94453123