postgres-xl 安装部署

2022-05-06 00:00:00 代码 节点 配置 默认 复制

PG-XL 集群环境安装部署

集群安装

注意点

  1. 提前基于服务器相关信息及pgxl端口规则,设计出pgxl集群信息表(如下:服务器各节点说明).
  2. pgxl编译时: 编译工具安装、源码上传及确认是否编译、安装成功(successful字眼).
  3. ssh免密码配置、环境变量配置、集群初始、psql相关操作的执行都是在postgres用户下完成.
  4. 防火墙的配置, 如果是内网、测试机,其实直接关闭防火墙, 更好的操作: 通过防火墙命令开放指定端口.

服务器各节点规划说明

如下是3个节点的集群配置

节点名称host名称服务器IP开放端口
gtm_10edcpggtm1x.8.12.106666
gtm_proxy_11edcpgdb011x.8.12.116666
gtm_proxy_12edcpgdb021x.8.12.126666
coord_11edcpgdb011x.8.12.115432 6667
coord_12edcpgdb021x.8.12.125432 6667
dn_11edcpgdb011x.8.12.115433 6668
dn_12edcpgdb021x.8.12.125433 6668
#gtm 节点
firewall-cmd --zone=public --add-port=6666/tcp --permanent

#数据节点( 1x.8.12.11, 1x.8.12.12)
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --zone=public --add-port=5433/tcp --permanent
firewall-cmd --zone=public --add-port=6666/tcp --permanent
firewall-cmd --zone=public --add-port=6667/tcp --permanent
firewall-cmd --zone=public --add-port=6668/tcp --permanent
复制代码

对规划所有节点进行host配置

vim /etc/hosts

1x.8.12.10 edcpggtm
1x.8.12.11 edcpgdb01
1x.8.12.12 edcpgdb02
复制代码

linux用户

用户:postgres 密码: XXXX

useradd postgres #创建用户
passwd postgres # 修改postgres用户密码,密码如上:xxxx
复制代码

安装目录

mkdir -p /usr/local/pgxl10
复制代码

数据及配置目录

mkdir -p /data/pgxl10
复制代码

编译安装命令

环境准备

yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl gcc
复制代码

安装配置

#配置
./configure --prefix=/usr/local/pgxl10
#编译及安装
make world
make install-world
#修改目录权限
chown -R postgres:postgres /usr/local/pgxl10/
chown -R postgres:postgres /data/pgxl10/
复制代码

免密通讯配置

在各节点上postgres用户主目录创建.ssh目录(GTM 节点上进行集群统一管理维护:pgxc_ctl)

mkdir ~/.ssh
chmod 700 ~/.ssh

#在gtm节点上 切换到postgres用户执行下列操作
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

#复制的时候要输入postgres的密码
scp ~/.ssh/authorized_keys postgres@edcpgdb01:~/.ssh/
scp ~/.ssh/authorized_keys postgres@edcpgdb02:~/.ssh/

#访问相关的数据节点,是否能够ssh免密码访问登录
ssh postgres@edcpgdb01
复制代码

配置环境变量

#切换至postgres用户。所有节点都要配置,
vim ~/.bashrc

#增加如下配置
export PG_HOME=/usr/local/pgxl10
export LD_LIBRARY_PATH=$PG_HOME/lib:$LD_LIBRARY_PATH
export PG_DATA=/data/pgxl10
export PATH=$PG_HOME/bin:$PATH


#验证环境变量是否配置成果
source ~/.bashrc #生效环境变量
echo $PG_HOME #测试是否成果
复制代码

PG安装配置修改

#在GTM节点上进入pgxc控制台
>pgxc_ctl
#在控制台执行以下命令,生成一个空的安装配置文件
prepare config empty
#修改postgres用户主目录下 ~/pgxc_ctl/pgxc_ctl.conf
pgxcInstallDir=$PG_HOME #PG-XL程序所在目录
pgxcOwner=$USER #PG-XL的所有者用户
dataDirRoot=$PG_DATA #PG-XL的数据存储目录
coordPgHbaEntries=(0.0.0.0/0) #先设置为所有IP都可以连接
datanodePgHbaEntries=(0.0.0.0/0) #先设置为所有IP都可以连接
#另外还可以增加一些协调和数据节点基础的配置
在cat > $coordExtraConfig <<EOF …… EOF 之间增加协调节点的配置
在cat > $datanodeExtraConfig <<EOF……EOF之间增加数据节点的配置
复制代码

PG集群添加(基于上述节点的规划进行配置)

语法格式:

集群节点添加

add gtm master name host port dir
add gtm slave name host port dir
add gtm_proxy name host port dir
add coordinator master name host port pooler dir< extraServerConf extraPgHbaConf
add coordinator slave name host port pooler dir archDir
add datanode master name host port pooler dir waldir extraServerConf extraPgHbaConf
add datanode slave name host port pooler dir waldir archDir
复制代码

集群节点异常

remove gtm master [ clean ]
remove gtm slave [ clean ]
remove gtm_proxy nodename [ clean ]
remove coordinator [ master| slave ] nodename [ clean ]
remove datanode [ master| slave ] nodename [ clean ]
复制代码

集群节点添加(GTM节点),用户postgres,pgxc_ctl命令集群配置:

#GTM
add gtm master gtm_10 edcpggtm 6666 $PG_DATA/gtm
#GTM Proxy
add gtm_proxy gtm_proxy_11 edcpgdb01 6666 $PG_DATA/gtm_proxy
add gtm_proxy gtm_proxy_12 edcpgdb02 6666 $PG_DATA/gtm_proxy
#Coordinator
add coordinator master node_11 edcpgdb01 5432 6667 $PG_DATA/coord none none
add coordinator master node_12 edcpgdb02 5432 6667 $PG_DATA/coord none none

#Data Node
add datanode master dn_11 edcpgdb01 5433 6668 $PG_DATA/dn none none none
add datanode master dn_12 edcpgdb02 5433 6668 $PG_DATA/dn none none none
复制代码

PG连接及用户密码

客户端连接 可用以下IP及端口:
1x.8.12.11:5432
1x.8.12.12:5432


#psql 连接客户端,创数据库账号并设置密码(如:在1x.8.12.11:5432)
psql

CREATE USER bi WITH PASSWORD 'xxxx'; #创建一个bi用户
复制代码

集群测试

1.psql 命令执行相关命令
命令格式:
psql -h -p # -h:host地址, -p:端口配置
2.通过客户端工具访问测试(如: navicat)
复制代码

集群优化

待持续完善.....

客户端安全认证配置

#在各协调节点的数据根目录下有个pg_hba.conf文件,格式如下:
Type Database User Address Method
local all all 127.0.0.1/32 trust
Type 取值范围 local 本机的socket连接、host 其它机器的普通或ssl的socket连接、hostssl ssl的socket、hostnossl普通的socket
Database 取值范围 "all", "sameuser", "samerole", "replication"和数据库名,或者多个以逗号分隔的数据库名。all中不包含replication,需要另配置一行
User 取值范围 all, 用户名,+组名,以逗号分隔的多个用户名
Address ip地址、网段地址加掩码,samenet可以匹配服务器所在子网中的任何地址。samehost匹配服务器的自己的任何ip
Method "trust", "reject", "md5", "password", "scram-sha-256","gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert".
# "trust"是无需密码,"password"是发送明文密码; "md5" or "scram-sha-256" 是的这个发送的加密密码.
复制代码

PG节点配置重要参数

#gtm-proxy节点
worker_threads = 5 #工作线程数,默认为1,每个线程为1024个固定连接,需要相应的调整。太小会出现连接不够用

#协调节点
max_connections 协调节点大连接数,为客户端提供大的连接数,此参数配置的每个节点的数量,数据库总连接数为所有协调节点之和
max_pool_size 协调节点连接到数据节点时使用的连接池,由于协调节点上的一个连接可能同时连接所有的数据节点
max_prepared_transactions 大于等于协调节点数量
persistent_datanode_connections = on 打开后对性能有帮助

#数据节点
max_connections 数据节点大连接数,为协调节点连接到数据节点的连接数,因为所有协调节点上的所有连接有可能同时连接到同一台数据节点,所以此参数配置为协调节点的大连接数*协调节点个数
max_prepared_transactions 与max_connections相同

#公共的一些参数
shared_buffers 默认128MB 建议配置在物理内存的20%-40%之间
work_mem 默认4MB 用于在排序和哈希表操作在写入临时文件之前用到的内存量,是按并行任务数计算的,这里配置的单个任务的内存量,所以可能会高出配置的很多倍。
max_worker_processes 大的后台进程数,默认是8. 一般根据服务器的CPU能力来配置
max_parallel_workers 支持并行查询的大线程数,默认是8 不能高于max_worker_processes
max_parallel_workers_per_gather 设置单个“收集”或“聚集合并”节点可以启动的大工作程序数,默认是2,受上面两个参数的限制
max_wal_size 有助于提高大数据的加载速度,在大数据加载时,会加快checkpoint,checkpoint时会将数据刷到磁盘,增加该值,可以减少checkpoint的数量。
maintenance_work_mem 有助于提高性能,还可以加快Create Index和 ALTER TABLE ADD FOREIGN KEY的效率。默认64M,可以设置高于work_mem
复制代码

Linux 内核参数优化

Linux透明大页关闭

root用户下

在vi /etc/rc.local后添加如下代码

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi


立即生效需要执行下,使用命令 sh /etc/rc.local
查看修改结果:
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

#如果重启后又变回去了,需要执行
chmod +x /etc/rc.d/rc.local
复制代码

用户角色

#Create User 或 Create Role 这两个命令实质是相同的,Create User是对Create Role的包装,在使用Create User时默认是有LOGIN权限,
#而使用Create Role时默认是NOLOGIN
#Drop User 或 Drop Role 与上面两个对应
语法:CREATE ROLE name [ [ WITH ] option [ ... ] ]
option包含以下列表:
SUPERUSER | NOSUPERUSER 是否有超级管理员的权限,默认NOSUPERUSER
| CREATEDB | NOCREATEDB 是否可以创建数据库,默认NOCREATED
| CREATEROLE | NOCREATEROLE 是否可以创建角色,有该权限时还可以更改和删除其它角色,默认NOCREATEROLE
| INHERIT | NOINHERIT 是否继承其所属角色的相关权限,默认是INHERIT
| LOGIN | NOLOGIN 是否可以登录,CreateUser默认是LOGIN CreateRole默认是NOLOGIN 可以登录的被认为是用户,不能登录的被认为是角色
| REPLICATION | NOREPLICATION 是否是复制角色,这个级别比较高,一般要是超级管理员才能有这个角色,默认是NOREPLICATION
| BYPASSRLS | NOBYPASSRLS 是否绕过行级安全策略,默认是NOBYPASSRLS,在运行pg_dump时没有权限会报错,一般超管和所有者用户都是BYPASSRLS
| CONNECTION LIMIT connlimit 如果可以登录,此参数限制用户或角色的并发连接数,-1为不限制(默认)
| [ ENCRYPTED ] PASSWORD 'password' 登录密码,当身份验证是密码验证时才生效。未指定时为null,当开启密码身份验证时,null的无法登录
| VALID UNTIL 'timestamp' 设置一个密码过期时间,在这个时间之后密码将失效。不设置为永不过期
| IN ROLE role_name [, ...] 列出一个或多个角色,该新用户或角色将加入此列表的成员。
| ROLE role_name [, ...] 列出一个或多个角色,这些角色将做为新角色的成员。
| ADMIN role_name [, ...] 同ROLE子句类似
复制代码

权限相关

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON { SEQUENCE sequence_name [, ...]
| ALL SEQUENCES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN domain_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER fdw_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER server_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE lang_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT loid [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]

where role_specification can be:

[ GROUP ] role_name
| PUBLIC
| CURRENT_USER
| SESSION_USER

GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]

相关文章