PostgreSQL 12源碼包部署及用戶管理

前言
時間序列數(shù)據(jù)庫(Time Series Database)是用于存儲和管理時間序列數(shù)據(jù)的專業(yè)化數(shù)據(jù)庫,具備寫多讀少、冷熱分明、高并發(fā)寫入、無事務要求、海量數(shù)據(jù)持續(xù)寫入等特點,可以基于時間區(qū)間聚合分析和高效檢索,廣泛應用在物聯(lián)網(wǎng)、經(jīng)濟金融、環(huán)境監(jiān)控、工業(yè)制造、農業(yè)生產(chǎn)、硬件和軟件系統(tǒng)監(jiān)控等場景。

最近公司需要使用時序數(shù)據(jù)庫,經(jīng)過調研發(fā)現(xiàn),TimeScaleDB 就是一款非常好用,功能強大的時序數(shù)據(jù)庫,并且基于強大的PostgreSQL。

而TimeScaleDB官網(wǎng)原話是:TimescaleDB 是 PostgreSQL 的擴展,可讓您更輕松、更快速地處理時間序列數(shù)據(jù)。

因為目前生產(chǎn)用的是pgsql的12版本,因此下面就來部署一下PostgreSQL 12.

一、環(huán)境介紹
CentOS 7.5,內核版本5.7。服務器:8C32G

PostgresSQL 源碼包下載地址:https://www.postgresql.org/download

注意內核版本很重要,一定要注意。因為在內核版本2.4的時候需要配置Huge page size,而我這里是5.7版本,就不進行配置了。但是需要配置以下幾個參數(shù):

二、內核參數(shù)修改
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

# 創(chuàng)建相關目錄
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

# 添加環(huán)境變量
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數(shù)據(jù)目錄
?
六、啟動和關閉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:停止數(shù)據(jù)庫的時候需要等待所有的客戶端都斷開連接,最安全。因此停止的速度非常慢
fast:自動殺掉客戶端連接,生產(chǎn)中建議用這個方式。
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
# 添加允許遠程的網(wǎng)段,也可以是單個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 數(shù)據(jù)庫名

$ psql -U postgres -h 10.10.22.151 -p 5432 -d postgres
psql (12.6)
Type "help" for help.

postgres=# \q
八、PostgreSQL用戶角色管理
pgsql中不區(qū)分用戶和角色的概念,create user其實就是create role 的別名。這兩個命令幾乎相同。唯一的區(qū)別就是create user創(chuàng)建的用戶默認帶有l(wèi)ogin的屬性,而create role創(chuàng)建的用戶默認不帶login屬性(\du查看的時候會看到cannot login)

# 查看角色
select * from pg_roles;

# 查看用戶
select * from pg_user;
8.1、角色屬性

屬性            說明
login          只有具有l(wèi)ogin屬性的角色,可以用作數(shù)據(jù)庫連接的起始角色名
superuser      數(shù)據(jù)庫超級用戶
createdb        創(chuàng)建數(shù)據(jù)庫權限
createrole     允許其創(chuàng)建或者刪除其他普通用戶的角色(超級權限除外)
replication    做流復制的時候用到的一個用戶屬性,一般單獨設置
password      在登錄時要求制定密碼時才會起作用,比如md5或者password模式,和客戶端連接方式有關
inherit        用戶組對組員的一個繼承標志,成員可以繼承用戶的權限特性
8.2、角色授權
# 給已存在的用戶賦予各種權限
# 1) 賦予登錄權限
alter role allen with logiin;

# 2) 賦予創(chuàng)建角色權限
alter role jol with createrole;

\du;

# 色時并賦予權限
# 1) 創(chuàng)建角色allen 并賦予創(chuàng)建db的權限
create role allen createdb;

# 2) 創(chuàng)建角色allen并賦予創(chuàng)建db的權限且設置密碼為allen123,并能夠登錄
create role allen createdb password 'allen123' login;

# 使用剛才創(chuàng)建的用戶登錄pgsql
psql -U allen  -d mydb -h 10.10.22.151 -p 5432


# 將數(shù)據(jù)庫mydb授權給allen用戶
grant all privileges on database mydb to allen;

# 這里授權后用戶還是沒有讀寫權限的,需要切換到mydb庫到再授權
\c mydb;
# 注意這條sql語句需要在所要操作的數(shù)據(jù)庫里執(zhí)行.即上面\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 的主從流復制。



作者:小姜 運維開發(fā)故事


歡迎關注:運維開發(fā)故事