当前位置: 首页 > 后端技术 > Java

[PostgreSql]生产级数据库安装需要考虑哪些问题?

时间:2023-04-01 16:56:32 Java

大家好,我是码农!我找公司的一个朋友写了一份生产级的PostgreSQL安装文档,他跟我说:“不是一条命令就可以安装了吗?Documentation?”。我知道他想说的是这个命令:yuminstallpostgresql-server,我也蛮无语的。你要知道如何安装生产级的应用程序,比练习时安装的小玩具。首先是安全问题,可以root安装吗?防火墙呢?数据库的打开文件数和连接数会不会超过linux下打开文件句柄数的限制默认?二是合理规划。你的数据放在哪个目录下?这个目录是全公司统一的吗?Linux版本不一样,软件安装目录是否一致?数据目录是否单独挂载到磁盘?单独挂载的磁盘配置RAID数据冗余?那么就是运维方便的问题,你配置合理的环境变量了吗?如果没有,每次执行命令都要输入完整路径吗?PostgreSQL有开机自动启动的功能吗?数据库用户是否规划好,你的数据操作(增删改查)用户是否可以建表、截表、删表?为数据操作用户提供这些功能是否会增加人为错误的风险?你的数据库安装后,是否有企业级的统一管理和故障监控?过程中如何申请?等等等等以上所有问题都需要写在《数据库安装手册》。怎么可能只有一个命令呢?本文只是抛砖引玉,通过安装PostgreSQL数据库,讲解如何编写一个完整的《数据库安装手册》。如有考虑不足、不全之处,欢迎网友补充。1、下载安装包要安装PostgreSQL,首先我们需要下载安装包。生产环境的postgresql安装一般是通过编译源码安装的。使用源码编译安装的方式有几个优点(缺点是比较麻烦):公司服务器型号不同,操作系统版本不同。如果使用yum或者apt-get安装,版本很难统一,不同操作系统发行版的postgreSQL源也不一样。即使统一了,安装目录的位置,lib存放位置等在不同的操作系统之间也不能统一。Postgresql是编译源码安装的。我们可以灵活选择自己需要安装的版本,下载自己需要的版本。并且使用yum或apt-get只安装源库指定的几个版本。对于源代码安装,我们可以指定我们想要的任何目录。公司所有的PostgreSQL都在这个目录下,也是一个标准目录。所以,为了适应更多的场景,也为了实现公司内部运维的统一标准,一般的生产环境都会使用postgresql源码编译安装。PostgreSql官方源码安装包下载地址为:https://www.postgresql.org/do...找到上图所示的“文件浏览器”,点击进入文件浏览器页面,下载文件以“tar.gz”结尾只需安装软件包即可。2、必要的准备工作需要注意的是,准备工作需要root用户来完成。我们以CentOSlinux发行版操作系统为例,命令如下。如果是其他linux发行版,准备工作的操作步骤类似,需要调整linux命令。1.安装必要的编译环境首先需要安装一些必要的依赖包。PostgreSQL安装过程需要用到这些linux包。yuminstall-ycmakemakegcczlibzlib-develgcc-c++perlreadlinereadline-develpython36\tclopensslncurses-developenldappamflex2,创建postgre用户通过groupadd添加用户组postgres,然后使用adduser命令添加用户组为-gpostgres的操作系统postgres用户。CentOS或RedHat发行版中的groupaddpostgresadduser-gpostgrespostgresadduser命令在添加操作系统用户时会自动创建一个新用户的主目录/home/postgres。该目录也是我们后续安装PostgreSql的主目录。这个目录的权限属于postgres组的postgres用户。passwdpostgres创建新用户后,我们在操作系统中使用passwd命令修改postgres用户的密码。如果您使用的是其他linux操作系统发行版,您可能需要手动创建该目录,并手动执行授权postgres用户的命令。命令如下mkdir-p/home/postgres;chmod-R775/home/postgres;chown-Rpostgres:postgres/home/postgres;3、开启防火墙端口开启防火墙,使用以下两条命令开启postgreSQL端口标准端口5432。其实笔者在安装postgreSQL时建议不要使用这个端口,因为端口越固定,被攻击的可能性就越大。我们随机选择一个不常用的端口,安全性会好一些。这里我还是使用标准端口。firewall-cmd--zone=public--add-port=5432/tcp--permanent;firewall-cmd--reload4。修改操作系统打开的最大文件句柄数,在/etc/security/limits.conf中设置(修改此文件需要root权限),可以加上下面两行,表示最大软限制postgres用户打开文件描述符数为65535,硬限制为65535postgressoftnofile65535postgreshardnofile65535关闭linux访问终端会话重新登录后该配置生效,ulimit-n的值变为65535.这一步的目的是为了防止linux操作系统对打开文件句柄数的限制,避免不必要的失败。5.创建必要的目录。创建目录时,一定要规划好。下面/home/postgres/postgre14是我规划的postgreSql安装目录;/home/postgres/pgdata是我规划的postgreSql数据存放目录。mkdir-p/home/postgres/{postgre14,pgdata}这里需要注意的是,像/home/postgres/pgdata这样的目录规划并不是标准的,这里只是给大家演示一下。其实在生产环境中,postgreSql的数据存放目录应该是单独挂载在服务器上的一个磁盘,与linux操作系统和安装程序是分开的。这样做的好处是:一是方便数据备份(硬件层面或软件层面),二是操作系统出现问题不会影响数据安全。3、编译安装准备工作做好后,我们就开始实际安装了。安装过程中使用postgres用户,使用su命令从root用户切换到postgres用户。并解压安装包,解压路径为/home/postgres。su-postgrestar-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/postgre14make&&makeinstall4.配置环境变量安装完成后,我们来配置postgres的一些环境变量,比如PGPORT端口和PGDATAdata目录,PGHOME安装目录,LD_LIBRARY_PATH安装lib目录,PATH命令脚本目录。cat>>~/.bash_profile<<"EOF"导出PGPORT=5432exportPGDATA=/home/postgres/pgdataexportPGHOME=/home/postgres/postgre14exportLD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATHexportPATH=$PGHOME/bin:$PATH:.EOF配置完成后,使用以下命令使配置生效。source~/.bash_profile有了环境变量,我们的运维工作会更加方便。例如:在postgres用户下,我们可以不用输入完整路径就可以执行命令psql,比如:/home/postgres/postgre14/bin/psql。5.数据库及参数初始化数据库安装完成后,我们需要完成一个数据库初始化工作。指定-D数据目录,-E字符编码,--locale和locale,-U初始化用户信息。$PGHOME/bin/initdb-D$PGDATA-EUTF8--locale=en_US.utf8-Upostgres此操作完成后,数据库中存在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=5432logging_collector=onlog_directory='pg_log'log_filename='postgresql-%a.log'EOFlisten_addresses表示的网卡地址postgre进程监听,配置*表示监听所有。在端口服务的监听端口配置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</etc/systemd/system/postgre14.service<<"EOF"[Unit]Description=PostgreSQLdatabaseserver14.4Documentation=man:postgres(1)After=network.target[服务]Type=forkingUser=postgresGroup=postgresEnvironment=PGPORT=5432Environment=PGDATA=/home/postgres/pgdataExecStart=/home/postgres/postgre14/bin/pg_ctlstart-D${PGDATA}-s-o"-p${PGPORT}"-w-t300ExecStop=/home/postgres/postgre14/bin/pg_ctlstop-D${PGDATA}-s-mfastExecReload=/home/postgres/postgre14/bin/pg_ctlreload-D${PGDATA}-sKillMode=mixedKillSignal=SIGINTTimeoutSec=120[Install]WantedBy=multi-user.targetEOF执行以下命令使PostgreSQL数据库启动脚本生效。systemctldaemon-reloadsystemctlenablepostgre14启动和停止数据库后,查看数据库状态,可以使用如下命令Antetokounmpo博客:zimug.com