麒麟 V10 生产环境部署:PostgreSQL 16 + Redis 7.2.5 完整安装与优化
本文详细介绍了在麒麟操作系统(Kylin Linux Advanced Server V10,内核 4.19)上从源码编译安装 PostgreSQL 16 和 Redis 7.2.5 的全流程。内容涵盖依赖安装、编译配置、安全用户创建、systemd 服务管理、性能调优、备份策略以及常见问题处理。重点说明了内存参数优化(124GB 服务器场景)、非 root 用户运行、开机自启配置,并特别提醒了麒
麒麟操作系统下安装 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 - 配置 sudo:
visudo添加username ALL=(ALL) ALL(需 root 权限)
5.2 PostgreSQL 核心优化点
| 参数 | 推荐值 | 说明 |
|---|---|---|
shared_buffers |
25% 内存 | 核心缓存,不能超过内存 |
max_wal_size |
64GB | 避免频繁 checkpoint |
log_min_duration_statement |
1000ms | 捕获慢查询 |
pg_hba.conf |
md5 或 scram-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-cmd 和 bind 0.0.0.0 |
| 认证失败 | 密码错误或 pg_hba.conf 为 trust |
重置密码,修改认证方式为 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"
👉 点击关注我,更新后第一时间收到推送!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)