大家好,我是小唐。一名落魄的低层运维工程师。
前言 {#前言}
时间序列数据库(Time Series Database)是用于存储和管理时间序列数据的专业化数据库,具备写多读少、冷热分明、高并发写入、无事务要求、海量数据持续写入等特点,可以基于时间区间聚合分析和高效检索,广泛应用在物联网、经济金融、环境监控、工业制造、农业生产、硬件和软件系统监控等场景。
最近公司需要使用时序数据库,经过调研发现,TimeScaleDB 就是一款非常好用,功能强大的时序数据库,并且基于强大的PostgreSQL。
而TimeScaleDB官网原话是:TimescaleDB 是 PostgreSQL 的扩展,可让您更轻松、更快速地处理时间序列数据。
因为目前生产用的是pgsql的12版本,因此下面就来部署一下PostgreSQL 12.
一、环境介绍 {#一环境介绍}
CentOS 7.5,内核版本5.7。服务器:8C32G
PostgresSQL 源码包下载地址:https://www.postgresql.org/download
注意内核版本很重要,一定要注意。因为在内核版本2.4的时候需要配置Huge page size,而我这里是5.7版本,就不进行配置了。但是需要配置以下几个参数:
二、内核参数修改 {#二内核参数修改}
vi /etc/sysctl.conf
kernel.shmmax = 30923764531
kernel.shmall = 7340032
fs.file-max = 1000000
sysctl --system
vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
* soft noproc 1000000
* hard noproc 1000000
`ulimit -n 1000000
`
三、确保安装了gcc和make {#三确保安装了gcc和make}
gcc --version
make --version
四、PostgresSQL 服务部署 {#四postgressql-服务部署}
yum -y install readline readline-devel zlib zlib-devel bison
groupadd postgres
useradd -g postgres postgres
passwd postgres
创建相关目录
======
mkdir -p /usr/local/postgresql-12
mkdir -p /data/postgresql-12/{data,log,archive}
chown -R postgres.postgres /data/postgresql-12/
chmod -R 0700 /data/postgresql-12/data
tar xf postgresql-12.6.tar.gz
cd postgresql-12.6
prefix指定的是pgsql的安装目录
====================
./configure --prefix=/usr/local/postgresql-12 --with-pgport=5432
make world
make install-world
添加环境变量
======
vi /etc/profile
postgres-12
===========
`LANG=en_US.utf8
PGDATA=/data/postgresql-12/data
PGHOME=/usr/local/postgresql-12
LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
PATH=$PATH:/usr/local/postgresql-12/bin
export LANG PGDATA PGDATA LD_LIBRARY_PATH PATH
`
五、PostgresSQL初始化 {#五postgressql初始化}
su - posrgres
initdb -D /data/postgresql-12/data
解释:
- -D 指定pgsql数据目录
六、启动和关闭pgsql {#六启动和关闭pgsql}
# 启动pgsql
pg_ctl -D /data/postgres-12/data -l postgresql.log start
关闭pgsql
=======
`pg_ctl stop -D /data/postgres-12/data -mf
`
解释:
- -D 指定路径可以不加
- -l 表示将日志写入到文件
- -mf: 指定模式为fast
- -m 指定模式。一共三种模式:smart、fast、immediate
- smart:停止数据库的时候需要等待所有的客户端都断开连接,最安全。因此停止的速度非常慢
- fast:自动杀掉客户端连接,生产中建议用这个方式。
- immediate:类似kill -9,不是很安全,一般不用
七、设置pgsql密码以及配置远程登录 {#七设置pgsql密码以及配置远程登录}
su - postgres
ALTER USER postgres WITH PASSWORD '设置的密码';
重启pgsql
=======
pg_ctl restart -mf
配置远程登录pgsql
===========
cd /data/postgresql-12/data
vi pg_hba.conf
添加允许远程的网段,也可以是单个ip
==================
host all all 10.10.0.0/16 trust
vi postgresql.conf
配置postgresql.conf
=================
将listen_addresses = 'localhost'改成listen_addresses = '0.0.0.0'
重启pgsql服务
=========
pg_ctl restart -D /data/postgres-12/data
测试远程连接,如下表示远程连接完成
=================
example:psql -U pgsql用户名 -h pgsql的ip -p 端口 -d 数据库名
==================================================
$ psql -U postgres -h 10.10.22.151 -p 5432 -d postgres
psql (12.6)
Type "help" for help.
`postgres=# \q
`
八、PostgreSQL用户角色管理 {#八postgresql用户角色管理}
pgsql中不区分用户和角色的概念,create user其实就是create role 的别名。这两个命令几乎相同。唯一的区别就是create user创建的用户默认带有login的属性,而create role创建的用户默认不带login属性(\du查看的时候会看到cannot login)
# 查看角色
select * from pg_roles;
查看用户
====
`select * from pg_user;
`
8.1、角色属性 {#81角色属性}
属性 说明
login 只有具有login属性的角色,可以用作数据库连接的起始角色名
superuser 数据库超级用户
createdb 创建数据库权限
createrole 允许其创建或者删除其他普通用户的角色(超级权限除外)
replication 做流复制的时候用到的一个用户属性,一般单独设置
password 在登录时要求制定密码时才会起作用,比如md5或者password模式,和客户端连接方式有关
inherit 用户组对组员的一个继承标志,成员可以继承用户的权限特性
8.2、角色授权 {#82角色授权}
# 给已存在的用户赋予各种权限
# 1) 赋予登录权限
alter role allen with logiin;
2) 赋予创建角色权限
===========
alter role jol with createrole;
\\du;
色时并赋予权限
=======
1) 创建角色allen 并赋予创建db的权限
=======================
create role allen createdb;
2) 创建角色allen并赋予创建db的权限且设置密码为allen123,并能够登录
==========================================
create role allen createdb password 'allen123' login;
使用刚才创建的用户登录pgsql
================
psql -U allen -d mydb -h 10.10.22.151 -p 5432
将数据库mydb授权给allen用户
==================
grant all privileges on database mydb to allen;
这里授权后用户还是没有读写权限的,需要切换到mydb库到再授权
===============================
\\c mydb;
注意这条sql语句需要在所要操作的数据库里执行.即上面\\c mydb; 切换到mydb库后再操作
=================================================
grant all privileges on all tables in schema public to allen;
`psql -U allen -d mydb;
CREATE TABLE student (
name varchar(80),
age int
);
insert into student values ('allenjol', 22);
select * from student;
`
本次的部署和用户基本介绍就到这里,后面会将PostgresSQL 的主从流复制。