乐趣区

关于java:PostgreSql生产级别数据库安装要考虑哪些问题

大家好,我是字母哥(coder)!

我让公司的小伙伴写一个生产级别的 PostgreSQL 的装置文档,后果他和我说:“不是用一个命令就能装置好么?还用写文档么?”。我晓得他想说的是这个命令:yum install postgresql-server,我也是挺无语的。要晓得生产级别的利用装置形式,和本人在练习过程中装置的小玩具相比,要谨严的多,思考的问题也更多。

  • 首先是平安问题,能不能用 root 装置?防火墙怎么搞?数据库关上文件以及连接数会不会超过 linux 默认关上文件句柄数的限度?
  • 其次是正当布局,你的数据放在哪个目录?这个目录是全公司对立的么?linux 发行版不一样,软件装置目录统一么?数据目录是独自挂载磁盘么?独自挂载的磁盘做了 RAID 数据冗余么?
  • 而后是运维不便的问题,你是否配置了正当的环境变量,如果不配置你是不是每次执行命令都要敲全门路?是否 PostgreSQL 具备开机自启动性能?
  • 数据库用户是否通过正当布局,你的数据操作 (增删改查) 用户是否能新建表,truncat 表,删除表?数据操作用户具备这些性能是不是导致人为误操作的危险减少?
  • 你的数据库装置之后,是否具备企业级的对立治理、故障监控?流程上如何申请?等等等等。

以上的这些问题,都须要写在《数据库装置手册》中,怎么会只有一个命令呢?本文只当抛砖引玉,通过装置 PostgreSQL 数据库,来阐明一下一个残缺的《数据库装置手册》该怎么写。 如果有思考有余不全面之处,欢送网友们补充。

一、安装包下载

要进行 PostgreSQL 的装置,首先咱们须要先把安装包下载下来。生产环境的 postgresql 装置个别会应用源码编译的形式进行装置,应用源码编译的装置形式有几个益处(害处就是绝对麻烦):

  • 公司的服务器什么型号,什么操作系统版本的都有。如果应用 yum 或者 apt-get 装置,很难对立版本,不同的操作系统发行版带的 postgreSQL 源是不一样的。即便搞成对立的,不同的操作系统之间也无奈对立装置目录的地位、lib 寄存地位等。
  • postgresql 源码编译的形式进行装置,能够灵便的抉择咱们须要装置的版本,须要哪一个版本就下载哪一个版本。而应用 yum 或者 apt-get 进行装置只能源库指定的若干版本。源码装置,咱们想指定什么目录就指定什么目录,全公司所有的 PostgreSQL 都在这个目录,这也是标准的一种。

所以为了适应更多的场景,为了达到公司内运维对立的规范,个别生产环境会应用 postgresql 源码编译的形式进行装置。PostgreSql 官网源码安装包的下载地址是:https://www.postgresql.org/do…

找到如上图所示的“file browser”,点击进入 file browser 页面,下载以“tar.gz”结尾的安装包即可。

二、必要的筹备工作

须要阐明的是,筹备工作须要应用 root 用户进行操作。咱们以 CentOS linux 发行版操作系统为例,命令如下。如若是其余的 linux 发行版,筹备工作这一块内容操作步骤是差不多的,linux 命令须要调整。

1、装置必要的编译环境

首先须要装置一些必要的依赖,PostgreSQL 装置的过程须要应用到这些 linux 包。

yum install -y cmake make gcc zlib zlib-devel gcc-c++ perl readline readline-devel  python36 \
tcl openssl ncurses-devel openldap pam flex

2、创立 postgre 用户

通过 groupadd 增加一个用户组 postgres,再应用 adduser 命令增加一个操作系统的 postgres 用户,该用户的用户组是-g postgres

groupadd postgres
adduser -g postgres postgres 

adduser 命令在 CentOS 或者 RedHat 发行版中,在增加操作系统用户的同时会主动新建一个该用户的主目录/home/postgres,该目录也是咱们后续装置 PostgreSql 的主目录。该目录的权限归属于 postgres 组的 postgres 用户。

passwd postgres

新建用户之后,咱们应用 passwd 命令批改操作系统内的 postgres 用户的明码。

如果你应用的是其余的 linux 操作系统发行版,这个目录你可能须要手动的去创立,并且手动执行命令为 postgres 用户赋权。命令如下

mkdir -p /home/postgres;
chmod -R 775 /home/postgres;
chown -R postgres:postgres /home/postgres;

3、凋谢防火墙端口

凋谢防火墙,应用如下 2 条命令凋谢 postgreSQL 的规范端口 5432 的端口。其实,笔者倡议装置 postgreSQL 的时候,不要应用这个端口,因为端口越固定,被攻打的可能性就越大。咱们随机抉择一个不罕用的端口,安全性会更好一些,这里我还是应用规范端口了。

firewall-cmd --zone=public --add-port=5432/tcp --permanent;
firewall-cmd --reload

4. 批改操作系统关上最大文件句柄数

在 /etc/security/limits.conf 中进行设置(须要 root 权限批改该文件),可增加如下两行,示意用户 postgres 最大关上文件描述符数的 soft limit 为 65535,hard limit 为 65535。

postgres soft   nofile         65535
postgres hard   nofile        65535

该配置在敞开 linux 拜访终端 session 从新登录之后失效,ulimit -n的值会变成 65535。进行这一步操作的目标是避免 linux 操作系统内关上文件句柄数量的限度,防止不必要的故障。

5、创立必要的目录

创立目录的时候要做好布局,下文中 /home/postgres/postgre14 是我布局的 postgreSql 装置目录; /home/postgres/pgdata是我布局的 postgreSql 数据寄存目录。

mkdir -p /home/postgres/{postgre14,pgdata}

这里须要留神的是, /home/postgres/pgdata这样的目录布局并不规范,这里我只是给大家做演示操作。实际上生产环境,postgreSql 数据寄存目录应该是服务器独自挂载的一块磁盘,与 linux 操作系统以及安装程序是离开的。 这样做的益处:一是不便数据备份(硬件层面或软件层面),二是操作系统呈现的问题,不影响数据安全。

三、编译并装置

筹备工作做好之后咱们就开始真正的装置了,装置过程应用 postgres 用户,应用 su 命令从 root 用户切换到 postgres 用户。并且解压安装包,解压门路是/home/postgres

su - postgres
tar -xzvf ./postgresql-14.4.tar.gz -C /home/postgres

解压之后的文件门路是postgresql-14.4, 进入这个目录外面,咱们来执行编译装置,编译装置的后果目录咱们指定为/home/postgres/postgre14。最初一步 make 和 insatll 的过程比拟耗时,多等一会。如果没有报错信息,咱们的装置就实现了,其实也很快的,并不比 yum 装置形式麻烦多少。

cd  /home/postgres/postgresql-14.4
./configure --prefix=/home/postgres/postgre14
make  && make install

四、配置环境变量

装置实现之后,咱们来给 postgres 配置一些环境变量,比方 PGPORT 端口、PGDATA 数据目录、PGHOME 装置目录、LD_LIBRARY_PATH 的装置 lib 目录、PATH 命令脚本目录。

cat >>  ~/.bash_profile <<"EOF"
export PGPORT=5432
export PGDATA=/home/postgres/pgdata
export PGHOME=/home/postgres/postgre14
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
EOF

配置实现之后,应用如下命令使配置失效。

 source  ~/.bash_profile

有了环境变量之后,咱们的运维工作会更不便。比方:在 postgres 用户下咱们执行命令 psql 就能够,就不必敲全门路了,比方:/home/postgres/postgre14/bin/psql

五、数据库及参数初始化

数据库装置实现之后,咱们须要实现一个数据库初始化工作。指定 -D 数据目录,-E字符编码, --locale本及语言环境,-U初始化用户信息。

$PGHOME/bin/initdb -D $PGDATA  -E UTF8 --locale=en_US.utf8 -U postgres

实现这个操作之后,数据库存在了 postgres 用户,数据目录 PGDATA 目录上面初始化了一些配置文件,比方:/home/postgres/pgdata/postgresql.conf参数文件,/home/postgres/pgdata/pg_hba.conf 用户拜访权限文件。

咱们来批改一下参数文件,以冀望它可能适配咱们的操作系统和咱们的运行需要。下文中命令的含意是将 EOF 蕴含的文件内容写入 /home/postgres/pgdata/postgresql.conf 配置文件。

cat >> /home/postgres/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
EOF
  • listen_addresses 示意 postgre 过程监听的网卡地址,配置 * 示意监听所有。
  • port服务监听端口配置
  • logging_collector=on,启动日志收集器
  • log_directory 示意日志文件在 PGDATA 目录下的文件夹地位。
  • log_filename示意日志文件的名称

这里只列出一些通常状况下须要批改的参数,性能调优参数就不一一列举了,我后续可能会专门写一篇 PostgreSQL 性能调优的文章,欢送大家关注我!

# 数据库可能承受的最大申请连贯并发数
max_connections = 100
# 数据库服务器将应用的共享内存缓冲区量。倡议值:数据库独立服务器的 1 / 4 内存。shared_buffers =1GB

根底运行参数配置实现之后,还须要配置一些拜访权限。如下所示应用 cat 命令将 EOF 蕴含的文件内容,写入 /home/postgres/pgdata/pg_hba.conf 配置文件:

cat   > /home/postgres/pgdata/pg_hba.conf << EOF
# TYPE  DATABASE    USER    ADDRESS       METHOD
local      all       all                    trust
host      all       all    0.0.0.0/0        md5
EOF
  • 第一行的内容示意 local 本机,all 所有用户能够拜访 postgre 的所有数据库,并且密码发送形式不须要加密(trust)。
  • 第二行的内容用于近程拜访,指定了能够拜访 postgreSql 数据库的近程用户的 ip 范畴,0.0.0.0/0 示意所有 ip 都能够。如果你心愿指定 ip 段,能够像这样去配置192.168.3.1/24(示意的 ip 范畴是:192.168.3.1 到 192.168.3.255)。md5 示意数据库拜访明码应用 md5 的加密形式发送。

六、启动数据库新建用户

实现以上的所有的操作之后,咱们就能够启动数据库了,应用如下的这些命令启停数据库。

# 启动命令
pg_ctl start
#重启命令
pg_ctl restart
#查看数据库运行状态
pg_ctl status
#进行数据库
pg_ctl stop

数据库启动之后,咱们查看一些数据库运行的过程如下所示:

数据库启动胜利,咱们输出 psql 命令,进入数据库治理命令行

$ psql

数据库初始化的过程,新建了一个用户 postgres,咱们给它批改一下明码。

alter user postgres with password '你设置的明码';

一般来说,咱们的程序在运行过程中,不会间接应用 postgres 用户,而是新建一个用户。

# 新建一个用户 acai
CREATE USER acai WITH password '明码';
#新建一个数据库 acaidb,属主是 acai
CREATE DATABASE acaidb OWNER acai;
# 为用户 acai 赋权,all 示意所有权限,acaidb 的治理用户
GRANT all ON  DATABASE acaidb TO acai; 

实际上在生产环境中,咱们须要创立两个用户,一个数据库治理用户用于治理表、视图等操作;另一个是程序用户,用于操作数据库表外面的数据,实现增删改查。

CREATE USER acaiuser WITH password '********';
GRANT  update,delete,insert,select  ON  ALL TABLES IN SCHEMA public TO acaiuser;

七、开机自启动

为了让 PostgreSQL 在当前每次服务器重启之后,都可能主动启动,咱们写一个自启动配置文件。上面的命令须要应用 root 用户执行

cat > /etc/systemd/system/postgre14.service <<"EOF"
[Unit]
Description=PostgreSQL database server 14.4
Documentation=man:postgres(1)
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres

Environment=PGPORT=5432
Environment=PGDATA=/home/postgres/pgdata

ExecStart=/home/postgres/postgre14/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/home/postgres/postgre14/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/home/postgres/postgre14/bin/pg_ctl reload -D ${PGDATA} -s

KillMode=mixed
KillSignal=SIGINT
TimeoutSec=120

[Install]
WantedBy=multi-user.target
EOF

执行下列命令,使得 PostgreSQL 数据库开机自启动脚本失效。

systemctl daemon-reload
systemctl enable postgre14

后续再启停数据库,查看数据库状态,就能够应用上面的这些命令了

systemctl start postgre14
systemctl stop postgre14
systemctl status postgre14

欢送关注我的布告号:字母哥杂谈,回复 003 赠送作者专栏《docker 修炼之道》的 PDF 版本,30 余篇精品 docker 文章。字母哥博客:zimug.com

退出移动版