准备工作
Module:
与 Pigsty 部署有关的 101 入门知识。
节点准备
Pigsty 支持 Linux
内核与 x86_64/amd64
架构,适用于任意节点。
所谓节点(node),指 ssh 可达并提供裸操作系统环境的资源,例如物理机,裸金属,虚拟机,或者启用了 systemd 与 sshd 的操作系统容器。
部署 Pigsty 最少需要一个节点。最低配置要求为 1C1G
,推荐至少使用 2C4G
以上的机型,适用配置上不封顶,参数会自动优化适配。
作为 Demo,个人站点,或者开发环境时,可以使用单个节点。作为独立监控基础设施使用时,建议使用 1-2 个节点,作为高可用 PostgreSQL 数据库集群使用时,建议至少使用 3 个节点。用于核心场景时,建议使用至少 4-5 个节点。
充分利用 IaC 工具完成琐事
手工配置大规模生产环境繁琐且容易出错,我们建议您充分利用 Infra as Code 工具,解决此类问题。
您可以使用 Pigsty 提供的 Terraform 模板与 Vagrant 模板,使用 IaC 的方式一键创建所需的节点环境,完成好网络,操作系统,管理用户,权限,安全组的置备工作。
网络准备
Pigsty 要求节点使用 静态IPv4地址,即您应当为节点显式分配指定固定的 IP 地址,而不应当使用 DHCP 动态分配的地址。
节点使用的 IP 地址应当是节点用于内网通信的首要 IP 地址,并将作为节点的唯一身份标识符。
如果您希望使用可选的 Node VIP 与 PG VIP 功能,应当确保所有节点位于一个大二层网络中。
您的防火墙策略应当保证所需的端口在节点间开放,不同模块所需的具体端口列表请参考 节点:端口。
应该暴露哪些端口?
暴露端口的方法取决于您的网络安全策略实现,例如:公有云上的安全组策略,或本地 iptables 记录,防火墙配置等。
如果您只是希望尝尝鲜,不在乎安全,并且希望一切越简单越好,那么您可以仅对外部用户按需开放 5432
端口( PostgreSQL 数据库) 与 3000
端口(Grafana 可视化界面)。
在 Infra节点 上的 Nginx 默认会对外暴露 80/443
端口提供 Web 服务,并通过域名对不同服务进行区分,这一端口应当对办公网络(或整个整个互联网)开放。
严肃的生产数据库服务端口通常不应当直接暴露在公网上,如果您确实需要这么做,建议首先查阅 安全最佳实践,并小心行事。
操作系统准备
Pigsty 支持多种基于 Linux 内核的服务器操作系统发行版,我们建议使用 RockyLinux 8.9 或 Ubuntu 22.04.3 作为安装 Pigsty 的 OS。
Pigsty 支持 RHEL (7,8,9),Debian (11,12),Ubuntu (20,22) 以及多种与之兼容的操作系统发行版,完整操作系统列表请参考 兼容性。
在使用多个节点镜进行部署时,我们 强烈 建议您在所有用于 Pigsty 部署的节点上,使用相同版本的操作系统发行版与 Linux 内核版本
我们强烈建议使用干净,全新安装的最小化安装的服务器操作系统环境,并使用 en_US
作为首要语言。
如何安装并启用 en_US locale?
使用其他系统语言包时,如何确保 en_US
本地化规则集可用:
yum install -y glibc-locale-source glibc-langpack-en
localedef -i en_US -f UTF-8 en_US.UTF-8
localectl set-locale LANG=en_US.UTF-8
注:Pigsty 部署的 PostgreSQL 集群默认使用 C.UTF8
locale,但字符集定义使用 en_US
以确保 pg_trgm
扩展可以正常工作。
如果您确实不需要此功能,可以配置 pg_lc_ctype
的值为 C.UTF8
,以避免在系统语言包缺失的情况下,数据库初始化报错的问题。
管理用户准备
在安装 Pigsty 的节点上,您需要拥有一个 “管理用户” —— 拥有免密 ssh
登陆权限与免密 sudo
权限。
免密 sudo
是必选项,用于在安装过程中执行需要 sudo
权限的命令,例如安装软件包,配置系统参数等。
如何配置管理用户的免密码 sudo 权限?
假设您的管理用户名为 vagrant
,则可以创建 /etc/sudoers.d/vagrant
文件,并添加以下记录:
%vagrant ALL=(ALL) NOPASSWD: ALL
则 vagrant 用户即可免密 sudo
执行所有命令。如果你的用户名不是 vagrant
,请将上面操作中的 vagrant
替换为您的用户名。
避免使用 root 用户安装
尽管使用 root
用户安装 Pigsty 是可行的,但我们不推荐这样做。
安全最佳实践 是使用一个不同于根用户(root
)与数据库超级用户 (postgres
) 的专用管理员用户(如:dba
)
Pigsty 提供了专用剧本任务,可以使用一个现有的管理用户(例如 root
),输入 ssh/sudo 密码,创建一个专用的 管理员用户。
SSH 权限准备
除了免密 sudo
权限, Pigsty 还需要管理用户免密 ssh
登陆的权限。
对于单机安装的节点而言,这意味着本机上的管理用户可以通过 ssh 免密码登陆到本机上。
如果的 Pigsty 部署涉及到多个节点,这意味着管理节点上的管理用户应当可以通过 ssh 免密码登陆到所有被 Pigsty 纳管的节点上(包括本机),并免密执行 sudo
命令。
单机安装时,在 configure
过程中,如果您的当前管理用户没有 SSH key,Pigsty 会尝试修复此问题:随机生成一对新的 id_rsa
密钥,并添加至本地 ~/.ssh/authroized_keys
文件确保本机管理用户的 SSH 登陆能力。
Pigsty 默认会为您在纳管的节点上创建一个可用的管理用户 dba
(uid=88
),如果您已经使用了此用户,我们建议您修改 node_admin_username
使用新的用户名与其他 uid,或通过 node_admin_enabled
参数禁用。
如何配置管理用户的 ssh 免密码登陆?
假设您的管理用户名为 vagrant
,则以 vagrant
用户身份执行以下命令,会为其生成公私钥对 ~/.ssh/id_rsa[.pub]
用于登陆。如果已经存在公私钥对,则无需生成新密钥对。
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa -q
生成的公钥默认位于:/home/vagrant/.ssh/id_rsa.pub
,私钥默认位于:/home/vagrant/.ssh/id_rsa
,如果您操作系统用户名不叫 vagrant
,将上面的 vagrant
替换为您的用户名即可。
您应当将公钥文件(id_rsa.pub
)追加写入到需要登陆机器的对应用户上:/home/vagrant/.ssh/authorized_keys
文件中。如果您已经可以直接通过密码访问远程机器,可以直接通过ssh-copy-id
的方式拷贝公钥:
ssh-copy-id <ip> # 输入密码以完成公钥拷贝
sshpass -p <password> ssh-copy-id <ip> # 直接将密码嵌入命令中,避免交互式密码输入(注意安全!)
Pigsty 推荐将管理用户的创建,权限配置与密钥分发放在虚拟机的置备阶段完成,作为标准化交付内容的一部分。
SSH 例外情况
如果您的 SSH 访问有一些额外限制,例如,使用了跳板机,或者进行了某些定制化修改,无法通过简单的 ssh <ip>
方式访问,那么可以考虑使用 ssh 别名。
例如,如果您的服务器可以通过 ~/.ssh/config
中定义的别名,例如 meta
通过 ssh
访问,那么可以为 配置清单 中的节点配置 ansible_host
参数,指定 SSH Alias:
nodes:
hosts: # 10.10.10.10 无法直接 ssh,但可以通过ssh别名 `meta` 访问
10.10.10.10: { ansible_host: meta }
如果 SSH 别名无法满足您的需求,Ansible 还提供了一系列自定义 ssh 连接参数,可以精细控制 SSH 连接的行为。
最后,如果以下命令可以在管理节点上使用管理用户成功执行,意味着该目标节点上的管理用户与权限配置已经妥当:
ssh <ip|alias> 'sudo ls'
软件准备
在 管理节点 上,Pigsty 需要使用 Ansible 发起控制命令。如果您使用本地单机安装,那么管理节点和被管理的节点是同一台,需要安装 Ansible。对于普通节点,则无需安装 Ansible。
在 bootstrap
过程中,Pigsty 会尽最大努力自动为您完成安装 Ansible 这一任务,但您也可以选择手工安装 Ansible。手工安装 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 源码包。您可以直接从 GitHub Release 页面下载特定版本,或使用以下命令获取最新稳定版本:
curl -fsSL https://repo.pigsty.cc/get | bash
如果您的环境没有互联网访问,也可以考虑直接从 GitHub Release 页面或其他渠道下载针对不同操作系统发行版预先制作的 离线安装包。
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.