....前言
本文选用Stolon的方式搭建Postgresql高可用方案,主要为Harbor提供高可用数据库,Harbor搭建可查看kubernetes搭建Harbor无坑及Harbor仓库同步,之后会提供redis高可用及Harbor高可用方案搭建
方案比较
几种postgresql高可用方案简单比较:
首先repmgr这种方案的算法有明显缺陷,非主流分布式算法,直接pass;
Stolon和Patroni相对于Crunchy更加Cloud Native, 后者是基于pgPool实现。
Crunchy和Patroni相对于Stolon有更多的使用者,并且提供了Operator对于以后的管理和扩容
根据上面简单的比较,最终选择的stolon,作者选择的是Patroni,感觉实际区别并不大。
一、Stolon概述:
keeper:他负责管理PostgreSQL的实例汇聚到由sentinel(s)提供的clusterview。
sentinel:it负责发现并且监控keeper,并且计算最理想的clusterview。
proxy:客户端的接入点。它强制连接到右边PostgreSQL的master并且强制关闭连接到由非选举产生的master。
Stolon 用etcd或者consul作为主要的集群状态存储。
二、Installation
git clone https://github.com/sorintlab/stolon.git
cd XXX/stolon/examples/kubernetes
如图所示
stolon
如有兴趣可查看官网搭建:https://github.com/sorintlab/stolon/blob/master/examples/kubernetes/README.md
如下为yaml中注意修改的地方
stolon-keeper.yaml 中设置Postgresql用户名
- name: STKEEPER_PG_SU_USERNAME
value: "postgres"
stolon-keeper.yaml 中设置stolon挂载卷
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "512Mi"
storageClassName: nfs
secret.yaml中设置用户密码
apiVersion: v1
kind: Secret
metadata:
name: stolon
type: Opaque
data:
password: cGFzc3dvcmQx
如下是作者整理的完整的stolon的编排文件,可直接修改使用
# This is an example and generic rbac role definition for stolon. It could be
# fine tuned and split per component.
# The required permission per component should be:
# keeper/proxy/sentinel: update their own pod annotations
# sentinel/stolonctl: get, create, update configmaps
# sentinel/stolonctl: list components pods
# sentinel/stolonctl: get components pods annotations
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: stolon
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
- configmaps
- events
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: stolon
na