当前位置: 首页 > news >正文

Patroin源码修改八:初始化Opengauss

初始化的核心代码在def _initdb中,按照类似下面的步骤初始化Openguass:
echo "Postgres123"> /tmp/tmplk1xtqm1
gs_ctl init -D _pg_root -o "--encoding=UTF8 --nodename=og --no-locale --username=postgres --pwfile=/tmp/tmplk1xtqm1"

Patroni会调用gs_ctl init初始化,相对于PG所需的修改只要将pg_ctl initdb改为gs_ctl init。

初始化完后,还有个post bootstrap,核心代码在:

patroni/postgresql/bootstrap.py :def post_bootstrap()

post bootstrap做两件事:

1、创建用户

不同于PG,OG不创建rewind和replication用户,OG只需要一个超级用户,basebackup和rewind都用这个超级用户。这个超级用户的用户名和密码在patroni.yml的postgresql.authentication.superuser 中定义,

在初始化时已经创建了超级用户,因此对于OG,post bootstrap中创建用户的逻辑被注释掉了。

patroni/postgresql/bootstrap.py:def post_bootstrap()

创建superuser、replication user、rewind user的代码被注释掉了,只留下创建普通user的代码,这样可以通过配置patroni.yml创建普通用户。

2、生成配置文件:postgresql.conf、pg_hba.conf、pg_ident.conf

生成 pg_hba.conf 和 pg_ident.conf 的代码没有改变,修改了生成postgresql.conf的代码,首先,由于OG的rewind(gs_ctl build)不支持postgresql.conf的include,所以这里把postgresql.base.conf的内容直接写到postgresql.conf(postgresql.base.conf是之前的postgresql.conf),其次不使用Patroni中的校验patroni.yml中参数的逻辑,而是不管什么参数,都转写到postgresql.conf。

patroni/postgresql/config.py:def write_postgresql_conf()

3、除了上面三个文件,PG还会生成recovery.conf,但是OG配置主从,并不需要创建recovery.conf 和 standby.signal,也不需要在postgresql.conf里生成参数primary_conninfo。OG用postgresql.conf里的replconninfo1、replconninfo2替代primary_conninfo,只要postgresql.conf里有replconninfoXX配置,启动时即使不指定主备,也认为是集群节点,可以使用gs_ctl failover转为主。

因此注释掉了recovery.conf相关的代码:

patroni/postgresql/config.py:def write_recovery_conf()、def _write_recovery_params()

patroni/postgresql/__init__.py:def follow()

./patroni/postgresql/bootstrap.py:def _custom_bootstrap()

patroni/postgresql/bootstrap.py:def post_bootstrap()

 

相关文章:

  • 金仓数据库 KingbaseES 插件参考手册 zhparser
  • 多御安全浏览器超强版本发布:新增密码检查功能
  • java架构知识-设计模式与实践(学习笔记)
  • Evil.js(罪恶的) —— 代码
  • 全球与中国多壁碳纳米管行业市场调查及投资竞争力分析报告2022-2028年
  • java计算机毕业设计交通事故档案管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  • linux ifconfig命令:显示或设置网络设备参数信息
  • django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析 无名有名反向解析 路由分发 名称空间
  • cks 考试指南
  • 全球与中国防水薄膜行业市场前瞻及未来投资潜力预测报告2022-2028年
  • CTFHUB.introduction
  • 基于神经网络的图像识别,人工神经网络图像识别
  • 快鲸智慧楼宇系统:助力商办楼宇快速实现智慧化、数字化运营
  • 在线订票系统--永胜票务网是怎么搭建的?
  • 3D游戏角色动画
  • @jsonView过滤属性
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES6系列(二)变量的解构赋值
  • JavaScript服务器推送技术之 WebSocket
  • maven工程打包jar以及java jar命令的classpath使用
  • Python_OOP
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • storm drpc实例
  • webpack+react项目初体验——记录我的webpack环境配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 安装python包到指定虚拟环境
  • 第十八天-企业应用架构模式-基本模式
  • 浮现式设计
  • 给新手的新浪微博 SDK 集成教程【一】
  • 聚类分析——Kmeans
  • 前端路由实现-history
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​ArcGIS Pro 如何批量删除字段
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 数据结构
  • (1)Android开发优化---------UI优化
  • (11)MATLAB PCA+SVM 人脸识别
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (done) 两个矩阵 “相似” 是什么意思?
  • (function(){})()的分步解析
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第二周)效能测试
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (离散数学)逻辑连接词
  • (原)Matlab的svmtrain和svmclassify
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)socket Aio demo
  • (转)项目管理杂谈-我所期望的新人
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Core中Emit的使用
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net中调用windows performance记录性能信息
  • .skip() 和 .only() 的使用