在ANOLIS 23上源码安装了16.1,在OpenEuler24.03上PG16.3,安装也是一样的吗?
抱着这样的态度,我试着去安装,如果不关闭SELINUX,还是有一个差异的,同时,发现即使是最小安装,openeuler也是安装了PG源码安装需要的主要包。
同时,以前安装,都是直接搜的baidu的安装文档,但网上的文档,不给你解释为什么要安装这个包,其实,PG官方文档写的比较全,遇到问题,也可以有相关链接,本次安装主要是参照官方文档进行,特别是SELINUX部分。好了,还是看正文吧 。
目录
3.12 配置SELINUX,使用ROOT用户去配置 --本步骤可选
1.环境
先来看看我们的环境:
OpenEuler 24.03
内核:6.6.0-35
最小安装
root@openeuler2403 ~]# cat /etc/os-release
NAME=”openEuler”
VERSION=”24.03 (LTS)”
ID=”openEuler”
VERSION_ID=”24.03”
PRETTY_NAME=”openEuler 24.03 (LTS)”
ANSI_COLOR=”0;31”
[root@openeuler2403 ~]#
[root@openeuler2403 ~]# uname -r
6.6.0-35.0.0.43.oe2403.x86_64
[root@openeuler2403 ~]# yum grouplist
Available Environment Groups:
服务器
虚拟化主机
Installed Environment Groups:
最小安装
Available Groups:
容器管理
开发工具
无图形终端系统管理工具
传统 UNIX 兼容性
网络服务器
科学记数法支持
安全性工具
系统工具
2.参考文档
平时,我们习惯到网上搜安装文档,,其实,官网上已经写的比较完整,而且更可信赖。
PostgreSQL: Documentation: 16: PostgreSQL 16.3 Documentation
3.具体安装步骤
3.1 安装必要的包
参考:PostgreSQL: Documentation: 16: 17.1. Requirements
需要的软件包如下:
make 3.81以上版本
gcc c99以上
tar 带gzip
readline and readline-devel
zlib
zlib-devel
ICU 用于全球化支持,是 internal components for Unicode 的缩写
libicu-devel
OpenEuler最小安装后,这里主要的包都安装了,不够,可以重新安装一下:
yum -y install make gcc tar readline readline-devel zlib zlib-devel icu libicu-devel
3.2 安装可选的包
Perl 5.14以上
Python 3.2 以上
Tcl 8.4以上
Gettext
OpenSSL 1.0.1以上
MIT, OpenLDAP, and/or PAM
LZ4 , 用于TOTAST,WAL压缩
Zstandard 1.4.0以上,用于 wal压缩
Flex and Bison 用于git
libselinux libselinux-devel 用于SELINUX
发现,MIT,Zstandard ,YUM源里没有,不过,反正也不用,没有管它。
安装命令:
yum -y install perl python tcl gettext openssl mit openldap pam lz4 zstandard flex bison libselinux libselinux-devel
3.3 建立目录
由于习惯了ORACLE式的目录结构,个人觉得比较明了,因此,借鉴了ORACLE的目录结构
PG软件放在:/u01/app/用户名/product/版本/dbhome_1
PG数据目录:/u01/app/用户名/pgdata
源码目录: /u01/setup/source
我们这里使用postgres用户安装,pg版本为:16.3,因此如下:
mkdir /u01/app/postgres/product/16.3/dbhome_1 -p
mkdir /u01/app/postgres/pgdata -p
mkdir /u01/setup/source -p
3.4 创建用户
groupadd postgres
useradd -g postgres postgres
echo “postgres” | passwd --stdin postgres
3.5 给目录授权
chown -R postgres:postgres /u01/app/postgres
chmod -R 775 /u01/app/postgres
3.6 下载源码
su – postgres
cd /u01/setup/source
wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
3.7 解压
$ tar xvf postgresql-16.3.tar.gz
3.8 Configure
$ cd /u01/setup/source/postgresql-16.3
./configure —prefix=/u01/app/postgres/product/16.3/dbhome_1 --with-selinux
如果系统关闭了selinux,就不用 with-selinux
3.9 编译
make world -j 16 (含所有功能及文档,等于完整安装)
-j 加并行,相对要快一些
3.10 安装
make install-world -j 16
3.11 配置环境变量
cat >> ~/.bash_profile <<”EOF”
export PGPORT=5432
export PGDATA=/u01/app/postgres/pgdata
export PGHOME=/u01/app/postgres/product/16.3/dbhome_1
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
export PGCLIENTENCODING=GBK
EOF
3.12 配置SELINUX,使用ROOT用户去配置 --本步骤可选
如果不想关闭SELINUX,就必须安装SELINUX 策略包
先安装selinux 策略软件包,否则,没有selinux相关包
yum install selinux-policy-devel
创建相关安全上下文
参见这个文档: SEPostgreSQL Administration - PostgreSQL wiki
不过,这个文档写法有问题,
‘(./)?’ 应该为:’(/.)?’,否则,后面开启SELINUX时,一直无法正常启动PG。
环境变量,前面已经说过:
$PGDATA=/u01/app/postgres/pgdata
$PGHOME=/u01/app/postgres/product/16.3/dbhome_1
设置上下文:
# semanage fcontext -a -t usr_t ‘/u01/app/postgres/product/16.3/dbhome_1(/.*)?’
# semanage fcontext -a -t bin_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin(/.*)?’
# semanage fcontext -a -t lib_t ‘/u01/app/postgres/product/16.3/dbhome_1/lib(/.*)?’
# semanage fcontext -a -t postgresql_exec_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin/postgres’
# semanage fcontext -a -t postgresql_exec_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin/initdb’
# semanage fcontext -a -t initrc_exec_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl’
/sbin/restorecon -R /u01/app/postgres/product/16.3/dbhome_1
# semanage fcontext -a -t postgresql_db_t ‘/u01/app/postgres/pgdata(/.*)?’
# /sbin/restorecon -R /u01/app/postgres/pgdata
欧拉需要这个,应该是默认没有打标,执行后,重启系统生效。
# touch /.autorelabel;
# reboot
3.13 创建数据库集群
su - postgres
$ initdb -D /u01/app/postgres/pgdata -E UTF8 --locale=zh_CN.UTF8 -U postgres
3.14 修改数据库参数
cat >> $PGDATA/postgresql.conf << “EOF”
listen_addresses = ‘*’
port=5432
unix_socket_directories=’/u01/app/postgres/pgdata’
logging_collector = on
log_directory = ‘pg_log’
log_filename = ‘postgresql-%a.log’
log_truncate_on_rotation = on
max_connections = 500
shared_buffers = 2GB
EOF
cat >> $PGDATA/pg_hba.conf << “EOF”
TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
EOF
3.15 配置自动启动服务
cat > /etc/systemd/system/pg16.service <<”EOF”
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/u01/app/postgres/pgdata
OOMScoreAdjust=-1000
ExecStart=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl start -D ${PGDATA} -s -o “-p ${PGPORT}” -w -t 300
ExecStop=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
EOF
配置生效
[root@openeuler2403 ~]# systemctl daemon-reload
验证
开启随系统启动而启动
[root@openeuler2403 ~]# systemctl enable pg16
3.16 设置内核参数
cat > /etc/sysctl.conf <<”EOF”
vm.swappiness=10
vm.zone_reclaim_mode=0
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmmax = 8589934592
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 250 128
EOF
kernel.sem四个数字分别是:SEMMSL,SEMMNS,SEMOPM,SEMMNI
SEMMSL: 控制每个信号量集合的最大信号数。
SEMMNS: 控制系统范围内能使用的最大信号量数。
SEMOPM:semop()函数 用来操作信号量)每次调用锁能操作的一个信号量集中的最大信号量,
SEMMNI: 内核中信号量集的最大数量。
SEMMNS=SEMMSL*SEMMNI
SEMOPM=SEMMSL,这两个参数一般设置为相同,
SEMMNl>= ceil((max connections + autovacuum max workers + 4)/16)
3.17 设置资源限制
cat >> /etc/security/limits.conf <<”EOF”
soft nofile 131072
hard nofile 131072
soft nproc 131072
hard nproc 131072
soft core unlimited
hard core unlimited
soft memlock unlimited
hard memlock unlimited
EOF
3.18 关闭透明大页 --可选(建议关闭)
# grubby —update-kernel ALL --args transparent_hugepage=never
重启生效
这个RHEL9以上版本就使用这种方式来更新启动配置脚本
3.19 启停PG
使用POSTGRES用户去执行
su - postgres
$ pg_ctl start
$ pg_ctl status
$ pg_ctl stop
使用root 用户去执行
su - root
# systemctl start pg16
# systemctl status pg16
# systemctl stop pg16
3.20 验证
[postgres@openeuler2403 pgdata]$ psql
到此,数据库安装完成
4.保持联系
----------------------------------------------------------------------
如果你对数据库技术感兴趣,我们还可以在微信群:水煮数据库 进行交流,主要交流日常运维中用到的数据库相关问题,包含但不限于:ORACLE,PG,MYSQL,SQLSERVER,OB,TIDB,达梦,TDSQL,OPENGAUSS,人大金仓,GBASE等等,加我微信吧:zq24803366,备注:水煮数据库, 我拉你入群。
----------------------------------------------------------------------