准备资源
如何完成Pigsty资源准备工作
在部署Pigsty前,您需要进行资源准备,包括以下几件事:
资源规划
在部署Pigsty前,您有一些重要的技术决定需要提前定好。
元节点的数量
在每套环境中,Pigsty最少需要一个元节点(或曰:中控机),作为该节点将作为整个环境的控制中心。完成各种工作:保存状态,管理配置,发起管理,收集指标,等等。
整个环境的基础设施组件,Nginx(本地yum源),Grafana,Prometheus,Alertmanager,NTP,DNS Nameserver,DCS都将部署在元节点上。
元节点将用于部署元数据库 Consul 或 Etcd,因此通常建议在生产环境使用3个元节点。能够保证较为合理的可用性。当然您可以使用已有的外部DCS集群。
除DCS外,所有基础设施都将以对等副本的方式部署在所有元节点上。元节点的数量要求最少1个,推荐3个,建议不超过5个。
元节点的要求
元节点将通过Ansible管理控制环境中的其他机器,因此需要您具有登陆其他机器并执行sudo
命令的权限。
SSH访问将复用机器上的配置,您需要确保:
- 可以通过ssh免密访问环境内的所有机器(包括元节点资深)
- ssh免密访问的用户可以免密执行sudo权限。
- 中控机安装有
ansible
访问中控机
如果您希望使用图形界面,则需确保能从本地环境直接或间接访问中控机的80端口。
中控机运行有Nginx,监听80端口对外提供服务。Prometheus, Grafana, Altermanager, Consul UI会被Nginx代理至对应服务。
互联网访问
Pigsty是一个复杂的软件系统,为了确保系统的稳定,Pigsty会在初始化过程中从互联网下载所有依赖的软件包并建立本地Yum源。
所有依赖的软件总大小约1GB左右,下载速度取决于您的网络情况。尽管Pigsty已经尽量使用镜像源以加速下载,但少量包的下载仍可能受到防火墙的阻挠,可能出现非常慢的情况。您可以通过proxy_env配置项设置下载代理以完成首次下载,如果您遇到了长时间下载不成功的情况,强烈建议您使用“HTTP代理”进行下载,或使根据您的实际网络环境使用自定义的Yum镜像。
这里特别需要注意的是中国大陆的互联网条件“较差”,PostgreSQL官方源的访问速度非常慢,建议使用离线安装的方式。
离线安装
中控机本身并不要求互联网访问,尽管如果有肯定会非常方便,但出于安全考虑,我们建议在生产环境中使用离线安装的方式进行部署。
或直接下载预先打包好的离线安装包。例如最新的离线安装包地址为: https://github.com/Vonng/pigsty/releases/download/v0.5.0/pkg.tgz
将该软件包拷贝至项目根目录的files/pkg.tgz,然后执行make upload,即可将离线软件包上传至元节点的目标位置。
详情请参考离线安装一节。
接下来
完成资源准备后,您可以开始着手修改Pigsty的配置文件
1 - Vagrant供给
如何基于Vagrant与Virtualbox快速在本地拉起测试虚拟机
有时候为了测试“数据库集群”这样的东西,您需要若干台虚拟机。
尽管现在的云服务已经非常方便也非常便宜,但再方便也肯定也没有本地的虚拟机用起来方便。
vagrant就是用来解决这个问题的。您不需要了解它的原理,只需要知道它能简单快捷地按照您的要求在您的笔记本、PC或Mac上拉起若干台虚拟机即可。
您所需要完成的工作,就是喂给Vagrant一个配置文件清单。
样例
下面这个文件位于https://github.com/Vonng/pigsty/blob/master/vagrant/Vagrantfile,是Pigsty沙箱所使用的Vagrantfile,这里定义了四台虚拟机,包括一台2核/4GB的中控机元节点,和3台1核/1GB的数据库节点。
您只需要进入项目下的vagrant
目录,执行vagrant up
,即可拉起所有的四台虚拟机。
如果您的笔记本配置不足,可以考虑减少数据库节点的数量(N=3
),减为0即使用单个元节点的最低配置。此外您还可以修改每台机器的CPU核数和内存资源等。
注意这里使用了IMAGE_NAME = "centos/7"
,第一次执行时,默认会从官方下载好已经安装好的最小的centos 7.8
虚拟机镜像。确保您拥有合适的代理网络访问权限!
IMAGE_NAME = "centos/7"
N=3 # 数据库机器节点数量,可修改为0
Vagrant.configure("2") do |config|
config.vm.box = IMAGE_NAME
config.vm.box_check_update = false
config.ssh.insert_key = false
# 元节点
config.vm.define "meta", primary: true do |meta| # 元节点默认的ssh别名为`meta`
meta.vm.hostname = "meta"
meta.vm.network "private_network", ip: "10.10.10.10"
meta.vm.provider "virtualbox" do |v|
v.linked_clone = true
v.customize [
"modifyvm", :id,
"--memory", 4096, "--cpus", "2", # 元节点的内存与CPU核数:默认为2核/4GB
"--nictype1", "virtio", "--nictype2", "virtio",
"--hwv·irtex", "on", "--ioapic", "on", "--rtcuseutc", "on", "--vtxvpid", "on", "--largepages", "on"
]
end
meta.vm.provision "shell", path: "provision.sh"
end
# 初始化N个数据库节点
(1..N).each do |i|
config.vm.define "node-#{i}" do |node| # 数据库节点默认的ssh别名分别为`node-{1,2,3}`
node.vm.box = IMAGE_NAME
node.vm.network "private_network", ip: "10.10.10.#{i + 10}"
node.vm.hostname = "node-#{i}"
node.vm.provider "virtualbox" do |v|
v.linked_clone = true
v.customize [
"modifyvm", :id,
"--memory", 2048, "--cpus", "1", # 数据库节点的内存与CPU核数:默认为1核/2GB
"--nictype1", "virtio", "--nictype2", "virtio",
"--hwvirtex", "on", "--ioapic", "on", "--rtcuseutc", "on", "--vtxvpid", "on", "--largepages", "on"
]
end
node.vm.provision "shell", path: "provision.sh"
end
end
end
快捷方式
Pigsty已经提供了对Vagrant命令的包装,您可以在项目的Makefile中看到虚拟机管理的相关命令
make # 启动集群
make new # 销毁并创建新集群
make dns # 将Pigsty域名记录写入本机/etc/hosts (需要sudo权限)
make ssh # 将虚拟机SSH配置信息写入 ~/.ssh/config
make clean # 销毁现有本地集群
make cache # 制作离线安装包,并拷贝至宿主机本地,加速后续集群创建
make upload # 将离线安装缓存包 pkg.tgz 上传并解压至默认目录 /www/pigsty
###############################################################
# vm management
###############################################################
clean:
cd vagrant && vagrant destroy -f --parallel; exit 0
up:
cd vagrant && vagrant up
halt:
cd vagrant && vagrant halt
down: halt
status:
cd vagrant && vagrant status
suspend:
cd vagrant && vagrant suspend
resume:
cd vagrant && vagrant resume
provision:
cd vagrant && vagrant provision
# sync ntp time
sync:
echo meta node-1 node-2 node-3 | xargs -n1 -P4 -I{} ssh {} 'sudo ntpdate pool.ntp.org'; true
# echo meta node-1 node-2 node-3 | xargs -n1 -P4 -I{} ssh {} 'sudo chronyc -a makestep'; true
# show vagrant cluster status
st: status
start: up ssh sync
stop: halt
# only init partial of cluster
meta-up:
cd vagrant && vagrant up meta
node-up:
cd vagrant && vagrant up node-1 node-2 node-3
node-new:
cd vagrant && vagrant destroy -f node-1 node-2 node-3
cd vagrant && vagrant up node-1 node-2 node-3
2 - 离线安装
如何离线安装Pigsty
离线安装包(可选)
Pigsty是一个复杂的软件系统,为了确保系统的稳定,Pigsty会在初始化过程中从互联网下载所有依赖的软件包并建立本地Yum源。
所有依赖的软件总大小约1GB左右,下载速度取决于您的网络情况。尽管Pigsty已经尽量使用镜像源以加速下载,但少量包的下载仍可能受到防火墙的阻挠,可能出现非常慢的情况。您可以通过proxy_env
配置项设置下载代理以完成首次下载,或直接下载预先打包好的离线安装包。
下载地址
预先打包(仅限CentOS 7.8)的离线安装包可以在Github Release页面找到
例如v0.5的离线安装包地址为:
https://github.com/Vonng/pigsty/releases/download/v0.5.0/pkg.tgz
放置位置
将该软件包拷贝至项目根目录的files/pkg.tgz
,然后执行make upload
,即可将离线软件包上传至元节点的目标位置。
make upload
为了快速拉起Pigsty,建议使用离线下载软件包并上传的方式完成安装。
默认的离线软件包基于CentOS 7.8,用于生产环境时,我们强烈建议您依据生产环境的实际情况完成一次完整的网络下载,并通过make cache
缓存离线安装包。
离线安装包是本地yum源的副本
建立本地Yum源时,如果{{ repo_home }}/{{ repo_name }}
目录已经存在,而且里面有repo_complete
的标记文件,Pigsty会认为本地Yum源已经初始化完毕,因此跳过软件下载阶段,显著加快速度。离线安装包即是把{{ repo_home }}/{{ repo_name }}
目录整个打成压缩包。
如果您改了离线源的名称repo_name
,您还需要注意,配置文件中{{ repo_name }}
是否与离线安装包解压所得的文件夹名一致。