PostgreSQL citus python环境搭建

背景

随着大数据技术的发展,我们现在开发的软件系统管理的数据量越来越大,特别是随着软件Saas的发展,各种软件都在向多租户平台发展,而当前大部分程序员是熟悉SQL语言的程序员,或者说只能够在SQL上进行开发,使用NoSQL、NewSQL数据库开发所花费的学习成本也是比较高的,随之,分布式关系型数据库诞生,今天给大家介绍的基于PostgreSQL的citus分布式数据库,就是一种适合Saas化、多租户平台的数据库。

Python语言,作为当前大数据环境下流行的计算机语言,其简单、高效的编程思想,与PostgreSQL的结合也非常紧密,PostgreSQL自身支持PL/Python语言进行数据库编程,所以,我们在使用PostgreSQL数据库开发时特别喜欢使用PL/Python语言进行数据库的存储过程、触发器等编程,尤其时它更容易与机器学习相结合,可以实现在数据库中进行机器学习运算。

Citus简介

citus是PostgreSQL的一个sharding插件,可以把PostgreSQL变成一个分布式数据库。目前在苏宁有大量的生产应用运行在PostgreSQL+citus的环境中。

citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不仅仅是客户端协议的兼容还包括服务端扩展和管理工具的完全兼容)。

和其他类似的基于PostgreSQL的分布式方案,比如GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不同在于citus是一个PostgreSQL扩展而不是一个独立的代码分支。

因此,citus可以用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。

另外,Citus不仅仅可以用于OLAP,也可以用于OLTP,属于 HTAP , 是未来数据库发展的一个方向。 HTAP 既可以处理在线交易事务,又可以处理在线实时分析 。

PL/Python 过程语言

PL/Python 过程语言允许用Python编写 PostgreSQL 函数。 其优势就是简单易用,能够大量简化复杂的计算,同时天然与大数据、机器学习相结合。

环境规划

IP角色端口
192.168.0.101worker5432
192.168.0.102worker5432
192.168.0.103worker5432
192.168.0.104worker5432
192.168.0.105worker5432
192.168.0.100coordinate5432
  • coordinate

    协调节点,一般称为cn,存储所有元数据,不存实际数据,该节点直接对用户开放,等于一个客户端。

  • worker

    工作节点,不存储元数据,存储实际数据。执行协调节点发来的查询请求。一般不直接对用户开放。

操作系统

本例选择Debian 10作为基础操作系统

版本选择

通过查阅官方网站,目前建议选择版本

软件版本
PostgreSQL14.1
citus10.2.3
Python3.7

环境搭建

1.编译安装PostgreSQL

请到PostgreSQL官方网站下载源码

在规划安装的每台机器上编译安装PostgreSQL

1.1安装依赖库

apt-get install make gcc g++ gdb automake
apt-get install build-essential gdb bison flex zlib1g-dev libreadline-dev

1.2创建用户

groupadd postgres
useradd -g postgres postgres

1.3准备源代码

将源代码上传到服务器/usr/local,并解压缩。

tar zxvf postgresql-14.1.tar.gz
chown postgres postgresql-14.1 -R
mkdir /usr/local/pgsql
chown postgres /usr/local/pgsql

1.4源代码配置、编译、安装

以postgres用户进行操作

su postgres
cd postgresql-14.1
./configure --prefix=/usr/local/pgsql --with-python
make
make install

当OS中有多个python版本,需要指定python路径,./configure参数加上PYTHON=/usr/bin/python3 指定python文件

2.初始化数据库并配置集群

在每台机器上以postgres用户进行操作

2.1初始化数据库

以root用户操作

mkdir /u01/pgsql/data -p
chown postgres /u01/pgsql -R

以postgres用户操作

su postgres
cd /usr/local/pgsql/bin
./initdb -E UNICODE -D /u01/pgsql/data

2.2配置监听地址与端口参数

以postgres用户操作

vi /u01/pgsql/data/postgresql.conf

修改对应参数:

listen_addresses='*'
port=5432
data_directory='/u01/pgsql/data'
hba_file='/u01/pgsql/data/pg_hba.conf' 
ident_file='/u01/pgsql/data/pg_ident.conf'

2.3配置远程连接

  • cn节点:

以postgres用户操作

vi /u01/pgsql/data/pg_hba.conf

添加一行:

host all all 0.0.0.0/0 password
  • worker节点:

以postgres用户操作

vi /u01/pgsql/data/pg_hba.conf

添加一行:

host all all 192.168.0.0/24 trust

2.4安装citus

在每个节点上将下载的citus源代码上传并解压缩。

以root用户操作:

apt-get install curl
apt-get install libcurl4-openssl-dev
apt-get install liblz4-dev
apt-get install libzstd-dev

以postgres用户操作:

cd citus-10.2.3
export PATH=$PATH:/usr/local/pgsql/bin
./configure
make 
make install

2.5集群配置

1.在每个节点上以postgres用户执行

echo "shared_preload_libraries = 'citus'" >> /u01/pgsql/data/postgresql.conf

2.启动节点

以root用户执行

  • 启动worker节点

su postgres -c  "/usr/local/pgsql/bin/pg_ctl -D /u01/pgsql/data -l /u01/pgsql/data/server.log start"
  • 启动cn节点

su postgres -c  "/usr/local/pgsql/bin/pg_ctl -D /u01/pgsql/data -l /u01/pgsql/data/server.log start"

3.创建数据库

在所有节点以postgres用户执行:

cd /usr/local/pgsql/bin
psql
postgres=#create database 数据库名;
postgres=# \c 数据库名
数据库名=# create extension citus;

4.为cn节点修改用户密码

在cn节点上执行

su postgres
cd /usr/local/pgsql/bin
./psql postgres
postgres=# \password postgres
Enter new password: 
Enter it again: 
postgres=#

5.协调节点新增工作节点

以后的管理操作仅仅在协调节点(cn)上操作

psql -d 数据库名
psql
Type "help" for help.
数据库名=#SELECT * from master_add_node('192.160.0.101', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.102', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.103', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.104', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.105', 5432);

6.查看工作节点

SELECT * FROM master_get_active_worker_nodes();

3.创建分片表

--创建数据表
create table shiptrack(gid serial primary key,tracktime timestamp without time zone);
--配置分片策略,设置分片数,5个主机,设置分片5,每个主机一张表
set citus.shard_count=5;
--配置副本数
set citus.shard_replication_factor=2;
--将数据表配置为分片表
SELECT create_distributed_table('shiptrack', 'gid', 'hash');
--查看分片分布
SELECT * from pg_dist_shard_placement order by shardid, placementid;

4.配置PL/Python

CREATE EXTENSION plpython3u;

5.编写一个简单的PL/Python函数进行测试

CREATE FUNCTION testpython ()
  RETURNS text
AS $$
  txt = 'Hello world!'
  plpy.info(txt)
  return txt
$$ LANGUAGE plpython3u;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值