标准部署流程
无论是沙箱环境还是实际生产环境,Pigsty都采用同样的三步走部署流程:准备机器,修改配置,执行剧本。
-
准备机器
- 所有机器都可以通过SSH免密登陆
- 所有机器登陆的用户都可以免密码进行
sudo
- 选择1(或更多)台机器作为中央控制管理机(元节点)
- 在元节点上安装
ansible
- 在元节点上克隆本项目
- 下载离线软件安装包至
files
目录(可选)
-
修改配置
- 根据环境情况,调整基础设施相关配置
- 按照业务需求,声明所需的数据库集群规格
- 可选特殊需求,定制数据库集群模板
- 检查配置文件
-
执行剧本
- 检查配置清单,选择执行对象,执行范围。
- 执行
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服务(危险)
-
初始化基础设施
执行此剧本,将基础设施定义参数实例化,详情请参阅 基础设施供给
./infra.yml # 执行此剧本,将基础设施定义参数实例化
-
初始化数据库集群
执行此剧本,将拉起所有的数据库集群,数据库集群供给详情请参阅 数据库集群供给
./initdb.yml # 执行此剧本,将所有数据库集群定义实例化
Pigsty使用Ansible作为部署工具,通过ansible-playbook
运行精心编写的剧本,以幂等的方式确保系统的状态与清单变量中保持一致。
一、准备机器
太长;不看
如果您的本地计算机上已经安装有vagrant , virtualbox与ansible,那么只需要克隆并进入本项目后,依次执行以下命令即可:
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沙箱之前,您需要在宿主机安装vagrant 与 virtualbox。如果希望在宿主机发起管理与控制,您还需要安装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,您需要准备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.tgz至files
目录中。否则系统将在首次运行时从官方源下载所有依赖的软件(约1GB)并重新制作离线安装包。
快速开始
本节介绍如何快速拉起Pigsty沙箱环境,更多信息请参阅快速上手
-
准备机器
-
使用预分配好的机器,或基于预定义的沙箱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
-
-
准备项目
在中控机上安装Ansible,并克隆本项目。如果采用本地虚拟机环境,亦可在宿主机上安装ansible执行命令。
git clone https://github.com/vonng/pigsty && cd pigsty
如果目标环境没有互联网访问,或者速度不佳,考虑下载预打包的离线安装包,或使用有互联网访问/代理的同系统的另一台机器制作离线安装包。离线安装细节请参考离线安装教程。
-
修改配置
按需修改配置文件。配置文件使用YAML格式与Ansible清单语义,配置项与格式详情请参考配置教程
vi conf/all.yml # 默认配置文件路径
-
初始化基础设施
执行此剧本,将基础设施定义参数实例化,详情请参阅 基础设施供给
./infra.yml # 执行此剧本,将基础设施定义参数实例化
-
初始化数据库集群
执行此剧本,将拉起所有的数据库集群,数据库集群供给详情请参阅 数据库集群供给
./initdb.yml # 执行此剧本,将所有数据库集群定义实例化
-
开始探索
可以通过参数
nginx_upstream
中自定义的域名(沙箱环境中默认为http://pigsty
)访问Pigsty主页。监控系统的默认域名为
http://g.pigsty
,默认用户名与密码均为admin
监控系统可以直接通过
meta
节点上的3000端口访问,如需从本地通过域名访问,可以执行sudo make dns
将所需的DNS记录写入宿主机中。