暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

源码安装10.5 rhel6.10,物理同步复制

张春光的一亩三分地 2018-10-15
318

源码安装10.5 rhel6.10

准备工作:

创建用户

#创建用户和组

groupadd postgres

useradd -g postgres postgres

 

 

 

准备安装目录

#进入安装目录

cd /usr/local/

 

#删除原有安装(如果有的话)

rm -rf postgres*

 

安装:

#配置

tar zxvf postgresql-10.5.tar.gz

cd postgresql-10.5

./configure --prefix=/usr/local/postgresql --with-perl--with-python

 

#编译安装

make && make install

 

#安装contrib目录下的一些工具,是第三方组织的一些工具代码,建议安装

cd contrib

make && make install

 

环境变量:

vi /etc/profile

 

export PATH=/usr/local/postgresql/bin:$PATH

exportLD_LIBRARY_PATH=/usr/local/postgresql/lib:$LD_LIBRARY_PATH

 

数据库存放位置:

mkdir -p /pgdata/data

mkdir -p /backup

mkdir -p /archive_wals

mkdir -p /scripts

 

授权给psotgres账户:

 

chown -R postgres.postgres /backup

chown -R postgres.postgres /archive_wals

chown -R postgres.postgres /scripts

chown -R postgres.postgres /pgdata/data

 

chown -R postgres:postgres /usr/local/postgresql

 

切换用户到postgres:

设置环境变量:

vi .bash_profile

 

export PGHOME=/usr/local/postgresql

export PGDATA=/pgdata/data

 

#初始化数据库

initdb -D /pgdata/data

 

#启动服务

pg_ctl -D /pgdata/data -l /pgdata/data/logfile start

 

 

 

启停数据库:

启动服务:

pg_ctl start -D /pgdata/data -l /pgdata/data/logfile

#重启服务

pg_ctl restart -D /pgdata/data -l /pgdata/data/logfile

 

#停止服务

pg_ctl stop -D /pgdata/data -l /pgdata//datalogfile

 

停止服务,还可以加上-m参数,后面三个选项:

smart:正常关闭,类似Oracle normal

fast:快速关闭,类似Oracle的immediate

immediate:立即关闭,类似Oracle的abort

 

#登录客户端使用"psql 数据库名"登录数据库。

#缺省数据库名时,连接到默认的数据库postgres。

#本地不用指定数据库

psql

 

#创建测试数据库

create database micky;

 

#切换到micky 数据库

\c micky

 

#创建测试表

create table micky (id integer, name text);

 

#插入测试数据

insert into micky values (1,'micky');

 

#选择数据

select * from micky ;

 

 

#修改postgresql.conf 文件

vi /pgdata/data/postgresql.conf

#修改为如下:

listen_addresses = '*'

port = 5432

 

#--------------------允许远程连接---------------------------

#修改客户端认证配置文件pg_hba.conf,将需要远程访问数据库的IP地址或地址段加入该文件

vi /pgdata/data/pg_hba.conf

 

#在文件的最下方加上下面的这句话(出于安全考虑,不建议这样配置)

host    all         all         0.0.0.0/0             trust

 

 

物理同步复制

物理复制:

主库创建Replication专有用户

CREATE USER repuser REPLICATION ENCRYPTED PASSWORD 'oracle';

配置主库postgresql.conf参数:

wal_level = replica # minimal, replica, or logical

archive_mode = on # enables archiving; off, on, or always

archive_command = '/bin/true' # command to use to archive alogfile segment

max_wal_senders = 10 # max number of walsender processes

wal_keep_segments = 512 # in logfile segments, 16MB each; 0disables

hot_standby = on

 

alter system set wal_level = replica;

alter system set archive_mode = on;

alter system set archive_command = '/bin/true';

alter system set max_wal_senders = 10;

alter system set wal_keep_segments = 512;

alter system set hot_standby = on;

alter system set synchronous_commit = on

alter system set synchronous_standby_names = 'pg1052'

 

配置主库pg_hba.conf参数:

host replication repuser 192.168.203.140/32  md5

host replication repuser 192.168.203.141/32  md5

主库和备库的角色不是静止的,它们的角色是可以互换的,比如做一次主备切换后角色就发生了变化,因此建议主库、备库的pg_hba.conf配置完全一致。

 

 

 

在备库上使用pg_basebackup从主库同步数据

pg_basebackup -D /pgdata/data -Fp -Xs -v -P -h 192.168.203.140-p 5432 -U repuser

以上命令行中的-X参数设置在备份的过程中产生的WAL日志包含在备份中的方式,有两种可选方式,f(fetch)和s(stream),f(fetch)是指WAL日志在基准备份完成后被传送到备节点,这时主库上的wal_keep_segments参数需要设置得较大,以免备份过程中产生的WAL还没发送到备节点之前被主库覆盖掉,如果出现这种情况创建基准备份将会失败,f(fetch)方式主库将会启动一个基准备份WAL发送进程;s(stream)方式主库上除了启动一个基准备份WAL发送进程外还会额外启动一个WAL发送进程用于发送主库产生的WAL增量日志流,这种方式避免了f(fetch)方式过程中主库的WAL被覆盖掉的情况,生产环境流复制部署推荐这种方式,特别是比较繁忙的库或者是大库。

 

备库中/pgdata/data目录下的数据全部删除

[postgres@pg1052 data]$ pg_basebackup -D /pgdata/data -Fp -Xs-v -P -h 192.168.203.140 -p 5432 -U repuser

Password:

pg_basebackup: initiating base backup, waiting for checkpointto complete

pg_basebackup: checkpoint completed

pg_basebackup: write-ahead log start point: 0/3000028 ontimeline 1

pg_basebackup: starting background WAL receiver

31187/31187 kB (100%), 1/1 tablespace                                         

pg_basebackup: write-ahead log end point: 0/30000F8

pg_basebackup: waiting for background process to finishstreaming ...

pg_basebackup: base backup completed

 

 

 

 

 

配置备库recovery.conf

cp /usr/local/postgresql/share/recovery.conf.sample/pgdata/data/recovery.conf

 

recovery_target_timeline = 'latest'

standby_mode = on

primary_conninfo = 'host=192.168.203.140 port=5432 user=repuserpassword=oracle application_name=pg1052'

standby_mode参数设置是否启用数据库为备库,如果设置成on,备库会不停地从主库上获取WAL日志流,直到获取主库上最新的WAL日志流。

 

启动备库:

 

 pg_ctl -D /pgdata/data-l /pgdata/data/logfile start

 

 

 主库插入:

 insert into micky values(2,'micky');

 insert into micky values(3,'micky');

 insert into micky values(4,'micky');

 insert into micky values(5,'micky');

 

备库查询:

micky=# select * from micky ;

 id | name 

----+-------

  1 | micky

(1 row)

 

micky=# select * from micky ;

 id | name 

----+-------

  1 | micky

  2 | micky

  3 | micky

  4 | micky

  5 | micky

(5 rows)

 

在主库上查看同步状态:

SELECT usename,application_name,client_addr,sync_state FROMpg_stat_replication ;

 

micky=#SELECT usename,application_name,client_addr,sync_state FROM pg_stat_replication;

 usename | application_name |   client_addr  | sync_state

---------+------------------+-----------------+------------

 repuser | pg1052           | 192.168.203.141 | sync

(1row)


文章转载自张春光的一亩三分地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论