安装部署
Module:
简短版本
准备 一个安装了 兼容 操作系统的 Linux x86_64
/ aarch64
节点,使用带有免密 sudo
权限的用户,执行以下命令:
curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty;
该命令会 下载 并解压 Pigsty 源码至家目录,依次完成 配置 与安装 即可完成安装。
./bootstrap; ./configure; ./install.yml; # 准备依赖,生成配置,安装 Pigsty 三步走!
- bootstrap:【可选】用于确保 Ansible 正常安装,如果
/tmp/pkg.tgz
离线包存在则使用它 - configure:【可选】检测环境并自动生成相应的推荐配置文件,如果知道如何 配置 Pigsty可以直接跳过
- install.yml:根据生成的配置文件开始在当前节点上执行安装,
整个安装过程根据服务器规格/网络条件需 5 到 30 分钟不等,离线安装可以显著加速。
安装完成后,您可以通过域名,或80/443
端口通过 Nginx 访问 WEB 界面,
通过 5432
端口 访问 默认的 PostgreSQL 数据库 服务。
您可以继续使用 Pigsty 纳管 更多 节点,并部署各种 模块。
如果您觉得 Pigsty 的组件过于复杂,还可以考虑使用 最小化安装 ,仅安装高可用 PostgreSQL 集群所必需的组件。
视频样例:在线单机安装(EL9)
准备
关于准备工作的完整详细说明,请参考 入门:准备工作 一节。
Pigsty 支持 Linux
内核与 x86_64/aarch64
架构,运行于物理机、虚拟机环境中,要求使用静态IP地址。
最低配置要求为 1C1G
,推荐至少使用 2C4G
以上的机型,上不封顶,参数会自动优化适配。
我们强烈建议您使用刚安装完操作系统的全新节点部署,从而避免无谓的安装异常问题,建议使用 RockyLinux 8.9 或 Ubuntu 22.04.3, 支持的完整操作系统列表请参考 兼容性。
在安装 Pigsty 的管理节点上,您需要拥有 ssh
登陆权限与 sudo
权限。
如果您的部署涉及多个节点,您应当确保当前管理用户在当前管理节点上,可以通过 SSH 公钥免密登陆其他被管理的节点(包括本节点)。
避免使用 root 用户安装
尽管使用root
用户安装 Pigsty 是可行的,但 安全最佳实践
是使用一个不同于根用户(root
)与数据库超级用户 (postgres
) 的专用管理员用户(如:dba
),
Pigsty 安装过程中会默认创建由配置文件指定的可选管理员用户 dba
。
Pigsty 依赖 Ansible 执行剧本,在执行安装前,您需要先安装 ansible
与 jmespath
软件包。
您可以通过 bootstrap
脚本完成这一任务,特别是当您没有互联网访问,需要进行离线安装时。
./bootstrap # 使用各种可选方式安装 Ansible 与 Jmespath 依赖,如果离线包存在则使用离线包
您也可以直接使用操作系统的包管理器安装所需的 Ansible 与 Jmespath 软件包:
sudo dnf install -y ansible python3.12-jmespath python3-cryptography
sudo yum install -y ansible # EL7 无需显式安装 Jmespath
sudo apt install -y ansible python3-jmespath
brew install ansible
下载
您可以使用以下命令自动下载、解压 Pigsty 源码包至 ~/pigsty
目录下使用:
curl -fsSL https://repo.pigsty.cc/get | bash # 安装最新稳定版本
curl -fsSL https://repo.pigsty.cc/get | bash -s v3.1.0 # 安装特定版本 3.1.0
一键下载脚本的样例输出
$ curl -fsSL https://repo.pigsty.cc/get | bash
[v3.1.0] ===========================================
$ curl -fsSL https://repo.pigsty.cc/get | bash
[Site] https://pigsty.io
[Demo] https://demo.pigsty.cc
[Repo] https://github.com/Vonng/pigsty
[Docs] https://pigsty.io/docs/setup/install
[Download] ===========================================
[ OK ] version = v3.1.0 (from default)
curl -fSL https://repo.pigsty.cc/src/pigsty-v3.1.0.tgz -o /tmp/pigsty-v3.1.0.tgz
[WARN] tarball = /tmp/pigsty-v3.1.0.tgz exists, size = 1227379, use it
[ OK ] md5sums = 01b4acbe8983c1324652ae68b4f3c56f /tmp/pigsty-v3.1.0.tgz
[Install] ===========================================
[WARN] os user = root , it's recommended to install as a sudo-able admin
[WARN] pigsty already installed on '/root/pigsty', if you wish to overwrite:
sudo rm -rf /tmp/pigsty_bk; cp -r /root/pigsty /tmp/pigsty_bk; # backup old
sudo rm -rf /tmp/pigsty; tar -xf /tmp/pigsty-v3.1.0.tgz -C /tmp/; # extract new
rsync -av --exclude='/pigsty.yml' --exclude='/files/pki/***' /tmp/pigsty/ /root/pigsty/; # rsync src
[TodoList] ===========================================
cd /root/pigsty
./bootstrap # [OPTIONAL] install ansible & use offline package
./configure # [OPTIONAL] preflight-check and config generation
./install.yml # install pigsty modules according to your config.
[Complete] ===========================================
你也可以使用 git
来下载 Pigsty 源代码,请 务必 检出特定版本后使用。
git clone https://github.com/Vonng/pigsty; cd pigsty; git checkout v3.1.0
配置
配置 / configure
会根据您当前的环境,自动生成推荐的(单机安装) pigsty.yml
配置文件。
提示: 如果您已经了解了如何配置 Pigsty,configure
这个步骤是可选的,可以跳过。 Pigsty 提供了许多开箱即用的预置 配置模板 供您参考。
./configure # 不带参数会自动推荐配置,并交互式问询
./configure [-i|--ip <ipaddr>] # 指定首要 IP 地址,如果不指定,将在检测到多个可用IP地址时问询。
[-c|--conf <conf>] # 指定配置模板(相对于 conf/ 目录的配置名称,不带.yml 后缀),默认使用 meta 单节点模板
[-v|--version <ver>] # 指定要安装 PostgreSQL 大版本,部分模板不适用此配置
[-r|--region <default|china|europe>] # 选择镜像源区域,如果在 GFW 区域内,将被设置为 china
[-n|--non-interactive] # 跳过交互式向导
[-x|--proxy] # 将环境变量中的代理配置写入配置文件的 proxy_env 参数中
配置 / configure 过程的样例输出
$ ./configure
configure pigsty v3.1.0 begin
[ OK ] region = china
[ OK ] kernel = Linux
[ OK ] machine = x86_64
[ OK ] package = rpm,yum
[ OK ] vendor = centos (CentOS Linux)
[ OK ] version = 7 (7)
[ OK ] sudo = vagrant ok
[ OK ] ssh = [email protected] ok
[WARN] Multiple IP address candidates found:
(1) 192.168.121.110 inet 192.168.121.110/24 brd 192.168.121.255 scope global noprefixroute dynamic eth0
(2) 10.10.10.10 inet 10.10.10.10/24 brd 10.10.10.255 scope global noprefixroute eth1
[ OK ] primary_ip = 10.10.10.10 (from demo)
[ OK ] admin = [email protected] ok
[WARN] mode = el7, CentOS 7.9 EOL @ 2024-06-30, deprecated, consider using el8 or el9 instead
[ OK ] configure pigsty done
proceed with ./install.yml
-i|--ip
: 当前主机的首要内网IP地址,用于替换配置文件中的 IP 地址占位符10.10.10.10
。-c|--conf
: 用于指定使用的配置 配置模板,相对于conf/
目录,不带.yml
后缀的配置名称。-v|--version
: 用于指定要安装的 PostgreSQL 大版本,如13
、14
、15
、16
、17
,部分模板不支持此配置。-r|--region
: 用于指定上游软件源的区域,加速下载: (default|china|europe
)-n|--non-interactive
: 直接使用命令行参数提供首要IP地址,跳过交互式向导。-x|--proxy
: 使用当前环境变量配置proxy_env
变量(影响http_proxy
/HTTP_PROXY
,HTTPS_PROXY
,ALL_PROXY
,NO_PROXY
)。
如果您的机器网卡绑定了多个 IP 地址,那么需要使用 -i|--ip <ipaddr>
显式指定一个当前节点的首要 IP 地址,或在交互式问询中提供。
选用的地址应为静态 IP 地址,请勿使用公网 IP 地址。
配置过程生成的配置文件默认位于:~/pigsty/pigsty.yml
,您可以在安装前进行检查与修改定制。
修改默认密码!
我们强烈建议您在安装前,事先修改配置文件中使用的默认密码与凭据,详情参考 安全考量。安装
使用 install.yml
剧本,默认在当前节点上完成标准的单节点 Pigsty 安装。
./install.yml # 一次性在所有节点上完成安装
安装过程的样例输出
[vagrant@meta pigsty]$ ./install.yml
PLAY [IDENTITY] ********************************************************************************************************************************
TASK [node_id : get node fact] *****************************************************************************************************************
changed: [10.10.10.10]
...
...
PLAY RECAP **************************************************************************************************************************************************************************
10.10.10.10 : ok=288 changed=215 unreachable=0 failed=0 skipped=64 rescued=0 ignored=0
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=4 rescued=0 ignored=0
这是一个 Ansible 剧本,您可以使用以下参数控制其执行的目标、任务、并传递额外的命令参数:
-l
: 限制执行的目标对象-t
: 限制要执行的任务-e
: 传入额外的命令行参数-i
: 指定使用不同于pigsty.yml
的配置文件- …
避免重复执行安装剧本!
警告: 在已经初始化的环境中再次运行 install.yml
会重置整个环境,所以请务必小心!
此剧本仅用于初始安装,安装完毕后可以用 rm install.yml
或 chmod a-x install.yml
来避免此剧本的误执行。
用户界面
当安装完成后,当前节点会安装有四个 核心模块:PGSQL
,INFRA
,NODE
,ETCD
。
本机上的 PGSQL 模块提供了一个开箱即用的单机 PostgreSQL 数据库实例,默认可以使用以下连接串 访问:
psql postgres://dbuser_dba:[email protected]/meta # DBA / 超级用户(IP直连)
psql postgres://dbuser_meta:[email protected]/meta # 业务管理员用户,读/写/DDL变更
psql postgres://dbuser_view:DBUser.View@pg-meta/meta # 只读用户(走域名访问)
本机上的 INFRA 模块为您提供了监控基础设施,默认使用的域名与端口如下所示:
组件 | 端口 | 域名 | 说明 | Demo地址 |
---|---|---|---|---|
Nginx | 80/443 | h.pigsty |
Web 服务总入口,本地YUM源 | home.pigsty.cc |
AlertManager | 9093 | a.pigsty |
告警聚合/屏蔽页面 | a.pigsty.cc |
Grafana | 3000 | g.pigsty |
Grafana 监控面板 | demo.pigsty.cc |
Prometheus | 9090 | p.pigsty |
Prometheus 管理界面 | p.pigsty.cc |
Grafana 监控系统(g.pigsty / 3000端口)的默认用户名与密码为:
admin
/pigsty
您可以通过 IP地址 + 端口的方式直接访问这些服务。但我们更推荐您使用域名通过 Nginx 80/443 端口代理访问所有组件。
使用域名访问 Pigsty WebUI 时,您需要配置 DNS 解析,或者修改本地的 /etc/hosts
静态解析文件。
如何通过域名访问 Pigsty WebUI ?
客户端可以通过几种不同的办法来使用域名访问:
- 通过 DNS 服务商解析互联网域名,适用于公网可访问的系统。
- 通过配置内网 DNS 服务器解析记录实现内网域名解析。
- 修改本机的
/etc/hosts
文件添加静态解析记录。(Windows下为:)
我们建议普通用户使用第三种方式,在使用浏览器访问 Web 系统的机器上,修改 /etc/hosts
(需要 sudo 权限)或 C:\Windows\System32\drivers\etc\hosts
(Windows)文件,添加以下的解析记录:
<your_public_ip_address> h.pigsty a.pigsty p.pigsty g.pigsty
这里的 IP 地址是安装 Pigsty 服务的 对外IP地址。
如何配置服务端使用的域名?
服务器端域名使用 Nginx 进行配置,如果您想要替换默认的域名,在参数 infra_portal
中填入使用的域名即可。
当您使用 http://g.pigsty
访问 Grafana 监控主页时,实际上是通过 Nginx 代理访问了 Grafana 的 WebUI:
http://g.pigsty ️-> http://10.10.10.10:80 (nginx) -> http://10.10.10.10:3000 (grafana)
如何使用 HTTPS 访问 Pigsty WebUI ?
Pigsty默认使用自动生成的自签名的 CA 证书为 Nginx 启用 SSL,如果您希望使用 HTTPS 访问这些页面,而不弹窗提示"不安全",通常有三个选择:
- 在您的浏览器或操作系统中信任 Pigsty 自签名的 CA 证书:
files/pki/ca/ca.crt
- 如果您使用 Chrome,可以在提示不安全的窗口键入
thisisunsafe
跳过提示 - 您可以考虑使用 Let’s Encrypt 或其他免费的 CA 证书服务,为 Pigsty Nginx 生成正式的 SSL证书。
更多
你可以使用 Pigsty 部署更多的集群,管理更多的节点,例如:
bin/node-add pg-test # 将集群 pg-test 的3个节点纳入 Pigsty 管理
bin/pgsql-add pg-test # 初始化一个3节点的 pg-test 高可用PG集群
bin/redis-add redis-ms # 初始化 Redis 集群: redis-ms
大多数模块都依赖 NODE
模块,请确保节点被 Pigsty 纳管后再加装其他模块。更多细节请参考 模块 详情:
PGSQL
,INFRA
,NODE
,ETCD
,MINIO
,REDIS
,MONGO
,DOCKER
,……
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.