以 PostgreSql 为例,说明生产级别数据库安装要考虑哪些问题?
我让公司的小伙伴写一个生产级别的 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/download/
找到如上图所示的“file browser”,点击进入 file browser 页面,下载以“tar.gz”结尾的安装包即可。
二、必要的准备工作
需要说明的是,准备工作需要使用 root 用户进行操作。我们以 CentOS linux 发行版操作系统为例,命令如下。如若是其他的 linux 发行版,准备工作这一块内容操作步骤是差不多的,linux 命令需要调整。
1、安装必要的编译环境
首先需要安装一些必要的依赖,PostgreSQL 安装的过程需要使用到这些 linux 包。
2、创建 postgre 用户
通过 groupadd 添加一个用户组 postgres,再使用 adduser 命令添加一个操作系统的 postgres 用户,该用户的用户组是-g postgres
。
adduser 命令在 CentOS 或者 RedHat 发行版中,在添加操作系统用户的同时会自动新建一个该用户的主目录/home/postgres
,该目录也是我们后续安装 PostgreSql 的主目录。该目录的权限归属于 postgres 组的 postgres 用户。
新建用户之后,我们使用 passwd 命令修改操作系统内的 postgres 用户的密码。
如果你使用的是其他的 linux 操作系统发行版,这个目录你可能需要手动的去创建,并且手动执行命令为 postgres 用户赋权。命令如下
3、开放防火墙端口
开放防火墙,使用如下 2 条命令开放 postgreSQL 的标准端口 5432 的端口。其实,笔者建议安装 postgreSQL 的时候,不要使用这个端口,因为端口越固定,被攻击的可能性就越大。我们随机选择一个不常用的端口,安全性会更好一些,这里我还是使用标准端口了。
4.修改操作系统打开最大文件句柄数
在/etc/security/limits.conf 中进行设置(需要 root 权限修改该文件),可添加如下两行,表示用户 postgres 最大打开文件描述符数的 soft limit 为 65535,hard limit 为 65535。
该配置在关闭 linux 访问终端 session 重新登录之后生效,ulimit -n
的值会变成 65535 。进行这一步操作的目的是防止 linux 操作系统内打开文件句柄数量的限制,避免不必要的故障。
5、创建必要的目录
创建目录的时候要做好规划,下文中 /home/postgres/postgre14
是我规划的 postgreSql 安装目录; /home/postgres/pgdata
是我规划的 postgreSql 数据存放目录。
这里需要注意的是, /home/postgres/pgdata
这样的目录规划并不标准,这里我只是给大家做演示操作。实际上生产环境,postgreSql 数据存放目录应该是服务器单独挂载的一块磁盘,与 linux 操作系统以及安装程序是分开的。 这样做的好处:一是方便数据备份(硬件层面或软件层面),二是操作系统出现的问题,不影响数据安全。
三、编译并安装
准备工作做好之后我们就开始真正的安装了,安装过程使用 postgres 用户,使用su
命令从 root 用户切换到 postgres 用户。并且解压安装包,解压路径是/home/postgres
。
解压之后的文件路径是postgresql-14.4
,进入这个目录里面,我们来执行编译安装,编译安装的结果目录我们指定为/home/postgres/postgre14
。最后一步 make 和 insatll 的过程比较耗时,多等一会。如果没有报错信息,我们的安装就完成了,其实也很快的,并不比 yum 安装方式麻烦多少。
四、配置环境变量
安装完成之后,我们来给 postgres 配置一些环境变量,比如 PGPORT 端口、PGDATA 数据目录、PGHOME 安装目录、LD_LIBRARY_PATH 的安装 lib 目录、PATH 命令脚本目录。
配置完成之后,使用如下命令使配置生效。
有了环境变量之后,我们的运维工作会更方便。比如:在 postgres 用户下我们执行命令psql
就可以,就不用敲全路径了,比如:/home/postgres/postgre14/bin/psql
。
五、数据库及参数初始化
数据库安装完成之后,我们需要完成一个数据库初始化工作。指定-D
数据目录,-E
字符编码, --locale
本及语言环境,-U
初始化用户信息。
完成这个操作之后,数据库存在了 postgres 用户,数据目录 PGDATA 目录下面初始化了一些配置文件,比如:/home/postgres/pgdata/postgresql.conf
参数文件,/home/postgres/pgdata/pg_hba.conf
用户访问权限文件。
我们来修改一下参数文件,以期望它能够适配我们的操作系统和我们的运行需求。下文中命令的含义是将 EOF 包含的文件内容写入/home/postgres/pgdata/postgresql.conf
配置文件。
listen_addresses
表示 postgre 进程监听的网卡地址,配置*
表示监听所有。port
服务监听端口配置logging_collector=on
,启动日志收集器log_directory
表示日志文件在 PGDATA 目录下的文件夹位置。log_filename
表示日志文件的名称
这里只列出一些通常情况下需要修改的参数,性能调优参数就不一一列举了,我后续可能会专门写一篇 PostgreSQL 性能调优的文章,欢迎大家关注我!
基础运行参数配置完成之后,还需要配置一些访问权限。如下所示使用 cat 命令将 EOF 包含的文件内容,写入/home/postgres/pgdata/pg_hba.conf
配置文件:
第一行的内容表示 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 的加密方式发送。
六、启动数据库新建用户
完成以上的所有的操作之后,我们就可以启动数据库了,使用如下的这些命令启停数据库。
数据库启动之后,我们查看一些数据库运行的进程如下所示:
数据库启动成功,我们输入 psql 命令,进入数据库管理命令行
数据库初始化的过程,新建了一个用户 postgres,我们给它修改一下密码。
一般来说,我们的程序在运行过程中,不会直接使用 postgres 用户,而是新建一个用户。
实际上在生产环境中,我们需要创建两个用户,一个数据库管理用户用于管理表、视图等操作;另一个是程序用户,用于操作数据库表里面的数据,完成增删改查。
七、开机自启动
为了让 PostgreSQL 在以后每次服务器重启之后,都能够自动启动,我们写一个自启动配置文件。下面的命令需要使用 root 用户执行
执行下列命令,使得 PostgreSQL 数据库开机自启动脚本生效。
后续再启停数据库,查看数据库状态,就可以使用下面的这些命令了
版权声明: 本文为 InfoQ 作者【字母哥哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/487b467b952683e6dd27d9061】。未经作者许可,禁止转载。
评论