文章目录
- 一、节点说明
- 二、软件下载
- 三、安装部署
- 1、前置准备(两台机器)
- 2、解压并编译
- 3、初始化与配置主库(Master)
- 4、配置从库(Slave)
- 四、测试
- 五、高可用集群安装
一、节点说明
| IP | 主机名 |
|---|---|
| 192.168.10.102 | node02 |
| 192.168.10.103 | node03 |
二、软件下载
下载地址:PostgreSQL: File Browser
本文使用:postgresql-16.10.tar.gz
三、安装部署
1、前置准备(两台机器)
# 安装基础依赖yuminstall-y gcc gcc-c++makelibicu-devel readline-devel zlib-devel openssl-devel# 关闭防火墙和SELinuxsystemctl stop firewalld systemctl disable firewalld setenforce0vim/etc/selinux/config# 修改SELINUX=disabled# 创建postgres用户useraddpostgrespasswdpostgres# 配置postgres sudo权限vim/etc/sudoers# 在%wheel ALL=(ALL) ALL下面添加一行postgresALL=(ALL)NOPASSWD:ALL# 创建安装目录和数据目录mkdir-p /opt/module/pgsql16/pgsqlmkdir-p /opt/module/pgsql16/pgdata# 修改安装包(上传的)目录权限,安装目录权限chown-R postgres:postgres /opt/software/pgsql/chown-R postgres:postgres /opt/module/pgsql16/# 切换到postgres用户su- postgres2、解压并编译
# 此项两台虚拟机均需操作# 两台服务器上分别执行以下步骤进行编译安装。tar-zxvf postgresql-16.10.tar.gzcdpostgresql-16.10# 配置编译选项 --prefix 指定安装目录./configure --prefix=/opt/module/pgsql16/pgsql# 编译make&&makeinstallcdcontribmake&&makeinstall# 安装成功后,主要文件会出现在 /opt/module/pgsql16/pgsql 目录下# 编辑 postgres 用户环境变量vi~/.bash_profileexportPGHOME=/opt/module/pgsql16/pgsqlexportPGDATA=/opt/module/pgsql16/pgdataexportPATH=$PATH:$PGHOME/binexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib# 重新加载环境变量source~/.bash_profile# 配置系统环境变量vim/etc/profile.d/my_env.shexportPGHOME=/opt/module/pgsql16/pgsqlexportPGDATA=/opt/module/pgsql16/pgdataexportPATH=$PATH:$PGHOME/binexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib# 重新加载环境变量source/etc/profile.d/my_env.sh3、初始化与配置主库(Master)
(1)初始化数据库
# 初始化主库,仅主库initdb -D$PGDATA-E UTF8 --locale=en_US.utf8(2)conf配置
配置postgresql.conf
# 配置postgresql.confcppostgresql.conf postgresql.conf.bakvimpostgresql.conf# 修改以下内容listen_addresses='0.0.0.0'port=5432max_connections=2000shared_buffers=2048MB dynamic_shared_memory_type=posix wal_level=replica full_page_writes=on wal_log_hints=on max_wal_size=1GB min_wal_size=256MB archive_mode=on archive_command='test ! -f /opt/module/pgsql16/pgdata/pg_archive/%f && cp %p /opt/module/pgsql16/pgdata/pg_archive/%f'restore_command='cp /opt/module/pgsql16/pgdata/pg_archive/%f %p'archive_cleanup_command='pg_archive cleanup /opt/module/pgsql16/pgdata/pg_archive %r'max_wal_senders=10wal_keep_size=320hot_standby=on logging_collector=on log_directory='/opt/module/pgsql16/pgdata/logs'log_filename='postgresql-%Y-%m-%d.log'log_rotation_age=30d log_connections=on log_disconnections=on log_timezone='PRC'datestyle='iso, mdy'timezone='PRC'lc_messages='en_US.utf8'lc_monetary='en_US.utf8'lc_numeric='en_US.utf8'lc_time='en_US.utf8'default_text_search_config='pg_catalog.english'配置从库IP段
# 配置IP段vi$PGDATA/pg_hba.conf# 添加从库IP段# 这允许 replicator 用户进行流复制连接,并采用 scram-sha-256 加密认证。hostreplication replicator192.168.10.102/32 scram-sha-256hostreplication replicator192.168.10.103/32 scram-sha-256# 用于远程连接hostall all0.0.0.0/0 scram-sha-256(3)启动主库并创建复制用户
# 启动数据库 pg_ctl -D $PGDATA -l $PGHOME/logfile start # 登录数据库 psql # 先修改postgres用户密码 ALTER USER postgres WITH PASSWORD 'postgres'; # 创建主从复制用户 CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'replicator';4、配置从库(Slave)
# 从库同步主库配置,在此之前从库除了编译安装,并没有其他操作,没有初始化,也没有启动pg_basebackup -h192.168.10.102 -p5432-U replicator -D$PGDATA-Fp -Xs -P -R -h:主库IP地址。 -U:复制用户 replicator,执行时会提示输入密码。 -D:目标数据目录。 -Fp:以普通文件格式备份。 -Xs:在备份开始后启动流式传输WAL日志。 -P:显示进度。 -R:关键参数,自动在从库$PGDATA目录下生成 standby.signal 文件(声明此实例为备库),并更新 postgresql.auto.conf 文件,写入连接主库的信息。# 通常 -R 参数已自动完成配置。可以检查并确认 $PGDATA/postgresql.auto.conf 文件内容类似如下(主从同步配置信息):primary_conninfo='user=replicator password=replicator channel_binding=disable host=192.168.10.102 port=5432 sslmode=disable sslcompression=0 sslcertmode=disable sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable'# 修改从库pgdata权限chmod-R750/opt/module/pgsql16/pgdata/# 启动从库pg_ctl -D$PGDATA-l$PGHOME/logfile start四、测试
1、在主库上查询复制状态
SELECTapplication_name,client_addr,state,sync_state,sync_priorityFROMpg_stat_replication;2、在从库上验证数据同步
# 主库操作CREATETABLEtest_repl(idint,nametext);INSERTINTOtest_replVALUES(1,'Hello from Master');# 从库查询SELECT*FROMtest_repl;# 此外,从库是只读状态,进行增删改会报错INSERTINTOtest_replVALUES(2,'Hello from Slave');五、高可用集群安装
有需求的小伙伴可以参考本人下篇文章:
Linux软件安装 —— PostgreSQL高可用集群安装(postgreSQL + repmgr主从复制 + keepalived故障转移)