标准部署流程

在全新环境中部署Pigsty的标准步骤

无论是沙箱环境还是实际生产环境,Pigsty都采用同样的三步走部署流程:准备机器,修改配置,执行剧本。

  1. 准备机器

    • 所有机器都可以通过SSH免密登陆
    • 所有机器登陆的用户都可以免密码进行sudo
    • 选择1(或更多)台机器作为中央控制管理机(元节点)
    • 在元节点上安装ansible
    • 在元节点上克隆本项目
    • 下载离线软件安装包至files目录(可选)
  2. 修改配置

    • 根据环境情况,调整基础设施相关配置
    • 按照业务需求,声明所需的数据库集群规格
    • 可选特殊需求,定制数据库集群模板
    • 检查配置文件
  3. 执行剧本

    • 检查配置清单,选择执行对象,执行范围。
    • 执行infra.yml初始化基础设施,通常基础设施只需要初始化一次即可。
    • 执行initdb.yml初始化数据库集群,并通过监控系统验收数据库集群

准备机器

  • 上手Vagrant:使用Vagrant在本地迅速拉起虚拟机。
  • 配置SSH免密码登陆的方法
  • 配置免密sudo权限的方法

修改配置

  • 了解配置文件的格式
  • 了解Ansible变量的合并方式
  • 配置本地Yum源
  • 配置基础设施服务
  • 配置DCS
  • 配置Postgres
  • 配置监控系统
  • 配置流量代理与负载均衡器

执行剧本

  • 操作时序
  • 使用参数控制执行对象
  • 使用标签控制执行内容
  • 抹除现有集群
  • 向集群添加新实例
  • 从集群中移除实例

定制模板(可选)

  • 定制初始化脚本
  • 定制操作系统优化方案
  • 定制数据库模板
  • 定制访问控制系统
  • 定制Patroni模板
  • 定制自定义基线脚本

常用操作

您可以通过ansible的tag与limit机制控制初始化执行的目标与内容,详情请参考ansible文档。

infra.yml                         # 在所有清单实例上执行基础设施初始化(危险)
infra.yml -l meta									# 在元节点上初始化基础设施
infra.yml -l pg-test              # 在特定集群 pg-test 上初始化基础设施

infra.yml -l meta	--tags=repo			# 在元节点上初始化本地yum源
infra.yml -l meta	--tags=meta			# 在元节点上初始化监控系统
infra.yml -l pg-test --tags=node	# 在特定集群 pg-test 上完成机器节点的初始化
infra.yml -l pg-test --tags=dcs	  # 在特定集群 pg-test 上完成DCS/Consul的初始化
infra.yml -l pg-test --tags=dcs	-e dcs_exists_action = clean  # 强制重置pg-test的DCS服务
infra.yml -l meta --tags=dcs	  -e dcs_exists_action = clean  # 强制重置元节点的DCS服务(危险)

initdb.yml                        # 在所有清单实例上执行基础设施初始化(危险)
infra.yml -l meta									# 在元节点上初始化基础设施
infra.yml -l pg-test              # 在特定集群 pg-test 上初始化基础设施

infra.yml -l meta	--tags=repo			# 在元节点上初始化本地yum源
infra.yml -l meta	--tags=meta			# 在元节点上初始化监控系统
infra.yml -l pg-test --tags=node	# 在特定集群 pg-test 上完成机器节点的初始化
infra.yml -l pg-test --tags=dcs	  # 在特定集群 pg-test 上完成DCS/Consul的初始化
infra.yml -l pg-test --tags=dcs	-e dcs_exists_action = clean  # 强制重置pg-test的DCS服务
infra.yml -l meta --tags=dcs	  -e dcs_exists_action = clean  # 强制重置元节点的DCS服务(危险)
  1. 初始化基础设施

    执行此剧本,将基础设施定义参数实例化,详情请参阅 基础设施供给

    ./infra.yml         # 执行此剧本,将基础设施定义参数实例化
    
  2. 初始化数据库集群

    执行此剧本,将拉起所有的数据库集群,数据库集群供给详情请参阅 数据库集群供给

    ./initdb.yml        # 执行此剧本,将所有数据库集群定义实例化
    

Pigsty使用Ansible作为部署工具,通过ansible-playbook运行精心编写的剧本,以幂等的方式确保系统的状态与清单变量中保持一致。

一、准备机器

太长;不看

如果您的本地计算机上已经安装有vagrantvirtualboxansible,那么只需要克隆并进入本项目后,依次执行以下命令即可:

make up          # 拉起vagrant虚拟机
make ssh         # 配置虚拟机ssh访问
make init        # 初始化Pigsty
sudo make dns    # 写入Pigsty静态DNS域名(需要sudo,可选)
make mon-view    # 打开Pigsty首页(默认用户密码:admin:admin)

正常情况下执行结果详见 参考-标准流程

如果您希望了解详情,知晓每条命令背后完成的工作,请往下阅读。

配置要求

标准的Pigsty演示沙箱包含4个虚拟机节点,其中一个元节点,与三个数据库节点。通过Vagrant进行供给。 元节点用于管理整个系统,部署有基础设施组件:包括DNS,NTP,DCS,监控系统组件等,因此通常要求更高的配置。

元节点默认为2核/4GB,数据库节点默认为1核/2GB。因此默认配置下宿主机至少应当有5核/10GB的配置。 如果您的机器配置不足,可以考虑减少节点数量,或降低节点的资源要求。最低配置仅包含单个元节点,资源要求为1核1GB。

默认的四节点虚拟机使用Vagrant语法定义:Vagrantfile。 您可以编辑项目目录下vagrant/Vagrantfile文件以修改虚拟机配置,详细信息请参考:Vagrant供给

最低配置

只使用单个元节点的配置,包括一个单主数据库集群pg-meta与完整的监控系统。元节点最低配置为1核/1GB。

标准配置

使用四个节点组成的完整演示环境,其中包含一个元节点与三个普通数据库节点。元节点配置为2核/4GB,数据库节点为配置1核/2GB x3。环境中包含了一个单主数据库pg-meta(位于元节点上),以及一个额外的名为pg-test的一主两从测试集群,可充分展示集群监控、管理、流量切换等功能。

安装软件

在本机运行Pigsty沙箱之前,您需要在宿主机安装vagrantvirtualbox。如果希望在宿主机发起管理与控制,您还需要安装ansible

软件的安装因平台而异,这里以MacOS为例,您可以直接从官方网站下载vagrant和virtualbox的安装器,并按向导提示完成安装。

ansible可以通过包管理器安装:

brew install ansible # macos
yum  install ansible # linux

检查安装的软件版本:

$ echo $(vagrant --version)
Vagrant 2.2.13

$ echo $(vbox-img --version)
6.1.16r140961

$ echo $(ansible --version)
ansible 2.10.3

拉起环境

首先,克隆并进入项目目录,后续操作均位于项目根目录中(以/tmp/pigsty为例)

cd /tmp && git clone https://github.com/Vonng/pigsty && cd pigsty

拉起虚拟机

执行make up将调用vagrant up命令,根据Vagrantfile中的定义,使用Virtualbox创建四台虚拟机。

$ make up
cd vagrant && vagrant up
Bringing machine 'meta' up with 'virtualbox' provider...
Bringing machine 'node-1' up with 'virtualbox' provider...
Bringing machine 'node-2' up with 'virtualbox' provider...
Bringing machine 'node-3' up with 'virtualbox' provider...
==> meta: Cloning VM...
==> meta: Matching MAC address for NAT networking...
==> meta: Setting the name of the VM: vagrant_meta_1609817410777_92884
==> meta: Clearing any previously set network interfaces...
==> meta: Preparing network interfaces based on configuration...
    meta: Adapter 1: nat
    meta: Adapter 2: hostonly
==> meta: Forwarding ports...
    meta: 22 (guest) => 2222 (host) (adapter 1)
==> meta: Running 'pre-boot' VM customizations...
==> meta: Booting VM...
==> meta: Waiting for machine to boot. This may take a few minutes...
    meta: SSH address: 127.0.0.1:2222
......
==> node-3: Running provisioner: shell...
    node-3: Running: /var/folders/_5/_0mbf4292pl9y4xgy0kn2r1h0000gn/T/vagrant-shell20210105-17045-1rj8hxd.sh
    node-3: [INFO] write ssh config to /home/vagrant/.ssh

配置SSH

新拉起的虚拟机默认用户为vagrant,需要配置本机到虚拟机的免密ssh访问。 执行make ssh命令将调用vagrant的ssh-config命令,系统会将pigsty虚拟机节点的ssh配置文件写入~/.ssh/pigsty_config

该命令仅需在首次拉起Pigsty时执行。

$ make ssh
cd vagrant && vagrant ssh-config > ~/.ssh/pigsty_config 2>/dev/null; true
if ! grep --quiet "pigsty_config" ~/.ssh/config ; then (echo 'Include ~/.ssh/pigsty_config' && cat ~/.ssh/config) >  ~/.ssh/config.tmp; mv ~/.ssh/config.tmp ~/.ssh/config && chmod 0600 ~/.ssh/config; fi
if ! grep --quiet "StrictHostKeyChecking=no" ~/.ssh/config ; then (echo 'StrictHostKeyChecking=no' && cat ~/.ssh/config) >  ~/.ssh/config.tmp; mv ~/.ssh/config.tmp ~/.ssh/config && chmod 0600 ~/.ssh/config; fi

配置DNS

Pigsty包含若干Web页面子系统,需要通过域名区分访问。您可以通过修改/etc/hosts中的静态解析记录做到这一点。make dns会将Pigsty涉及的静态DNS记录写入宿主机的/etc/hosts文件,以便您通过浏览器访问监控系统。

注意修改DNS需要sudo权限,您可能需要输入密码,该命令仅需在首次拉起Pigsty时执行。

$ sudo make dns
Password:
if ! grep --quiet "pigsty dns records" /etc/hosts ; then cat files/dns >> /etc/hosts; fi

离线安装包(可选)

Pigsty是一个复杂的软件系统,为了确保系统的稳定,Pigsty会在初始化过程中从互联网下载所有依赖的软件包并建立本地Yum源。

所有依赖的软件总大小约1GB左右,下载速度取决于您的网络情况。尽管Pigsty已经尽量使用镜像源以加速下载,但少量包的下载仍可能受到防火墙的阻挠,可能出现非常慢的情况。您可以通过proxy_env配置项设置下载代理以完成首次下载,或直接下载预先打包好的离线安装包。例如最新的离线安装包地址为: `` https://github.com/Vonng/pigsty/releases/download/v0.4.0/pkg.tgz

将该软件包拷贝至项目根目录的files/pkg.tgz,然后执行make upload,即可将离线软件包上传至元节点的目标位置。

make upload

为了快速拉起Pigsty,建议使用离线下载软件包并上传的方式完成安装。 默认的离线软件包基于CentOS 7.8,用于生产环境时,我们强烈建议您依据生产环境的实际情况完成一次完整的网络下载,并通过make cache缓存离线安装包。

执行初始化

完成上述操作后,执行make init即会调用ansible完成Pigsty系统的初始化。

$ make init
./infra.yml                 # provision infrastructures
./initdb.yml                # provision database clusteres

如果您已经将离线安装包上传至元节点,那么初始化环境会比较快,视机器配置可能总共需要5~10分钟不等。

如果离线安装包不存在,那么Pigsty会在初始化过程中从互联网下载约1GB数据,视网络条件可能需要20分钟或更久。

强烈建议您在第一次完成初始化后执行 make cache 命令,该命令会将下载好的软件打为离线缓存包,并放置于files/pkg.tgz中。这样当下一次创建新的pigsty环境时,只要宿主机内操作系统一致,就可以直接复用该离线包,省去大量下载时间。

探索监控系统

初始化完毕后,您可以通过浏览器访问 http://pigsty 前往监控系统主页。默认的用户名与密码均为admin

如果您没有配置DNS,或者没有使用默认的IP地址,也可以直接访问 http://meta_ip_address:3000前往监控系统首页。

接下来做什么?

  • 系统界面:查阅监控系统提供的功能与界面
  • 公开示例:访问公开的Pigsty演示环境
  • 查阅概念:关于Pigsty的基本概念与重要信息
  • 教程:在真实的环境中完成Pigsty部署

为了在本地运行Pigsty,您需要准备1-4台可以远程ssh免密sudo访问的Linux虚拟机(建议使用CentOS 7.8)。

宿主机操作系统不限,您可以通过任何方式创建所需的虚拟机:如Virtualbox, VMWare, Hyper-V, Parallel Desktop,本教程默认使用vagrant+virtualbox。

系统资源

如果您希望在本机运行完整的Pigsty示例沙箱,最少需要2核/2GB的配置,建议使用4核/8GB或更高的配置。

最低配置

只使用单个元节点的配置,包括一个单主数据库集群pg-meta与完整的监控系统。元节点最低配置为2核/2GB。

标准配置

使用四个节点组成的完整演示环境,其中包含一个元节点与三个普通数据库节点。数据库节点最低配置1核/1GB,建议使用1核/2GB或更高。标准配置额外包含了一个名为pg-test的一主两从测试集群,可充分展示集群监控、管理、流量切换等功能。

生产配置

生产环境部署配置不限,建议使用由3或5个元节点。数据库节点数量不限,但数量最好控制在万级以内。典型节点配置:Dell R740 64核/400GB内存/4TB PCI-E SSD

中控机

您需要选择一个节点作为“中控机”,用于发起所有的命令与操作。中控机可以是您的宿主机(在测试沙箱环境中),也可以是虚拟机之一。通常会选择元节点之一作为中控机,中控机的核心要求是,可以通过免密通过SSH访问其他节点,且管理用户具有sudo权限。

在中控机上,您需要依次完成以下几件工作:安装Ansible,配置免密SSH sudo访问,克隆本项目,下载离线安装包(可选)。

安装Ansible

Pigsty依赖Ansible执行命令,您需要在中控机上安装Ansible。如果您的中控机没有互联网访问,可以参考离线安装一节中配置本地文件yum源的方法,从离线安装包中安装ansible。

yum install ansible

免密SSH SUDO

接下来,您需要配置从中控机到其他节点的ssh远程登陆与sudo免密访问。通常虚拟机软件会处理好这些问题。 手工配置ssh免密登陆可以使用:

ssh-copy-id <address & alias>

手工配置免密码sudo可以使用:

echo "${username} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/${username}

准备Pigsty

使用git将本项目克隆至中控机的自定目录中:

git clone https://github.com/Vonng/pigsty

下载离线安装包(可选)

如果您使用CentOS 7.8,则可以直接下载预先制作好的离线安装包pkg.tgzfiles目录中。否则系统将在首次运行时从官方源下载所有依赖的软件(约1GB)并重新制作离线安装包。

快速开始

本节介绍如何快速拉起Pigsty沙箱环境,更多信息请参阅快速上手

  1. 准备机器

    • 使用预分配好的机器,或基于预定义的沙箱Vagrantfile在本地生成演示虚拟机,选定一台作为中控机。

    • 配置中控机到其他机器的SSH免密码访问,并确认所使用的的SSH用户在机器上具有免密码sudo的权限。

    • 如果您在本机安装有vagrant和virtualbox,则可直接在项目根目录下执行以make up拉个四节点虚拟机环境,详见Vagrant供给

     $ make up
     cd vagrant && vagrant up
     Bringing machine 'meta' up with 'virtualbox' provider...
     Bringing machine 'node-1' up with 'virtualbox' provider...
     Bringing machine 'node-2' up with 'virtualbox' provider...
     Bringing machine 'node-3' up with 'virtualbox' provider...
     ==> meta: Cloning VM...
     ==> meta: Matching MAC address for NAT networking...
     ==> meta: Setting the name of the VM: vagrant_meta_1609817410777_92884
     ==> meta: Clearing any previously set network interfaces...
     ==> meta: Preparing network interfaces based on configuration...
         meta: Adapter 1: nat
         meta: Adapter 2: hostonly
     ==> meta: Forwarding ports...
         meta: 22 (guest) => 2222 (host) (adapter 1)
     ==> meta: Running 'pre-boot' VM customizations...
     ==> meta: Booting VM...
     ==> meta: Waiting for machine to boot. This may take a few minutes...
         meta: SSH address: 127.0.0.1:2222
    
  2. 准备项目

    在中控机上安装Ansible,并克隆本项目。如果采用本地虚拟机环境,亦可在宿主机上安装ansible执行命令。

    git clone https://github.com/vonng/pigsty && cd pigsty 
    

    如果目标环境没有互联网访问,或者速度不佳,考虑下载预打包的离线安装包,或使用有互联网访问/代理的同系统的另一台机器制作离线安装包。离线安装细节请参考离线安装教程。

  3. 修改配置

    按需修改配置文件。配置文件使用YAML格式与Ansible清单语义,配置项与格式详情请参考配置教程

    vi conf/all.yml			# 默认配置文件路径
    
  4. 初始化基础设施

    执行此剧本,将基础设施定义参数实例化,详情请参阅 基础设施供给

    ./infra.yml         # 执行此剧本,将基础设施定义参数实例化
    
  5. 初始化数据库集群

    执行此剧本,将拉起所有的数据库集群,数据库集群供给详情请参阅 数据库集群供给

    ./initdb.yml        # 执行此剧本,将所有数据库集群定义实例化
    
  6. 开始探索

    可以通过参数nginx_upstream中自定义的域名(沙箱环境中默认为http://pigsty)访问Pigsty主页。

    监控系统的默认域名为http://g.pigsty,默认用户名与密码均为admin

    监控系统可以直接通过meta节点上的3000端口访问,如需从本地通过域名访问,可以执行sudo make dns将所需的DNS记录写入宿主机中。

最后修改 2021-01-06: routine update (4372477)