PostgreSQL 12安装及主备配置

安装

1.1.下载PostgreSQL 12安装包

下载地址:https://ftp.postgresql.org/pub/source/

1.2. 安装依赖包

yum install wget gcc gcc-c++  epel-release llvm5.0 llvm5.0-devel clang libicu-devel perl-ExtUtils-Embed readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel systemd-devel tcl-devel python-devel -y

1.3.解压安装包

  1. # tar -zxvf postgresql-12.0.tar.gz

1.4. 编译安装

到解压出来的目录下

  1. #  postgresql-12.0]$#./configure --prefix=/usr/local/pgsql/12 --enable-nls --with-python --with-tcl --with-openssl --with-pam --with-ldap --with-systemd --with-libxml --with-libxslt
    # make && make install
    # chown -R postgres:postgres /usr/local/pgsql -R

1.5.修改文件

# vi /etc/profile.d/pgsql.sh
添加
export PATH=/usr/local/pgsql/12/bin:$PATH
# source /etc/profile.d/pgsql.sh

1.6.初始化

切换到postgres用户,创建data目录

  1. # su - postgres
  2. pgsql_data]$ mkdir data

初始化

$ initdb -D /pgsql_data/data/ -U postgres —locale=en_US.UTF8 -E UTF8


1.7. 启动数据库

pg_ctl -D /pgsql_data/data -l /pgsql_data/data/serverlog start

至此单节点PG配置完成。

2 PG主备配置

主端:172.20.5.163 :5432
备端:172.20.5.225 :5432

2.1主库端操作

修改配置文件:

cd /pgsql_data/data
$ cp pg_hba.conf pg_hba.conf.bak
# 允许repl用户进行流复制
cat <<-eof >>/pgsql_data/data/pg_hba.conf
host    all             all             0.0.0.0/0               md5
host    replication     repl            172.20.0.0/22            trust
eof

配置postgresql.conf

cat <<-eof >/pgsql_data/data/postgresql.conf
listen_addresses = '*'                     
port = 5432
max_connections = 1000
superuser_reserved_connections = 100
full_page_writes = on
wal_log_hints = off
max_wal_senders = 500
hot_standby = on
log_destination = 'csvlog'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S'
log_rotation_age = 1d
log_rotation_size = 10MB
log_statement = 'mod'
log_timezone = 'PRC'
timezone = 'PRC'
unix_socket_directories = '/tmp'
shared_buffers = 512MB
temp_buffers = 16MB
work_mem = 32MB
effective_cache_size = 2GB
maintenance_work_mem = 128MB
#max_stack_depth = 2MB
dynamic_shared_memory_type = posix
## PITR
full_page_writes = on
wal_buffers = 16MB
wal_writer_delay = 200ms
commit_delay = 0
commit_siblings = 5
wal_level = replica
archive_mode = on
archive_command = 'test ! -f /data/pgdata/archivedir/%f && cp %p /data/pgdata/archivedir/%f'
archive_timeout = 60s
Eof

重启数据库。

2.2创建主备流复制用户:

psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'postgres';"
psql -U postgres -c "CREATE USER  repl WITH PASSWORD 'postgres' REPLICATION;"

修改文件:pg_hba.conf
添加:

host    replication     repl            172.20.5.225/24            trust

2.3 备库端操作

2.3.1 备库端安装PG同主库端,备库安装到初始化步骤。

2.3.2 清空data 目录,重建DATA目录:

2.3.3 执行命令,流复制建库:

pg_basebackup -h 172.20.5.163 -p 5432 -U repl -w -Fp -Xs -Pv -R -D /pgsql_data/data/

-h 连接的是主库端的IP,-p 主库port。

注意报错

此错误出现在配置流复制备节点执行pg_basebackup的时候
解决方法:重启下主端节点,由于主节点有新的配置,因此需要重启使其生效。

2.3.4 修改从库端配置文件postgresql.conf

max_connections = 150
wal_level = hot_standby
archive_mode = on
hot_standby = on
archive_timeout = 60s
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on 

2.3.5 修改文件:postgresql.auto.conf

添加:

primary_conninfo = 'user=repl passfile=''/home/postgres/.pgpass'' host=172.20.5.163 port=5432 sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any'

2.3.6 修改data目录权限,启动备库

]$ chmod -R 0750  /pgsql_data/data
]$ pg_ctl -D /pgsql_data/data -l /pgsql_data/data/serverlog  start

2.4 主备状态检查

主库端:

  1. select * from pg_stat_replication;

  1. postgres=# select pg_is_in_recovery(); 主机结果为:f,备机结果为t

备库端:

至此,PG主备配置完成。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,您需要在两台服务器上安装Docker和Docker Compose。然后,您可以按照以下步骤在两台服务器上安装postgresql: 1. 在两台服务器上创建一个文件夹,用于存放docker-compose.yml文件和postgresql数据。 2. 创建docker-compose.yml文件,配置两个postgresql容器,并将它们连接成一个模式。下面是一个示例docker-compose.yml文件: ``` version: '3' services: master: image: postgres:latest restart: always environment: POSTGRES_PASSWORD: example volumes: - ./master_data:/var/lib/postgresql/data networks: - postgresql_network slave: image: postgres:latest restart: always environment: POSTGRES_PASSWORD: example POSTGRES_SLAVE: "true" POSTGRES_MASTER_HOST: master POSTGRES_MASTER_PORT: 5432 volumes: - ./slave_data:/var/lib/postgresql/data depends_on: - master networks: - postgresql_network networks: postgresql_network: ``` 在这个文件中,我们定义了两个postgresql容器,一个是容器,另一个是容器。容器被命名为master,容器被命名为slave。我们还定义了POSTGRES_SLAVE环境变量来指示容器是从容器,并且必须连接到容器。我们还定义了POSTGRES_MASTER_HOST和POSTGRES_MASTER_PORT环境变量来指定容器的地址和端口。 3. 在两台服务器上运行以下命令,以启动postgresql容器: ``` docker-compose up -d ``` 这将启动两个容器,一个是容器,另一个是容器。 4. 配置容器以允许从容器复制数据。在容器中的postgresql.conf文件中添加以下配置: ``` listen_addresses = '*' wal_level = replica max_wal_senders = 10 ``` 5. 配置容器以连接到容器并复制数据。在容器中的recovery.conf文件中添加以下配置: ``` standby_mode = on primary_conninfo = 'host=master port=5432 user=postgres password=example' trigger_file = '/var/lib/postgresql/data/failover.trigger' ``` 这将使容器连接到容器并复制数据。如果容器无法正常工作,则会在failover.trigger文件中创建一个标志文件,并且容器将自动接管为容器。 6. 在两台服务器上启动postgresql服务: ``` docker exec -it <container-name> /bin/bash service postgresql start ``` 在这里,<container-name>是您的postgresql容器名称。 现在您已经成功地安装postgresql模式。您可以测试它是否正常工作,例如在节点创建一个表,然后在节点上查询该表是否存在。如果节点无法正常工作,则节点将自动接管并成为新的节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值