ezra-sullivan
发布于 2025-06-14 / 1 阅读
0
0

04 - PostgreSQL 备份工具 - pgBackRest -(2)安装 - Alma 9

更新时间:2025 年 6 月

版本:pgbackrest 2.55.1

参考 - 1:pgBackRest User Guide - RHEL

参考 - 2:pgBackRest User Guide - RHEL

准备

主机准备

主机名操作系统架构IP安装软件
pgbackrest-01.db.localAlmaLinux 9.6x86_64192.168.111.195pgbackrest 2.55.x

时间设置

设置时区

timedatectl set-timezone Asia/Shanghai

设置主机名

hostnamectl set-hostname pgbackrest-01.db.local

防火墙及 SELinux

# 关闭 SELinux
setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinux && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

# 此处直接关闭防火墙
systemctl disable --now firewalld

系统参数

资源限制

PAM 模块

PAM 模块 pam_limits 对用户会话中可以获得的系统资源设置了限制,可以使用 ulimit 命令进行修改,或者直接将修改的值写入配置文件 /etc/security/limits.conf/etc/security/limits.d/*.conf

# 备份原有的设置
find /etc/security/limits.d -type f -name *.conf  -exec mv {} {}.bak.`date +"%Y%m%d"` \;

# 设置限制
cat > /etc/security/limits.d/sys.conf <<EOF
*            -    core            unlimited
*            -    nproc           unlimited
*            -    nofile          1048576
*            -    memlock         unlimited
*            -    msgqueue        unlimited
*            -    stack           unlimited	
EOF

systemd

systemd 有独立于 PAM 的资源限制(setrlimit),若服务通过 systemd 启动也需要设置

###### 修改用户级默认配置 ######
# 备份原有的文件或创建目录
[ -f /etc/systemd/user.conf.d/ ] && find /etc/systemd/user.conf.d/ -type f -name *.conf  -exec mv {} {}.bak.`date +"%Y%m%d"` \; || mkdir -p /etc/systemd/user.conf.d

# 修改配置
cat > /etc/systemd/user.conf.d/sys.conf << EOF
[Manager]
DefaultLimitCORE=infinity
DefaultLimitNPROC=infinity
DefaultLimitNOFILE=1048576
DefaultLimitMEMLOCK=infinity
DefaultLimitMSGQUEUE=infinity
EOF

###### 修改系统级默认配置 ######
# 备份原有的配置
cp /etc/systemd/system.conf /etc/systemd/system.conf.bak`date +"%Y%m%d"`


# 修改配置
grep -q '^#* *DefaultLimitCORE.*' /etc/systemd/system.conf && sed -ri 's@^#* *(DefaultLimitCORE).*@\1=infinity@' /etc/systemd/system.conf || echo "DefaultLimitCORE=infinity" >> /etc/systemd/system.conf

grep -q '^#* *DefaultLimitNPROC.*' /etc/systemd/system.conf && sed -ri 's@^#* *(DefaultLimitNPROC).*@\1=infinity@' /etc/systemd/system.conf || echo "DefaultLimitNPROC=infinity" >> /etc/systemd/system.conf

grep -q '^#* *DefaultLimitNOFILE.*' /etc/systemd/system.conf && sed -ri 's@^#* *(DefaultLimitNOFILE).*@\1=1048576@' /etc/systemd/system.conf || echo "DefaultLimitNOFILE=1048576" >> /etc/systemd/system.conf

grep -q '^#* *DefaultLimitMEMLOCK.*' /etc/systemd/system.conf && sed -ri 's@^#* *(DefaultLimitMEMLOCK).*@\1=infinity@' /etc/systemd/system.conf || echo "DefaultLimitMEMLOCK=infinity" >> /etc/systemd/system.conf

grep -q '^#* *DefaultLimitMSGQUEUE.*' /etc/systemd/system.conf && sed -ri 's@^#* *(DefaultLimitMSGQUEUE).*@\1=infinity@' /etc/systemd/system.conf || echo "DefaultLimitMSGQUEUE=infinity" >> /etc/systemd/system.conf


# 重启 systemd 生效
systemctl daemon-reexec

内核参数

cat > /etc/sysctl.d/99-sysctl.conf  <<EOF
######  MTU 相关设置  ######
# 仅在路径 MTU 不可达时启用 TCP 层 MTU 探测
net.ipv4.tcp_mtu_probing = 1
# 启用 IP 层 MTU 探测 Path MTU Discovery (PMTUD)
net.ipv4.ip_no_pmtu_disc = 0

######  TCP 连接快速释放设置  ######
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3



######  TIME_WAIT 过多时设置   ######
net.ipv4.tcp_tw_reuse = 1
#net.ipv4.tcp_tw_recycle = 0
# 限制 TIME_WAIT 最大值,默认 8192
net.ipv4.tcp_max_tw_buckets=5000


######  端口相关设置  ######
# 设定允许系统主动打开的端口范围,根据需要设置,默认 32768	60999
net.ipv4.ip_local_port_range = 32768	65530


######  防 SYNC 攻击设置  ######
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_max_syn_backlog=8192
# 配置 TCP 重传的最大次数减少到 5 次,超时时间约为 6 秒,方便及时发现节点故障
# net.ipv4.tcp_retries2=5

######  其他 TCP 设置  ######
# 系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接
net.ipv4.tcp_abort_on_overflow=1


#######  nf_conntrack 相关设置(k8s、docker 防火墙的 nat)  #######
net.netfilter.nf_conntrack_max = 262144
net.nf_conntrack_max = 262144

net.netfilter.nf_conntrack_tcp_timeout_established = 86400
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 3600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120


####### socket 相关设置 ######
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768




######  其他设置  #######
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
#
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1


######  内存相关设置 #######
vm.swappiness = 0
vm.max_map_count = 655360
vm.overcommit_memory = 0
# vm.min_free_kbytes = 1048576

###### 文件相关 #######
fs.file-max = 6573688
fs.nr_open = 1048576
fs.aio-max-nr = 1048576


#######  K8S 相关设置 ######
# 必须先加载 br_netfilter 模块
# 二层的网桥在转发包时也会被 arptables/ip6tables/iptables 的 FORWARD 规则所过滤
#net.bridge.bridge-nf-call-arptables = 1
#net.bridge.bridge-nf-call-ip6tables = 1
#net.bridge.bridge-nf-call-iptables = 1

###### 进程相关 #######
# 最大进程 id,默认值为 32768,最大值根据发行版有所不同
kernel.pid_max = 132768
kernel.threads-max = 123342

EOF


sysctl --system

方式一:源码构建

参考:pgBackRest User Guide - RHEL

从源码编译时,最好使用专门的构建主机而非生产环境进行编译。构建所需的许多工具通常不应安装在生产环境中。pgBackRest 构建完成后仅包含单个可执行文件,因此可以轻松复制到新主机

基础设置

安装构建依赖

启用 EPEL 和 CRB 仓库

mesonlibyaml-devel 在 CRB 仓库,libssh2-devel 在 EPEL 仓库

dnf -y install epel-release
dnf config-manager --set-enabled crb
dnf update -y

启用 postgresql 仓库

参考:https://www.postgresql.org/download/

postgresql< PG 版本>-devel 在 postgresql 仓库

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装构建依赖

dnf -y install meson gcc openssl-devel \
       libxml2-devel lz4-devel libzstd-devel bzip2-devel libyaml-devel libssh2-devel


dnf -y install postgresql17-devel

基础变量设置

版本情况:pgBackRest Releases

PGBACKREST_VERSION=2.55.1


PGBACKREST_HOME=/opt/pgbackrest


mkdir -p ${PGBACKREST_HOME}/bin

下载

下载

mkdir -p /usr/local/src/pgbackrest/build


# 注:http://192.168.111.1:10811 为网络代理地址,没有网络代理可以不配置
curl -x http://192.168.111.1:10811 \
    -o /usr/local/src/pgbackrest/${PGBACKREST_VERSION}.tar.gz \
    -L https://github.com/pgbackrest/pgbackrest/archive/release/${PGBACKREST_VERSION}.tar.gz

解压

tar -zxvf /usr/local/src/pgbackrest/${PGBACKREST_VERSION}.tar.gz \
    -C /usr/local/src/pgbackrest/

构建

构建配置并编译

export PKG_CONFIG_PATH=/usr/pgsql-17/lib/pkgconfig:$PKG_CONFIG_PATH


meson setup /usr/local/src/pgbackrest/build/pgbackrest /usr/local/src/pgbackrest/pgbackrest-release-${PGBACKREST_VERSION}


ninja -C /usr/local/src/pgbackrest/build/pgbackrest 

构建完成的二进制文件在 src 路径下

ls -lh /usr/local/src/pgbackrest/build/pgbackrest/src/pgbackrest

# 输出信息
-rwxr-xr-x. 1 root root 1.2M Jun 14 10:42 
/usr/local/src/pgbackrest/build/pgbackrest/src/pgbackrest

复制到指定路径

cp /usr/local/src/pgbackrest/build/pgbackrest/src/pgbackrest ${PGBACKREST_HOME}/bin/

配置

配置目录

pgBackRest 需要日志目录、配置目录以及配置文件

groupadd -r postgres

useradd -r \
    -g postgres \
    -s "/bin/bash" \
    -m \
    postgres
    

# 日志目录
mkdir -p -m 770 /var/log/pgbackrest
chown postgres:postgres /var/log/pgbackrest

# 配置目录
mkdir -p /etc/pgbackrest
mkdir -p /etc/pgbackrest/conf.d
touch /etc/pgbackrest/pgbackrest.conf
chmod 640 /etc/pgbackrest/pgbackrest.conf
chown -R postgres:postgres /etc/pgbackrest/

路径

cat > /etc/profile.d/pgbackrest.sh << EOF
export PGBACKREST_VERSION=${PGBACKREST_VERSION}
export PGBACKREST_HOME=${PGBACKREST_HOME}
export PATH=\${PATH}:\${PGBACKREST_HOME}/bin
EOF

source /etc/profile

验证

sudo -iu postgres pgbackrest

方式二:软件包(推荐)

参考:pgBackRest User Guide - RHEL

pgBackRest 的 RHEL 安装包可从 Crunchy Data: Postgres for Cloud, Kubernetes, or Enterprise PostgreSQL YUM Repository 获取

部署

启用 postgresql 仓库

参考:https://www.postgresql.org/download/

postgresql-libspgbackrest 在 postgresql 仓库中

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

启用 EPEL 仓库

libssh2 在 EPEL 仓库

dnf -y install epel-release

安装依赖

dnf -y install postgresql-libs libssh2

部署

dnf -y install pgbackrest

配置

配置目录

pgBackRest 需要日志目录、配置目录以及配置文件

# 日志目录
mkdir -p -m 770 /var/log/pgbackrest
chown postgres:postgres /var/log/pgbackrest

# 配置目录
mkdir -p /etc/pgbackrest
mkdir -p /etc/pgbackrest/conf.d
mv /etc/pgbackrest.conf /etc/pgbackrest/pgbackrest.conf
chmod 640 /etc/pgbackrest/pgbackrest.conf
chown -R postgres:postgres /etc/pgbackrest/

验证

sudo -iu postgres pgbackrest

评论