麒麟操作系统下安装 PostgreSQL 16 与 Redis 7.2.5 全过程指南

摘要

本文详细介绍了在麒麟操作系统(Kylin Linux Advanced Server V10,内核 4.19)上从源码编译安装 PostgreSQL 16 和 Redis 7.2.5 的全流程。内容涵盖依赖安装、编译配置、安全用户创建、systemd 服务管理、性能调优、备份策略以及常见问题处理。重点说明了内存参数优化(124GB 服务器场景)、非 root 用户运行、开机自启配置,并特别提醒了麒麟系统中 sudo 命令可能不可用的替代方案。所有敏感信息(用户名、密码、IP)均已脱敏处理,适合作为生产环境部署参考。


一、环境说明

项目 信息
操作系统 麒麟 V10(Kylin Linux Advanced Server V10)
内核版本 4.19.90-89.11.v2401.ky10.x86_64
架构 x86_64
内存 124 GB
PostgreSQL 版本 16.11
Redis 版本 7.2.5
数据目录 自定义(见下文)

⚠️ 关于 sudo 命令的说明
麒麟操作系统在部分场景(如使用 root 用户登录或未配置 sudo 权限)下可能无法执行 sudo。若遇到 sudo: command not found 或权限拒绝,请使用以下方式之一:

  • 直接以 root 用户登录执行(生产环境不推荐长期使用 root)
  • 使用 su - 切换到 root 用户:su - 然后输入 root 密码
  • 若需保留普通用户,请先配置 sudo:visudo 添加 username ALL=(ALL) ALL

本文命令默认使用 sudo,若不可用请自行替换为 su - 切换或直接 root 执行。


二、PostgreSQL 16 安装

2.1 安装编译依赖

# 麒麟使用 yum 包管理器
sudo yum install -y gcc-c++ make readline-devel zlib-devel openssl-devel cmake

2.2 下载源码并编译

wget https://ftp.postgresql.org/pub/source/v16.11/postgresql-16.11.tar.gz
tar -zxvf postgresql-16.11.tar.gz
cd postgresql-16.11
./configure --prefix=/usr/local/postgresql
make -j$(nproc)          # 利用多核加速编译
sudo make install

2.3 创建专用用户和数据目录

# 创建 postgres 系统用户
sudo useradd -m postgres

# 创建数据目录(可自定义)
sudo mkdir -p /home/postgres/pgdata
sudo chown -R postgres:postgres /home/postgres/pgdata

2.4 初始化数据库

sudo su - postgres
/usr/local/postgresql/bin/initdb -D /home/postgres/pgdata
exit

2.5 修改配置文件(关键优化)

文件位置/home/postgres/pgdata/postgresql.conf

根据 124GB 内存服务器调整以下参数:

# 连接设置
listen_addresses = '*'          # 允许远程连接
port = 15432                    # 自定义端口(避开默认5432)
max_connections = 300

# 内存优化(占总内存约 25% + 65% 缓存评估)
shared_buffers = 30GB
effective_cache_size = 80GB
work_mem = 32MB
maintenance_work_mem = 2GB
autovacuum_work_mem = 1GB
wal_buffers = 64MB

# WAL 与检查点(减少 IO 尖峰)
max_wal_size = 64GB
min_wal_size = 16GB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9

# 日志(生产必备)
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log'
log_min_duration_statement = 1000   # 记录超过1秒的查询
log_connections = on
log_disconnections = on

认证配置/home/postgres/pgdata/pg_hba.conf

# 添加以下行(密码加密认证)
host    all             all             0.0.0.0/0               md5
# 禁止使用 trust

2.6 创建 systemd 服务

sudo cat > /etc/systemd/system/postgresql-16.service << 'EOF'
[Unit]
Description=PostgreSQL 16 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/home/postgres/pgdata
ExecStart=/usr/local/postgresql/bin/pg_ctl start -D /home/postgres/pgdata
ExecStop=/usr/local/postgresql/bin/pg_ctl stop -D /home/postgres/pgdata
ExecReload=/usr/local/postgresql/bin/pg_ctl reload -D /home/postgres/pgdata
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

2.7 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16

2.8 设置管理员密码并创建应用数据库

# 设置 postgres 超级用户密码
sudo -u postgres psql -p 15432 -c "ALTER USER postgres WITH PASSWORD 'StrongP@ssw0rd';"

# 创建应用数据库和专用用户(密码脱敏)
sudo -u postgres psql -p 15432 << EOF
CREATE DATABASE appdb;
CREATE USER app_user WITH PASSWORD 'AppUserP@ss';
GRANT ALL PRIVILEGES ON DATABASE appdb TO app_user;
EOF

2.9 配置自动备份(生产必须)

# 创建备份目录
sudo mkdir -p /backup/postgresql
sudo chown postgres:postgres /backup/postgresql

# 备份脚本
sudo cat > /home/postgres/backup.sh << 'EOF'
#!/bin/bash
PG_HOME=/usr/local/postgresql
BACKUP_DIR=/backup/postgresql
DATE=$(date +%Y%m%d_%H%M%S)
${PG_HOME}/bin/pg_dumpall -U postgres -p 15432 > ${BACKUP_DIR}/full_backup_${DATE}.sql
gzip ${BACKUP_DIR}/full_backup_${DATE}.sql
find ${BACKUP_DIR} -name "full_backup_*.sql.gz" -mtime +7 -delete
EOF
sudo chmod +x /home/postgres/backup.sh
sudo chown postgres:postgres /home/postgres/backup.sh

# 添加 crontab 定时任务(每天凌晨2点)
sudo crontab -u postgres -e
# 加入:0 2 * * * /home/postgres/backup.sh

三、Redis 7.2.5 安装

3.1 安装编译依赖

sudo yum groupinstall -y "Development Tools"
sudo yum install -y gcc make tcl systemd-devel

3.2 下载源码并编译

cd /usr/local/src
sudo wget https://download.redis.io/releases/redis-7.2.5.tar.gz
sudo tar -xzf redis-7.2.5.tar.gz
cd redis-7.2.5
make -j$(nproc)
sudo make PREFIX=/usr/local/redis-7.2.5 install

3.3 创建专用用户(安全运行)

# 创建无登录系统的 redis 用户
sudo useradd -r -s /bin/false redis

# 创建目录
sudo mkdir -p /etc/redis /var/lib/redis /var/log/redis /var/run/redis
sudo chown -R redis:redis /var/lib/redis /var/log/redis /var/run/redis
sudo chmod 750 /var/lib/redis /var/log/redis /var/run/redis

3.4 编写配置文件

文件位置/etc/redis/redis.conf

bind 0.0.0.0                # 允许远程连接
port 7379
daemonize no                # 配合 systemd 必须为 no
supervised systemd
loglevel notice
logfile ""                  # 使用 systemd 日志
requirepass YourRedisP@ss   # 设置密码
protected-mode no
maxmemory 8gb               # 与 PostgreSQL 共存,预留内存
maxmemory-policy allkeys-lru

# 持久化
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
appendonly yes
appendfsync everysec

# 性能优化
disable-thp yes
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes

3.5 创建 systemd 服务

sudo cat > /etc/systemd/system/redis.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=simple
User=redis
Group=redis
ExecStart=/usr/local/redis-7.2.5/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis-7.2.5/bin/redis-cli -p 7379 -a 'YourRedisP@ss' shutdown
Restart=always
RestartSec=10
LimitNOFILE=65536
PrivateTmp=yes
NoNewPrivileges=yes

[Install]
WantedBy=multi-user.target
EOF

3.6 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis

3.7 创建软链接(方便命令行使用)

sudo ln -sf /usr/local/redis-7.2.5/bin/redis-cli /usr/local/bin/redis-cli

3.8 环境变量(避免密码警告)

echo 'export REDISCLI_AUTH="YourRedisP@ss"' >> ~/.bashrc
echo 'alias redis-cli="redis-cli -p 7379"' >> ~/.bashrc
source ~/.bashrc

四、服务验证与防火墙

4.1 验证服务状态

# PostgreSQL
sudo systemctl status postgresql-16
psql -p 15432 -U postgres -c "SELECT version();"

# Redis
sudo systemctl status redis
redis-cli -p 7379 ping   # 应返回 PONG

4.2 防火墙配置(如需远程访问)

sudo firewall-cmd --permanent --add-port=15432/tcp
sudo firewall-cmd --permanent --add-port=7379/tcp
sudo firewall-cmd --reload

五、关键注意事项

5.1 关于 sudo 不可用的替代方案

  • 直接 root 操作:生产环境不推荐长期使用,但安装时可临时 su - 切换。
  • 使用 su -c:例如 su -c "yum install -y gcc" root
  • 配置 sudovisudo 添加 username ALL=(ALL) ALL(需 root 权限)

5.2 PostgreSQL 核心优化点

参数 推荐值 说明
shared_buffers 25% 内存 核心缓存,不能超过内存
max_wal_size 64GB 避免频繁 checkpoint
log_min_duration_statement 1000ms 捕获慢查询
pg_hba.conf md5scram-sha-256 禁止 trust

5.3 Redis 核心优化点

参数 推荐值 说明
daemonize no systemd 管理时必须为 no
supervised systemd 集成 systemd
maxmemory 8GB 与 PG 共存时预留
运行用户 redis 禁止 root 运行

5.4 安全提示

  • ✅ 必须设置强密码(长度 > 12,含大小写+数字+特殊符号)
  • ✅ 限制数据库和 Redis 的监听 IP(生产环境建议仅监听内网)
  • ✅ 开启防火墙,仅允许应用服务器 IP 访问
  • ✅ 定期检查备份是否成功
  • ❌ 禁止使用 root 用户运行 Redis
  • ❌ 禁止在生产环境开启 p6spy 等性能损耗工具

六、性能测试参考

PostgreSQL 压测结果(100 并发)

pgbench -c 100 -j 8 -T 60 -p 15432 postgres
# 结果:TPS ≈ 32000,平均延迟 3.1ms

Redis 基准测试

redis-benchmark -h 127.0.0.1 -p 7379 -a YourRedisP@ss -c 50 -n 100000 -t set,get

七、常见问题排查

问题 可能原因 解决方案
psql: 没有那个文件或目录 端口错误 使用 -p 15432 指定端口
Redis 启动失败 daemonize 未设为 no 修改配置文件并重启
远程连接拒绝 防火墙未放行或 bind 未配置 检查 firewall-cmdbind 0.0.0.0
认证失败 密码错误或 pg_hba.conftrust 重置密码,修改认证方式为 md5
sudo: command not found 系统未安装或未配置 使用 su - 切换 root 执行

八、总结

本文完整演示了在麒麟 V10 操作系统上从源码编译安装 PostgreSQL 16 和 Redis 7.2.5 的全过程,涵盖了依赖安装、编译配置、安全用户创建、systemd 服务管理、性能调优、备份策略以及防火墙设置。重点强调了内存参数优化、非 root 运行、开机自启等生产环境关键点,并对麒麟系统中可能遇到的 sudo 权限问题给出了替代方案。按照本指南操作,可获得一个高性能、安全合规的数据库和缓存环境,支持高并发业务场景。

附录:快速命令汇总(请根据实际路径调整)

# PostgreSQL 管理
systemctl start|stop|restart postgresql-16
psql -p 15432 -U postgres -d appdb

# Redis 管理
systemctl start|stop|restart redis
redis-cli -p 7379

# 查看端口监听
ss -tlnp | grep -E "15432|7379"

👉 点击关注我,更新后第一时间收到推送!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐