原作者:彭冲
上一篇记录了使用官方脚本安装过程中遇到的一些问题及解决方法,链接如下:openGauss 安装编译过程要点及问题解决
本文介绍源码编译方式搭建主备的过程。
前期准备
操作系统
Centos7.6 x86_64
创建用户及组
# groupadd dbgrp -g 2000
# useradd omm -g 2000 -u 2000
# passwd omm
规划安装目录、数据目录及权限
# mkdir -p {/opt/og,/opt/ogdata}
# chown -R omm: {/opt/og,/opt/ogdata}
# chmod -R 755 /opt/og
# chmod -R 700 /opt/ogdata
注意:ogdata数据目录权限注意只能owner具有读写权限
安装依赖包
# yum install libaio-devel flex bison ncurses-devel glibc-devel readline-devel libxml2-devel
# yum install patch
# yum install redhat-lsb-core
# yum install unzip gcc gcc-c++ perl
# yum install openssl-devel
# yum install https://forensics.cert.org/centos/cert/7/x86_64/libiconv-1.15-1.el7.x86_64.rpm
# yum install libffi-devel libtool zlib-devel
下载文件
从码云下载两个文件包:
一个是opengauss-openGauss-server-master.zip本体文件
一个是编译时依赖的第三方库文件,地址如下:
https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.0.0/openGauss-third_party_binarylibs.tar.gz
下载文件放到/home/omm
# chown omm: openGauss-third_party_binarylibs.tar.gz
# chmod 755 openGauss-third_party_binarylibs.tar.gz
# chown omm: opengauss-openGauss-server-master.zip
# chmod 755 opengauss-openGauss-server-master.zip
编译前准备
# su - omm
$ unzip opengauss-openGauss-server-master.zip
$ tar -zxvf openGauss-third_party_binarylibs.tar.gz
$ mv openGauss-third_party_binarylibs binarylibs
export CODE_BASE=/home/omm/openGauss-server
export BINARYLIBS=/home/omm/binarylibs
export GAUSSHOME=/opt/og
export GCC_PATH=$BINARYLIBS/buildtools/centos7.6_x86_64/gcc8.2/
export CC=$GCC_PATH/gcc/bin/gcc
export CXX=$GCC_PATH/gcc/bin/g++
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH
注意:版本1.1开始需要改成下面的gcc7.3
export GCC_PATH=$BINARYLIBS/buildtools/centos7.6_x86_64/gcc7.3/
编译安装
$ cd openGauss-server/
先clean一下,第一次报错可以忽略,如果重新编译需要clean
$ make clean
编译release版本
$ ./configure --prefix=/opt/og \
--3rd=/home/omm/binarylibs \
--gcc-version=8.2.0 \
--without-readline \
--without-zlib \
--enable-thread-safety \
CC=g++ CFLAGS="-O2 -g3"
虚拟机推荐配置4G以上内存,这里虚拟机使用单线程编译,物理机可以增加-j参数
$ make
...
All of openGauss successfully made. Ready to install.
看到上面的提示则,make完成
安装
$ make install
...
openGauss installation complete.
看到上面的提示则,安装完成
查看版本
$ /opt/og/bin/gsql --version
gsql (openGauss 1.0.0 build ) compiled at 2020-07-12 20:44:07 commit 0 last mr
主库初始化
$ /opt/og/bin/gs_initdb --nodename=master_6432 \
--pgdata=/data/data_og \
--encoding=UTF-8 \
--locale=en_US.UTF-8 \
--dbcompatibility='A' \
--username=omm \
--pwpasswd=Enmotech@2020
主库配置
postgresql.conf文件增加如下配置
port=6432
listen_addresses = '0.0.0.0'
password_encryption_type = 0
remote_read_mode=non_authentication
replconninfo1 = 'localhost=MasterIPAddresses \
localport=6439 \
localservice=6432 \
remotehost=StandbyIPAddresses \
remoteport=6439 \
remoteservice=6432'
注意:上面的\是为了排版,localport与port间隔要大于1,remoteport同理。
启动主库
pg_hba.conf配置
host all all 0.0.0.0/0 md5
host replication repuser MasterIP/32 md5
host replication repuser StandbyIP/32 md5
/opt/og/bin/gs_ctl start \
-D /opt/ogdata \
-M primary \
-l og_server.log &
创建流复制用户
$ /opt/og/bin/gsql -Uomm postgres
postgres=# create user repuser SYSADMIN REPLICATION PASSWORD 'Enmotech@2020';
注意:需要具有SYSADMIN REPLICATION权限
备库搭建
bin文件可以直接从主库复制过来,目录及权限与主库保持一致即可
基础备份
$ /opt/og/bin/gs_basebackup --pgdata=/opt/ogdata \
--host=MasterIP \
--port=6432 \
--username=repuser \
--password
备库配置
1.对称修改postgresql.conf里的replconninfo1,将localhost与remotehost值对调。
2.设置nodename
$ /opt/og/bin/gs_guc set -D /data/data_og \
-c "pgxc_node_name='og18_6432'"
启动备库
$ /opt/og/bin/gs_ctl start \
-D /data/data_og \
-M standby \
-l og_server.log &
查询状态
分别在主备机器执行上述查询,可看到对应的角色及状体即为正常。
$ /opt/og/bin/gs_ctl query \
-D /data/data_og
如下主库节点查询状态
HA state:
local_role : Primary
static_connections : 1
db_state : Normal
detail_information : Normal
如下备库节点查询状态
HA state:
local_role : Standby
static_connections : 1
db_state : Normal
detail_information : Normal
主备测试
数据读写测试
主备正常切换
只能在备库执行
$ /opt/og/bin/gs_ctl switchover \
-D /data/data_og
双主恢复
如果查询两个库都是主,则需要恢复
1.确定降级的备库,执行服务关闭操作。
$ /opt/og/bin/gs_ctl stop \
-D /data/data_og
2.使用build命令重建
$ /opt/og/bin/gs_ctl build \
-D /data/data_og \
-b incremental
这里先选择增量模式重建,如果增量模式失败再尝试全备方式
$ /opt/og/bin/gs_ctl build \
-D /data/data_og \
-b full