pg库安装步骤

pg安装步骤
1.1.PostgreSQL单机安装(root执行) 

注意:yum、rpm安装方式二选一

1、yum命令方式安装
yum install postgresql12
yum install postgresql12-server

2、rpm命令方式安装
rpm -ivh postgresql12-libs-12.3-1PGDG.rhel7.x86_64.rpm
rpm -ivh postgresql12-12.3-1PGDG.rhel7.x86_64.rpm --nodeps
rpm -ivh postgresql12-server-12.3-1PGDG.rhel7.x86_64.rpm
注:CenterOS 7.6之前版本,安装postgresql10-10.7-1PGDG.rhel7.x86_64.rpm包,需要先安装libicu依赖包,执行如下命令安装
rpm -ivh libicu-50.1.2-17.el7.x86_64.rpm

3、查看rpm包安装路径
rpm -ql postgresql12-server-12.3-1PGDG.rhel7.x86_64

4、创建pgdata目录,修改为postgres组
mkdir -p /appdata/pg15/pgdata
mkdir -p /appdata/pg15/pgarch
mkdir -p /appdata/pg15/pglog
chown -R postgres:postgres /appdata/pg15/pgdata
chown -R postgres:postgres /appdata/pg15/pgarch
chown -R postgres:postgres /appdata/pg15/pglog
注:/appdata目录为部署规划的分区,需要修改为生产实际的分区目录

5、切换到postgres用户,初始化数据库
su - postgres
/usr/pgsql-12/bin/initdb -D /appdata/pg15/pgdata/data5432

6、修改配置文件
vi /appdata/pg15/pgdata/data5432/postgresql.conf
listen_addresses = '*'
port = 5432 
password_encryption = md5
max_connections = 500
archive_mode = on    
archive_command = 'test ! -f /appdata/pgarch/%f && cp %p /appdata/pgarch/%f'
wal_level = replica
wal_keep_segments = 1000
max_wal_size = 10GB
max_wal_senders = 10
hot_standby = on

7、添加pg访问白名单
vi /appdata/pg15/pgdata/data5432/pg_hba.conf
host    all             all             192.168.10.0/8               md5
注:192.168.10.0/8根据生产实际网段设置,配置的网段为共享交换应用所在主机的网段。

8、启动pg
/usr/pgsql-15/bin/pg_ctl start -D /appdata/pg15/pgdata/data5432 -l /appdata/pg15/pgdata/data5432/pg.log

9、初始化postgres密码
/usr/pgsql-15/bin/psql -p 5432 postgres
postgres=# \password postgres
Enter new password: 
Enter it again: 
postgres=#
postgres=#\q		#退出psql

10、查看pg状态
/usr/pgsql-15/bin/pg_ctl status -D /appdata/pg15/pgdata/data5432

11、停止pg(需要的话才执行)
/usr/pgsql-15/bin/pg_ctl stop -D /appdata/pg15/pgdata/data5432

1.2.PostgreSQL主备集群配置
Postgres主备集群采用primary-slave,1主1从异步复制方式,在2台机器上面安装好PG单机后,再执行下面步骤

1、primary主机上面创建复制用户
su - postgres
createuser -U postgres repuser -P -c 5 --replication
Enter password for new role: 
Enter it again:

2、修改主备复制配置
vi /appdata/pgdata/data5432/postgresql.conf
synchronous_standby_names = '*'
hot_standby_feedback = on

3、增加复制用户访问控制
vi pg_hba.conf
host    replication     repuser         30.23.11.61/32          md5

4、重启primary主机的PG服务
/usr/pgsql-12/bin/pg_ctl stop -D /appdata/pgdata/data5432
/usr/pgsql-12/bin/pg_ctl start -D /appdata/pgdata/data5432 -l /appdata/pgdata/data5432/pg.log

5、停止slave备机PG服务
/usr/pgsql-12/bin/pg_ctl stop -D /appdata/pgdata/data5432

6、登录到slave备机,同步数据到备机
cd /appdata/pgdata/data5432
rm -rf *
cd
pg_basebackup -h 19.167.3.17 -U repuser -p 5432 -D /appdata/pgdata/data5432 --wal-method=stream --checkpoint=fast --progress --verbose --write-recovery-conf > makeslave$(date +%Y%m%d).log 2>&1
注:上面IP为PG主库IP地址

注:postgresql12开始已经弃用recovery.conf配置 ,PG12.3版本执行7.1、7.2步骤,PG10.7版本执行7.3步骤

7.1 修改postgresql.conf文件
wal_level = hot_standby
hot_standby = on
hot_standby_feedback = on

7.2 在postgre.auto.conf添加application_name =slave1,配置如下
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'application_name=slave1 user=repuser passfile=''/var/lib/pgsql/.pgpass'' host=30.23.10.79 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

7.3add wal switch flag
vi /appdata/pgdata/data5432/recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repuser password=repuser host=30.23.10.79 port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any'
recovery_target_timeline='latest'

1、启动slave备机服务
/usr/pgsql-12/bin/pg_ctl start -D /appdata/pgdata/data5432 -l /appdata/pgdata/data5432/pg.log

2、检查replication状态
primary主机
su - postgres
psql -h 127.0.0.1
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication ;
-[ RECORD 1 ]----+----------------------------
pid              | 17196
usesysid         | 16384
usename          | repuser
application_name | walreceiver
client_addr      | 30.23.11.61
client_hostname  | 
client_port      | 41375
backend_start    | 2019-09-06 15:24:26.9693+08
backend_xmin     | 558
state            | streaming
sent_lsn         | 0/3000638
write_lsn        | 0/3000638
flush_lsn        | 0/3000638
replay_lsn       | 0/3000638
write_lag        | 00:00:00.000535
flush_lag        | 00:00:00.005545
replay_lag       | 00:00:00.005578
sync_priority    | 1
sync_state       | sync
postgres=# CREATE USER usercenter WITH PASSWORD '${password}';
CREATE ROLE
postgres=# CREATE DATABASE usercenterdb OWNER usercenter ENCODING 'UTF-8';
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE usercenterdb TO usercenter;
GRANT
postgres=# \c usercenterdb
You are now connected to database "usercenterdb" as user "postgres".
usercenterdb=# create table t1(id serial,user_name varchar(20));
CREATE TABLE
usercenterdb=# insert into t1(user_name) values('mia');
INSERT 0 1
usercenterdb=# select * from t1;
-[ RECORD 1 ]--
id        | 1
user_name | mia

usercenterdb=# \q
slave备机
su - postgres
psql -h 127.0.0.1
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication ;
(0 rows)
postgres=# \x
Expanded display is off.
postgres=# \l
                                      List of databases
     Name     |   Owner    | Encoding |   Collate   |    Ctype    |     Access privileges     
--------------+------------+----------+-------------+-------------+---------------------------
 postgres     | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0    | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres              +
              |            |          |             |             | postgres=CTc/postgres
 template1    | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres              +
              |            |          |             |             | postgres=CTc/postgres
 usercenterdb | usercenter | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/usercenter           +
              |            |          |             |             | usercenter=CTc/usercenter
(4 rows)

postgres=# \c usercenterdb
You are now connected to database "usercenterdb" as user "postgres".
usercenterdb=# select * from t1;
 id | user_name 
----+-----------
  1 | mia
(1 row)

usercenterdb=# \q
pg重启
nohup /usr/pgsql-10/bin/postgres -D /data/pgdata/data5432/ &
nohup /usr/pgsql-9.6/bin/postgres -D /data/pgdata/ &
posted @ 2024-11-22 19:36  rbcd  阅读(56)  评论(0)    收藏  举报