大家好,我是小姜。一名落魄的低層運維工程師。
前言
時間序列資料庫(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 --version
make --version
複制
四、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初始化
su - posrgres
initdb -D /data/postgresql-12/data
複制
❝解釋:
- -D 指定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密碼以及配置遠端登入
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使用者角色管理
pgsql中不區分使用者和角色的概念,create user其實就是create role 的别名。這兩個指令幾乎相同。唯一的差別就是create user建立的使用者預設帶有login的屬性,而create role建立的使用者預設不帶login屬性(\du檢視的時候會看到cannot login)
# 檢視角色
select * from pg_roles;
# 檢視使用者
select * from pg_user;
複制
8.1、角色屬性
屬性 說明
login 隻有具有login屬性的角色,可以用作資料庫連接配接的起始角色名
superuser 資料庫超級使用者
createdb 建立資料庫權限
createrole 允許其建立或者删除其他普通使用者的角色(超級權限除外)
replication 做流複制的時候用到的一個使用者屬性,一般單獨設定
password 在登入時要求制定密碼時才會起作用,比如md5或者password模式,和用戶端連接配接方式有關
inherit 使用者組對組員的一個繼承标志,成員可以繼承使用者的權限特性
複制
8.2、角色授權
# 給已存在的使用者賦予各種權限
# 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 的主從流複制。