This is the multi-page printable view of this section. Click here to print.
模块:专业/试点
- 1: 模块:MySQL
- 2: 模块:Kafka
- 3: 模块:DuckDB
- 4: 模块:TigerBeetle
- 5: 模块:Kubernetes
- 6: 模块:Consul
- 7: 模块:Victoria
- 8: 模块:Jupyter
1 - 模块:MySQL
概览
MySQL 模块本身目前仅在 Pigsty 专业版中提供 Beta 试用预览,注意,请不要将这里的 MySQL 用于生产环境。
安装
您可以直接使用以下命令,在 Pigsty 管理的节点上,直接从官方软件源安装 MySQL 8.0 (EL系统)
# el 7,8,9
./node.yml -t node_install -e '{"node_repo_modules":"node,mysql","node_packages":["mysql-community-server,mysql-community-client"]}'
# debian / ubuntu
./node.yml -t node_install -e '{"node_repo_modules":"node,mysql","node_packages":["mysql-server"]}'
您也可以将 MySQL 软件包加入本地软件源后,使用 MySQL 剧本 mysql.yml
进行生产环境部署。
配置
以下配置片段定义了一个单节点的 MySQL 实例,以及其中的 Database 与 User。
my-test:
hosts: { 10.10.10.10: { mysql_seq: 1, mysql_role: primary } }
vars:
mysql_cluster: my-test
mysql_databases:
- { name: meta }
mysql_users:
- { name: dbuser_meta ,host: '%' ,password: 'dbuesr_meta' ,priv: { "*.*": "SELECT, UPDATE, DELETE, INSERT" } }
- { name: dbuser_dba ,host: '%' ,password: 'DBUser.DBA' ,priv: { "*.*": "ALL PRIVILEGES" } }
- { name: dbuser_monitor ,host: '%' ,password: 'DBUser.Monitor' ,priv: { "*.*": "SELECT, PROCESS, REPLICATION CLIENT" } ,connlimit: 3 }
管理
以下是基本的 MySQL 集群基本管理操作:
使用 mysql.yml
创建 MySQL 集群:
./mysql.yml -l my-test
剧本
Pigsty 提供了一个与 MYSQL 模块相关的剧本,用于部署 MySQL 集群
mysql.yml
: 根据配置清单部署 MySQL
mysql.yml
用于部署 MySQL 模式集群的 mysql.yml
剧本包含以下子任务:
mysql-id : generate mysql instance identity
mysql_clean : remove existing mysql instance (DANGEROUS)
mysql_dbsu : create os user mysql
mysql_install : install mysql rpm/deb packages
mysql_dir : create mysql data & conf dir
mysql_config : generate mysql config file
mysql_boot : bootstrap mysql cluster
mysql_launch : launch mysql service
mysql_pass : write mysql password
mysql_db : create mysql biz database
mysql_user : create mysql biz user
mysql_exporter : launch mysql exporter
mysql_register : register mysql service to prometheus
监控
Pigsty 提供了两个与 MYSQL
模块有关的监控面板:
MYSQL Overview 展示了 MySQL 集群的整体监控指标。
MYSQL Instance 展示了单个 MySQL 实例的监控指标详情
参数
MySQL 的可用配置项:
#-----------------------------------------------------------------
# MYSQL_IDENTITY
#-----------------------------------------------------------------
# mysql_cluster: #CLUSTER # mysql cluster name, required identity parameter
# mysql_role: replica #INSTANCE # mysql role, required, could be primary,replica
# mysql_seq: 0 #INSTANCE # mysql instance seq number, required identity parameter
#-----------------------------------------------------------------
# MYSQL_BUSINESS
#-----------------------------------------------------------------
# mysql business object definition, overwrite in group vars
mysql_users: [] # mysql business users
mysql_databases: [] # mysql business databases
mysql_services: [] # mysql business services
# global credentials, overwrite in global vars
mysql_root_username: root
mysql_root_password: DBUser.Root
mysql_replication_username: replicator
mysql_replication_password: DBUser.Replicator
mysql_admin_username: dbuser_dba
mysql_admin_password: DBUser.DBA
mysql_monitor_username: dbuser_monitor
mysql_monitor_password: DBUser.Monitor
#-----------------------------------------------------------------
# MYSQL_INSTALL
#-----------------------------------------------------------------
# - install - #
mysql_dbsu: mysql # os dbsu name, mysql by default, better not change it
mysql_dbsu_uid: 27 # os dbsu uid and gid, 306 for default mysql users and groups
mysql_dbsu_home: /var/lib/mysql # mysql home directory, `/var/lib/mysql` by default
mysql_dbsu_ssh_exchange: true # exchange mysql dbsu ssh key among same mysql cluster
mysql_packages: # mysql packages to be installed, `mysql-community*` by default
- mysql-community*
- mysqld_exporter
# - bootstrap - #
mysql_data: /data/mysql # mysql data directory, `/data/mysql` by default
mysql_listen: '0.0.0.0' # mysql listen addresses, comma separated IP list
mysql_port: 3306 # mysql listen port, 3306 by default
mysql_sock: /var/lib/mysql/mysql.sock # mysql socket dir, `/var/lib/mysql/mysql.sock` by default
mysql_pid: /var/run/mysqld/mysqld.pid # mysql pid file, `/var/run/mysqld/mysqld.pid` by default
mysql_conf: /etc/my.cnf # mysql config file, `/etc/my.cnf` by default
mysql_log_dir: /var/log # mysql log dir, `/var/log/mysql` by default
mysql_exporter_port: 9104 # mysqld_exporter listen port, 9104 by default
mysql_parameters: {} # extra parameters for mysqld
mysql_default_parameters: # default parameters for mysqld
2 - 模块:Kafka
概览
Kafka 模块本身目前仅在 Pigsty 专业版中提供 Beta 试用预览。
安装
如果您使用开源版 Pigsty,可以使用以下命令,在指定节点上安装 Kafka 及其 Java 依赖。
Pigsty 在官方 Infra 仓库中提供了 Kafka 3.8.0 的 RPM 与 DEB 安装包,如果需要使用,可以直接下载安装。
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["kafka"]}'
Kafka 依赖 Java 运行环境,因此在安装 Kafka 时,需要安装可用的 JDK (默认使用 OpenJDK 17,但其他 JDK 与版本,例如 8,11 都可以使用)
# EL7 (没有 JDK 17 支持)
./node.yml -t node_install -e '{"node_repo_modules":"node","node_packages":["java-11-openjdk-headless"]}'
# EL8 / EL9 (使用 OpenJDK 17 )
./node.yml -t node_install -e '{"node_repo_modules":"node","node_packages":["java-17-openjdk-headless"]}'
# Debian / Ubuntu (使用 OpenJDK 17)
./node.yml -t node_install -e '{"node_repo_modules":"node","node_packages":["openjdk-17-jdk"]}'
配置
单节点 Kafka 配置样例,请注意,在 Pigsty 单机部署模式下,管理节点上的 9093 端口默认已经被 AlertManager 占用。
建议在管理节点上安装 Kafka 时,Peer Poort 使用其他端口,例如(9095)。
kf-main:
hosts:
10.10.10.10: { kafka_seq: 1, kafka_role: controller }
vars:
kafka_cluster: kf-main
kafka_data: /data/kafka
kafka_peer_port: 9095 # 9093 is already hold by alertmanager
三节点 Kraft 模式 Kafka 集群配置样例:
kf-test:
hosts:
10.10.10.11: { kafka_seq: 1, kafka_role: controller }
10.10.10.12: { kafka_seq: 2, kafka_role: controller }
10.10.10.13: { kafka_seq: 3, kafka_role: controller }
vars:
kafka_cluster: kf-test
管理
以下是基本的 Kafka 集群基本管理操作:
使用 kafka.yml
创建 Kafka 集群:
./kafka.yml -l kf-main
./kafka.yml -l kf-test
创建一个名为 test
的 Topic:
kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
这里 --replication-factor 1
表示每个数据只会复制一次,--partitions 1
表示只创建一个分区。
使用以下命令,查看 Kafka 中的 Topic 列表:
kafka-topics.sh --bootstrap-server localhost:9092 --list
使用 Kafka 自带的消息生产者,向 test
Topic 发送消息:
kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
>haha
>xixi
>hoho
>hello
>world
> ^D
使用 Kafka 自带的消费者,从 test
Topic 中读取消息:
kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092
剧本
Pigsty 提供了两个与 KAFKA 模块相关的剧本,分别用于纳管与移除节点。
node.yml
:纳管节点,并调整节点到期望的状态node-rm.yml
:从 pigsty 中移除纳管节点
此外, Pigsty 还提供了两个包装命令工具:node-add
与 node-rm
,用于快速调用剧本。
kafka.yml
用于部署 Kafka KRaft 模式集群的 kafka.yml
剧本包含以下子任务:
kafka-id : generate kafka instance identity
kafka_clean : remove existing kafka instance (DANGEROUS)
kafka_user : create os user kafka
kafka_pkg : install kafka rpm/deb packages
kafka_link : create symlink to /usr/kafka
kafka_path : add kafka bin path to /etc/profile.d
kafka_svc : install kafka systemd service
kafka_dir : create kafka data & conf dir
kafka_config : generate kafka config file
kafka_boot : bootstrap kafka cluster
kafka_launch : launch kafka service
kafka_exporter : launch kafka exporter
kafka_register : register kafka service to prometheus
监控
Pigsty 提供了两个与 KAFKA
模块有关的监控面板:
KAFKA Overview 展示了 Kafka 集群的整体监控指标。
KAFKA Instance 展示了单个 Kafka 实例的监控指标详情
参数
Kafka 的可用配置项:
#kafka_cluster: #CLUSTER # kafka cluster name, required identity parameter
#kafka_role: controller #INSTANCE # kafka role, controller, broker, or controller-only
#kafka_seq: 0 #INSTANCE # kafka instance seq number, required identity parameter
kafka_clean: false # cleanup kafka during init? false by default
kafka_data: /data/kafka # kafka data directory, `/data/kafka` by default
kafka_version: 3.8.0 # kafka version string
scala_version: 2.13 # kafka binary scala version
kafka_port: 9092 # kafka broker listen port
kafka_peer_port: 9093 # kafka broker peer listen port, 9093 by default (conflict with alertmanager)
kafka_exporter_port: 9308 # kafka exporter listen port, 9308 by default
kafka_parameters: # kafka parameters to be added to server.properties
num.network.threads: 3
num.io.threads: 8
socket.send.buffer.bytes: 102400
socket.receive.buffer.bytes: 102400
socket.request.max.bytes: 104857600
num.partitions: 1
num.recovery.threads.per.data.dir: 1
offsets.topic.replication.factor: 1
transaction.state.log.replication.factor: 1
transaction.state.log.min.isr: 1
log.retention.hours: 168
log.segment.bytes: 1073741824
log.retention.check.interval.ms: 300000
#log.retention.bytes: 1073741824
#log.flush.interval.ms: 1000
#log.flush.interval.messages: 10000
资源
Pigsty 为 PostgreSQL 提供了一些 Kafka 相关的扩展插件:
kafka_fdw
,一个有趣的 FDW,允许用户直接从 PostgreSQL 中读写 Kafka Topic 数据wal2json
,用于从 PostgreSQL 中逻辑解码 WAL 日志,生成 JSON 格式的变更数据wal2mongo
,用于从 PostgreSQL 中逻辑解码 WAL 日志,生成 BSON 格式的变更数据decoder_raw
,用于从 PostgreSQL 中逻辑解码 WAL 日志,生成 SQL 格式的变更数据test_decoding
,用于从 PostgreSQL 中逻辑解码 WAL 日志,生成 RAW 格式的变更数据
3 - 模块:DuckDB
概览
DuckDB 是一个嵌入式数据库,所以不需要部署与服务化,只需要在节点上安装 DuckDB 软件包即可使用。
安装
Pigsty 在 Infra 软件仓库中已经提供了 DuckDB 软件包 (RPM / DEB),使用以下命令即可完成安装:
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["duckdb"]}'
相关资源
Pigsty 为 PostgreSQL 提供了一些 DuckDB 相关的扩展插件:
pg_analytics
,旨在基于 DuckDB 提供高性能 OLAP 分析能力pg_lakehouse
,由 ParadeDB 出品的数据湖仓插件,封装了 DuckDB。(目前计划重命名回pg_analytics
)duckdb_fdw
,DuckDB 外部数据源包装器,允许从PG中读写 DuckDB 数据文件pg_duckdb
,由 DuckDB 官方 MotherDuck 和 Hydra 出品的扩展插件,WIP (仅在 EL 系统中提供试点)
4 - 模块:TigerBeetle
TigerBeetle 是一个金融会计事务专用数据库,提供了极致性能与可靠性。
概览
TigerBeetle 模块目前仅在 Pigsty 专业版中提供 Beta 试用预览。
安装
Pigsty Infra 仓库中提供了 TigerBeetle 的 RPM / DEB 软件包,使用以下命令即可完成安装:
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["tigerbeetle"]}'
即可安装,然后请参考官方文档进行配置:https://github.com/tigerbeetle/tigerbeetle
TigerBeetle需要Linux内核5.5以上版本!
请注意,TigerBeetle 仅支持 Linux 内核 5.5 或更高版本,因此默认在 EL7 (3.10) / EL8 (4.18) 系统上无法使用。
请使用 EL9 (5.14), Ubuntu 22.04 (5.15),或 Debian 12 (6.1) 与 Debian 11 (5.10),或其他支持的系统来安装 Tiger Beetle
5 - 模块:Kubernetes
Kubernetes 是生产级无状态容器调度编排私有云平台。
Pigsty 提供了原生的 [ETCD
] 集群支持,可以供 Kubernetes 使用,因此也在专业版中提供了 KUBE
模块,用于部署生产级 Kubernetes 集群。
Kubernetes 模块目前仅在 Pigsty Pro 专业版本中提供 Beta 预览,在开源版本中不可用。
但您可以直接在 Pigsty 中指定节点仓库,安装 Kubernetes 软件包,并使用 Pigsty 调整环境配置,置备节点供 K8S 部署使用,解决交付的最后一公里问题。
SealOS
SealOS 是一个 Kubernetes 发行版,可以用于将整个 Kubernetes 集群打包制作为一个镜像在其他地方使用
Pigsty 在 Infra 仓库中提供了 SealOS 5.0 的 RPM 与 DEB 安装包,可以直接下载安装,并使用 SealOS 管理集群。
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["sealos"]}'
Kubernetes
如果您更喜欢使用经典的 Kubeadm 来部署 Kubernetes,请参考下面的 KUBE 模块参考。
./node.yml -t node_install -e '{"node_repo_modules":"kube","node_packages":["kubeadm,kubelet,kubectl"]}'
Kubernetes 支持多种容器运行时,要是用 Containerd 容器运行时,请确保节点上已经安装了 Containerd 软件包。
./node.yml -t node_install -e '{"node_repo_modules":"node,docker","node_packages":["containerd.io"]}'
若要使用 Docker 作为容器运行时,您需要安装 Docker ,并使用 cri-dockerd
项目桥接(EL9 / D11 / U20 尚不可用):
./node.yml -t node_install -e '{"node_repo_modules":"node,infra,docker","node_packages":["docker-ce,docker-compose-plugin,cri-dockerd"]}'
剧本
kube.yml
剧本
监控
TBD
参数
Kubernetes 模块支持以下配置参数
#kube_cluster: #IDENTITY# # define kubernetes cluster name
kube_role: node # default kubernetes role (master|node)
kube_version: 1.31.0 # kubernetes version
kube_registry: registry.aliyuncs.com/google_containers # kubernetes version aliyun k8s miiror repository
kube_pod_cidr: "10.11.0.0/16" # kubernetes pod network cidr
kube_service_cidr: "10.12.0.0/16" # kubernetes service network cidr
kube_dashboard_admin_user: dashboard-admin-sa # kubernetes dashboard admin user name
6 - 模块:Consul
Consul 是一个分布式 DCS + KV + DNS + 服务注册/发现的组件。
在旧版本 (1.x) 的 Pigsty 里,默认使用 Consul 作为高可用的 DCS,现在该支持已经移除,但会在后续重新作为独立模块提供。
配置
要部署 Consul,您需要将所有节点的 IP 地址和主机名添加到 consul
分组中。
您至少需要指定一个节点的 consul_role
为 server
,其他节点的 consul_role
默认为 node
。
consul:
hosts:
10.10.10.10: { nodename: meta , consul_role: server }
10.10.10.11: { nodename: node-1 }
10.10.10.12: { nodename: node-2 }
10.10.10.13: { nodename: node-3 }
我们建议在严肃生产部署中使用奇数个 Consul Server,三个为宜。
参数
#-----------------------------------------------------------------
# CONSUL
#-----------------------------------------------------------------
consul_role: node # consul role, node or server, node by default
consul_dc: pigsty # consul data center name, `pigsty` by default
consul_data: /data/consul # consul data dir, `/data/consul`
consul_clean: true # consul purge flag, if true, clean consul during init
consul_ui: false # enable consul ui, the default value for consul server is true
7 - 模块:Victoria
VictoriaMetrics 是 Prometheus 的原地上位替代,提供更好的性能,压缩比。
概览
Victoria 模块目前仅在 Pigsty 专业版中提供 Beta 试用预览。包含了 VictoriaMetrics 与 VictoriaLogs 组件的部署与管理。
安装
Pigsty Infra 仓库中提供了 VictoriaMetrics 的 RPM / DEB 软件包,使用以下命令即可完成安装:
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["victoria-metrics"]}'
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["victoria-metrics-cluster"]}'
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["victoria-metrics-utils"]}'
./node.yml -t node_install -e '{"node_repo_modules":"infra","node_packages":["victoria-logs"]}'
通常普通用户安装单机版 VictoriaMetrics 即可,如果需要集群部署,可以安装 victoria-metrics-cluster
软件包。
8 - 模块:Jupyter
Run jupyter notebook with docker, you have to:
-
- change the default password in
.env
:JUPYTER_TOKEN
- change the default password in
-
- create data dir with proper permission:
make dir
, owned by1000:100
- create data dir with proper permission:
-
make up
to pull up jupyter with docker compose
cd ~/pigsty/app/jupyter ; make dir up
Visit http://lab.pigsty or http://10.10.10.10:8888, the default password is pigsty
Prepare
Create a data directory /data/jupyter
, with the default uid & gid 1000:100
:
make dir # mkdir -p /data/jupyter; chown -R 1000:100 /data/jupyter
Connect to Postgres
Use the jupyter terminal to install psycopg2-binary
& psycopg2
package.
pip install psycopg2-binary psycopg2
# install with a mirror
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple psycopg2-binary psycopg2
pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Or installation with conda
:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
then use the driver in your notebook
import psycopg2
conn = psycopg2.connect('postgres://dbuser_dba:DBUser.DBA@10.10.10.10:5432/meta')
cursor = conn.cursor()
cursor.execute('SELECT * FROM pg_stat_activity')
for i in cursor.fetchall():
print(i)
Alias
make up # pull up jupyter with docker compose
make dir # create required /data/jupyter and set owner
make run # launch jupyter with docker
make view # print jupyter access point
make log # tail -f jupyter logs
make info # introspect jupyter with jq
make stop # stop jupyter container
make clean # remove jupyter container
make pull # pull latest jupyter image
make rmi # remove jupyter image
make save # save jupyter image to /tmp/docker/jupyter.tgz
make load # load jupyter image from /tmp/docker/jupyter.tgz