From 67a1a140b2d4640e9419abaf8c8fc38b2eea84c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=86=9B=E9=94=8B?= <287523394@qq.com> Date: Mon, 20 Jul 2020 10:51:23 +0800 Subject: [PATCH 1/4] add file: openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md add file: openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md --- .../post/jiajunfeng/img/DBlogo-20200722.png | Bin 0 -> 59185 bytes ... Deployment (CentOS7.6+openGauss 1.0.0).md | 682 ++++++++++ ... Deployment (CentOS7.6+openGauss 1.0.0).md | 1137 +++++++++++++++++ 3 files changed, 1819 insertions(+) create mode 100644 content/zh/post/jiajunfeng/img/DBlogo-20200722.png create mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md create mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md diff --git a/content/zh/post/jiajunfeng/img/DBlogo-20200722.png b/content/zh/post/jiajunfeng/img/DBlogo-20200722.png new file mode 100644 index 0000000000000000000000000000000000000000..79a24699d70a607168693ccf68f251a05c39c59b GIT binary patch literal 59185 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 z zXV@LK?MbQKKFw9Nu4j?xbUso+#Idsp)CBlyo!NxxW(Kv^;g!=(*i~WVa^ypnh}uE-1;CWpoo`i;MO7e?OjL z;eEMc3HKqZ``?4CC(}ow1?!$w^1pv;1uY-IQ2+N(kYeD`{QbI9=hnIiDJ$Aut4*Lz z1uiRYQ9B%zf44i$kTod=0!I*FrizeGUa2?`RY^3I{{ZGDCu_8b(h^^5Msep>-j}p}HVg~G+(oFJ>@ir^QHz(TqHXsu zn1R{3xf?ATC84{`F?#vmWtGt2N6VNTgwon9n0n}YLMpUspxB5A2>873Fa76Tjuso3 z8kuw(e;fArT-RmG;?nzx~p&IUA0&-xA+aWonE7jw)ul( zxrQF2&GS(<3-ohfJKVrmWn2FXab4-AT_S#sAm^9or$e^8opWmzAFGSal$-j;uKcMo zs3uVZXk(?4#%}lS-xzE0FSloZ9!;uRoi8>Me7Uy{CoPl2rT_OWTE^EEp4W#TrWTi% zy)P6JqK`8?u1R#?z<9&DqecpX_iZe<6VN8H-Dtbya(nv0z{Wf8?oe3Xp7s(8d{Woo z9Yhl8M?7q$%|1Ur{~3&7(QUL@iy^425Q+J}zmZ=S6+GQ?%6v7_-SufR`5+vdK`~os zd1C|R&r+o=aQI+U`M^u&10 z4YSz`pWwJ_N+L;(702%Y(TuIFdLfXvpSoJiSB50;rz^h7(@c@cG?AlXER?Xx)J!37 z|KPy$sA10S(>ZC+92eI_R#!V0xu+VgoiIdp3{;de5E%2 z0UQ4FD+_O@m8$nlK~DR7+Q`{w9AjVKm$5AVg;XQGdzH~*#jFjQs;!i9p@&1`7{TQF z=nDDovJJLNjS86$OWyu@Kkc_Wt3N_bA7bbWI0vj?8=qpT{xPZ+m#B(-^prvVXlKD(&fI@ zAabo{`N0HT_!o;59FqO_f;Bq7f;vWH%LxNYx?_P>i&Ks;-V=J|0Feb&uOHCX!k_eq zD2eeSXl$~NUd4NT*9rLksF`V93&%ENtPnoLK=tu_XebOD)%*DlwEiMSl9>{kBG2CV zjJMVE`aJR+k@!A-axZuIE_>XGuX~v__$VbX>B`h(%kQuT@j! z&?nLGE;Jrtz|QyhG4i9!^3Cm|8d5--5#Pd(VRqVY)!RC$yaP)s9iI6iJDT!&xG#DO z)iDgzRZeAk*nX)b`b%O_j>n>Vn;)a}Q+*vN-}H@J+6U8mS&)q!-h=ecGkQZS&DiDJ?c;1pQF*5$+hqg3VFUGBo#>(@2g^CJGu{Q(-u#++drG~K z@M(*_LghSN=d?Y8x=PXW4f#*1D)zcm3kK)s^JDS=WpsXG67N_>d|Q3jL6fa&lxu=M zwK>kSq`Bz3@_ssZ6P7RRXkMM_&e^yEp*@ZYWMfZNsRWc&-5b&pHo>-8&RP3{M3WlP zTZ=HZg%a$rR0(IKRROYS`bI(#vF~1mh1{Kog{Xh$(uT=%RIO>@;P5<@p+!{H(L*a+ zIbajoQkTp6u~9PIfPLu3zBOacioWW>vMpn@#+ppO!YnB)lt(HG~z8$4o zGiQ2V5*{K#LrLHFY^-Yutijt4`$B&C%1mFy%|WM0^?~QziWgg2%1HE2BavgeA10r+ zN(fsgQvaW#t~?&9w|$pTS;{swvPE`d-}imrvW{UIOP1_kyNR-srNLnAM3#&+c3~v@ zHb{~!`wS7PAw}YM`o8by{hj~LALpFsKF{^s*L~mDv($MzI&!7_^Nfc%pvT%r?CAt2 zpJoe}VxZ3Ycf9U1;I%%(8PMu3`VHAY4D6sWB*#}LEbQmUmEtOV&Jaq#3c;s)>C&aN zVx~IRrTIB;2CJ^w{@TobQHT8pD<|#S9#QWsKn_uDIqj0Oh53doycLYd;;Kl@7V#|9 zLFe5gkcO#({4nytWQi)}4R7yGGCZxUdNF0JcB770`OHblYOuWgCgh+%o8Noo%_F*) zZQErQ^*Pm`?e~>^eSPdMG7Wf8E>xfwjXx!r$O-xg5pTq7RbNB*F(OSx!k106fVP{8 zA#*wtAPkw(BrMY@DW_7O&7`@6$>!DQeE^G8ce8f&itY_84P!cWf7o-PhmVU$`r^Y` zlhmzKWEvix_F%_WPY9cwV^LDxbyAbWh7m$@LN#zaGoN+AiPBt6I!J4QbsJz4#eRLp zNQqYxpu#b*>(?oB)1_w5EEUa>A1yS`_&4q%NS=P~UVVx5`5xmgzs71+ruyG+;0NZ7 zk89!+hieTIt=R%fPZ7W8bCqjJpM#pVwO(CDt_7)a@!`(h3Igpw1hF$WR#!i#@sByN zsU<~QDntbc;T;M#0Q8bAC$QTJk2L23u(B~BMi5H#9kP=l7(2}`J_xFE31W@g?ZSKC z@NhieQ%^(Beu&*#l0k+nEE3VPb6<3;%}Y188oHWtYK^|-Li1Z?Tt3(sT-0HV1?Z@B7Vc4f*9dB;5YL#eF+XK^!67Nrr z^NY)=eZL}3-`qeq_jXWm*p7N<1bJe!41c0CV4GgoZFSfKq3qqBeLG?q!s|+H&emGK zx!g>n0UV-^EIsw>46Ll5;kKZxHbta~m<(*Xc=#X7X6-hIGx=&3fmvRnx*~p#{)q`* zV`#=JU84`B7?2j1D0Mv<6Y=IgdN@^MRsE~x^z{oCq}G`#sU_qiZYt5@&YkV!i%{ms z`q|r66fX?*o=-XKr^q450{N>RiAJ+kEpR?=-gwiQ!NpY@e9Y zc?FhsL%awc={V9%a*xJ%&|1!6uA3nxCYio{1xj~~;4Ve*l>#Md z-V@2BCk;`TzE{YVq;c8QRYP{Yf&K8illjD9k%&E?YvRCm(bpWnQZ~<+21d3XThF?4zms}Um$tm1^2JLjk!cn9!dK> z`!7`Q1n`F8()Cj7YB?R`b+0FkH2M^Lno+|gZD&T%f;r0%jxqT=f^5rfD+0#F#m`c7 z)`n}3-0Q#Oy(MZ$n&sqMToiSaPnzkZ!DObCiz21bb;a3~91w2YLZRkJts&|(G0Y}{ zEkZ~t5)@~;D+OB?NZb@ur`b%UrOn4N>b~u`K7qCY*JS9;in;ihq5ldqxo(l4OU>9R5-| zX}jmUTPZm9nzO-Jy!7^#C(=m#e}2f8S?D^_sbr6C%x85(j?~0^6n~;p$j3dUmI)my z*Sqq=~WD7{l*4hlfhbP$crPn zQ2Y0!oK))X^V8E=`^*nCWXE7~|Fdh8Xa4zaGWW^y(u`?e+`Um}BzO}@{&oq~(ng3T z8a30uhN)HhW#B-=^s0>&@SL^JjuV<9yWNu+u!Bu+D#ESYiq7*b2#^GJwoPa?vQ}Bl z5r|jj$vZWg4^+l^Z-%Zk?R_ouP%Nv2QEzkU79eZJ5a*~hso98 zmxIY7xK^2p-;~X1gMs>!EZQAz{6zqigiGcB=^C)MoO$}r_8;j|RB<06mWvH3+vdpF zGYX>DaULJy+?KzrA(lN4Z22;(%6_uKafM3Rpk3o9GMt4x{Ke4`O(E(zXig{r&o^(x z57Q_Iu!`cOv$@!o$1`SOH*2+7;!VYiDgh2hJU8vwsNk(60>~J~K(`p;x>z0&K|Lvz z+`f&JI;OAU?^1Rc$cOglt8Fh?Au8cQbW=aIS3X<6!j>1|-B}_F@JaxP6vwln8NV+L zvmOj6DM>1rD?$u|9r(}KC=Ss`+5y7Sw{P|4Hbl3fEa~=F>%i>e;C@g&&09VPgl=4T zz~>2<;Q!TJYU_&eNUUmaL)Fq4kTD?Det3>AG?5D z^I-Ee)*ho6 zyWO+^N9JrH_4luMK*BpWcZwSi$KgYUhWyR=(bn?r?$V=O{cNsW?Ug){70H_8Xq2ys zcMDnA*KYFV&f!`vu{Q&n5hPGp4|RM5N^pBzJI+?<(rme}-oNQ)@FUAG9To z1+NlQ0{f}OC-(+EjeW6}RQ!BW$3u%xf_+}1Dw|byu+xbX zyTNdjP(d4`=Q^D_pQY`XUQ#C4=?RK6)}#H-!!<~MhEw!-)Ao!rsRR|u9t@FkWozR5 z@h~_nS83FJXfr4sD`VaT*DZhd*EP(Mz1TvcxfA-t;pNvF6u)Z)Z%wHDED*!xeQHuZ zs%y^VJX!cu7}ceC6P}YtBxcPz`rCFbN>n$$6v5R?EWl>1?$U51u=+-h_*F46CI=w?uE`$#h z=lo;bD&H0qO>w;nBX!>DIEXi*p3h=(RH>o0y6q^Ln1OkV4|-N}Ef^j>q2I2$>&hx)x^L+`H@u-gBL7KF z+HfIT=>!)j2 zs=&bky9bl%Tz}klr#>z&7Q*rszGp(SAT>;=wNl#ft8^{R++% zJK22fSAH8MQmAbn#&{tn`JZ24NtSGAb(nT5UMUG2I8ytm&^>VeX=A#=VT%~4jx&4w zEi(t97aJx!8%Mn(NOjLD<+R`0Ne(Svm0q3_dI`mK$zn>%ZC`mk_PY;;?a_jJy+)nF=LOA)>QbKyzPqK>VL+c#v?lbb}lNYsw zE0@okQ`@bkUHh7`+CHBM)pr_-7e6ap^F^sicOxu-{KAE7>F8D=K(++)9z%B-&B4@ugNUGXQW%+)K{s}73j zCsVoSVU(U+V_$qob;93#bm+$-#dHd$O2$~v;m2?Bm<;IN_$oK<$I-^_^nZBzMm^%5Sw$gRUd`MPR0plQt1){Dl}dj- z>r)(c=3~j7-7#9CZgJ)aP(vk^v~~kb^%@&L0}MIIVNrW7&EXPg5NwEA4gne$ID)7g zyf4Qp9L{{Uom$THFFY<{)&Sbns$#;#7TR<{s_m6ipltc=9Fo^JZD|v_joXZnh2)i#l+4Jt3768xngQ%j*vgtJ6+$*^AJ;I*ALI`+S7qChM+yN; zkBT<4XPYgB2n8iU@`&kD{`WxRgeM#P#Te?Uqqjv44!FM+Kw+;GNCd-qo7cj3xtenV zGrKe5-ORA>9w6Niuyg(#H4kCUvq1{L@f=_+=V-MNnw-W&dvg|yib&hjXiinqOr)Bj zX8_E8&#bp98owY={cGXHLtQo~Ii+Z=lvcAey>mzdQDbxDP;Q-Xj-o*v(0JKML^Dq! z9=iV%zs+A09A{!h_;R1(}tlb}faKF>$ z_R?7T8C${;R>qYVvMFgj#)hMA7Ylj(Eei0>fBzk%%N*IfysC`bY=qiUMc7U3CAEqx z9IUUqFo^xoJV|SH$0j}noKch{Y7ahKG5W^F&sJjRuzQK*BJxBK(w?$2xjn&k4H$-B zi^}2iuYoQr$^zoEOC_|!B7zBSaH7Z0En|`Z#|aq-z25V*0&-A8IZr|eJ7#Dcf4wng z;2Nij0Vx+ACkAvH@F53Q1Ld&{V-3b60kkW={`+gYQDM^6`w}(xokf0fiHD@W6o!nWM z-9#2x&e3QkONgZXY_+LNyZ7VE)yp?9P!e#gQ1eT1oaYp9Q-7c>YVn$QIq6cjde|@J zRBL@w*_|k)tn$?foFF8%D0$3*nEyKer;eXvy%*tD#aXRUfoioPsl~~;GcxKoMQ?^E z3Zl&waF>jY#Katy*BLx*kJ-juRon#GfdY}eyZiG^Np(^V(r1Q${(Se?1fD5e{#84+ zBl+65XY=x6F2u{eJ&?~$bDwA(O`5R<^WmCZy!sI5|-QxQQG zuUzRlQRm7I=+@2qzR1+kfs*M+vVAZrvAfC6#hnk0pmiAYEHxCJ)&Wfnqioc8;CKXNV*-_erP56hj^{O8+tH zIIYXW4<@qHj^c)WjIx2qh-co}n$UP9>T~ zQZ5$hR`v`}p*qhaq6cEi$fFc+Kf=1~(x)y>%RE3nIwL=Pf`4z>Vb(C3FcWP)=pFip zZ`=w&3m)Rf1=_PBK@70=+PMc-f2ypShS{94j^=Y`SB0dEVIWeEi_*&6Z_LAQfK;)b^u=nk5&c4{?B)7s*#bc&B!HI`k{ZY<+?isw6}MotwAnIn!*;?mWKvRO?R*CZ?GTyP>}Xe-XvUg1 zQZ;Zy{)3O6hHio)IJqk-ag;7RrWBoW$CX}irhI#2#0s!yAQ0pqU!|mop|+^RqxkF* zr4in$|H|sG~br*-&=5=K^pU>YC}i(sGLZKU&*+3IG5A literal 0 HcmV?d00001 diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md new file mode 100644 index 00000000..dab7f1ab --- /dev/null +++ b/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md @@ -0,0 +1,682 @@ ++++ +title = "openGauss 单实例安装部署" +date = "2020-07-25" +tags = ["openGauss安装部署"] +archives = "2020-07" +author = "贾军锋" +summary = "openGauss 单实例安装部署" +img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" +times = "19:00" ++++ + +# **openGauss 单实例安装部署文档(CentOS 7.6+openGauss 1.0.0)** + +
+ +##### **说明:** +1> openGauss 支持单机部署和单机HA部署;
+2> openGauss HA部署时,备机数量为1~4台;
+3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
+4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. + +
+ +### **一、环境准备** +
+
+ +#### 1.1 硬件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
+ +
+ +##### **检查硬件配置:** +```shell +cat /proc/cpuinfo |grep processor +cat /etc/redhat-release +free -m + +## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 +``` + +
+ +#### 1.2 软件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
+ +
+ +#### 1.3 安装示例 + +
+ +```shell +## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 +yum install -y lksctp* +yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel +yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core + +[root@ecs-7777 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel +psmisc-22.20-16.el7.x86_64 +flex-2.5.37-6.el7.x86_64 +redhat-lsb-core-4.1-27.el7.centos.1.x86_64 +bzip2-1.0.6-13.el7.x86_64 +java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 +libaio-devel-0.3.109-13.el7.x86_64 +bison-3.0.4-2.el7.x86_64 +ncurses-devel-5.9-14.20130511.el7_4.x86_64 +lksctp-tools-devel-1.0.17-2.el7.x86_64 +patch-2.7.1-12.el7_7.x86_64 +lksctp-tools-1.0.17-2.el7.x86_64 +glibc-devel-2.17-307.el7.1.x86_64 +lksctp-tools-doc-1.0.17-2.el7.x86_64 + +[root@ecs-7777 ~]# checksctp +SCTP supported +``` + +
+ +#### 1.4 Python3源码编译安装 + +
+ +```shell +## Python3 源码编译安装耗时约30分钟 +yum install gcc zlib* openssl* -y +tar -zxvf Python-3.6.11.tgz +cd Python-3.6.11 +./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared +make +make install + +ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 +ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 +ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ +export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH + +[root@db1 bin]# python3 -V +Python 3.6.11 +``` + +
+
+ +### **二、操作系统配置** + +
+ +#### 2.1 编辑Hosts文件 + +
+ +```shell +vi /etc/hosts +-------------------- +192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping +-------------------- +``` + +
+ +#### 2.2 关闭防火墙 + +
+ +```shell +systemctl status firewalld +systemctl disable firewalld.service +systemctl stop firewalld.service +``` + +
+ +#### 2.3 关闭SELinux + +
+ +```shell +vi /etc/selinux/config +--------------------------- +SELINUX=disabled +--------------------------- +## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 +``` + +
+ +#### 2.4 修改字符集参数 + +
+ +```shell +vi ~/.bash_profile +--------------------------- +export LANG=en_US.UTF-8 +--------------------------- + +source ~/.bash_profile +``` + +
+ +#### 2.5 设置时区并统一主机时间 + +
+ +```shell +## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) +[root@db1 ~]# ll /etc/localtime +lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai +[root@db1 ~]# date +Fri Jul 17 15:49:08 CST 2020 + +## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) +[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +``` + +
+ +#### 2.6 关闭SWAP + +
+ +```shell +vi /etc/fstab ## 注释掉swap分区挂载 +swapoff -a ## 关闭swap +``` + +
+ +#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) + +
+ +```shell +vi /etc/sysconfig/network-scripts/ifcfg-ens34 +--------------------------------------- +MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改该参数后,建议重启服务器,否则可能造成SSH互信添加有问题 +--------------------------------------- + +# 命令临时修改方法: +ifconfig ens34 mtu 8192 +``` + +
+ +#### 2.8 配置SSH服务(允许root登录,关闭Banner) + +
+ +```shell +# 检查root登录配置和Banner的配置 +cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' + +# 如果不满足要求,应修改配置如下 +vi /etc/ssh/sshd_config +-------------------------- +#Banner none ## 注释ssh登录的欢迎信息 +PermitRootLogin yes ## 允许root用户远程登录 +-------------------------- + +systemctl restart sshd.service +``` + +
+ +#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) + +
+ +```shell +groupadd dbgrp +``` + +
+ +#### 2.10 配置内核参数 + +
+ +```shell +# vi /etc/sysctl.conf +--------------------------- +net.ipv4.tcp_max_tw_buckets = 10000 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_tw_recycle = 1 +net.ipv4.tcp_keepalive_time = 30 +net.ipv4.tcp_keepalive_probes = 9 +net.ipv4.tcp_keepalive_intvl = 30 +net.ipv4.tcp_retries1 = 5 +net.ipv4.tcp_syn_retries = 5 +net.ipv4.tcp_synack_retries = 5 +net.sctp.path_max_retrans = 10 +net.sctp.max_init_retransmits = 10 +net.sctp.association_max_retrans = 10 +net.sctp.hb_interval = 30000 +net.ipv4.tcp_retries2 = 12 +vm.overcommit_memory = 0 +net.sctp.sndbuf_policy = 0 +net.sctp.rcvbuf_policy = 0 +net.sctp.sctp_mem = 94500000 915000000 927000000 +net.sctp.sctp_rmem = 8192 250000 16777216 +net.sctp.sctp_wmem = 8192 250000 16777216 +net.ipv4.tcp_rmem = 8192 250000 16777216 +net.ipv4.tcp_wmem = 8192 250000 16777216 +net.core.wmem_max = 21299200 +net.core.rmem_max = 21299200 +net.core.wmem_default = 21299200 +net.core.rmem_default = 21299200 +net.ipv4.ip_local_port_range = 26000 65535 +kernel.sem = 250 6400000 1000 25600 +vm.min_free_kbytes = 102400 ## 内存*5% +net.core.somaxconn = 65535 +net.ipv4.tcp_syncookies = 1 +net.sctp.addip_enable = 0 +net.core.netdev_max_backlog = 65535 +net.ipv4.tcp_max_syn_backlog = 65535 +net.ipv4.tcp_fin_timeout = 60 +kernel.shmall = 1152921504606846720 +kernel.shmmax = 18446744073709551615 +net.ipv4.tcp_sack = 1 +net.ipv4.tcp_timestamps = 1 +vm.extfrag_threshold = 500 +vm.overcommit_ratio = 90 +---------------------------------------- + +# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 +[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums +[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums +N +``` + +
+ +#### 2.11 修改系统资源限制 + +
+ +```shell +vi /etc/security/limits.conf +---------------------------- +* soft stack 3072 +* hard stack 3072 +* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 +* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 + ---------------------------- + +vi /etc/security/limits.d/90-nproc.conf +---------------------------- +* soft nproc unlimited ## 系统支持的最大进程数 +---------------------------- + +## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 +``` + +
+ +#### 2.12 关闭透明页transparent_hugepage + +
+ +```shell +vi /etc/default/grub +---------------------------- +#修改: +GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" +---------------------------- +grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 + +reboot + +cat /proc/meminfo |grep Huge + +## 临时关闭透明页方法 +echo never > /sys/kernel/mm/transparent_hugepage/enabled +echo never > /sys/kernel/mm/transparent_hugepage/defrag +``` + +
+ +#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) + +
+ +```shell +rx = 4096 # 预安装时是否由脚本自动设置 +tx = 4096 # 预安装时是否由脚本自动设置 +mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 +``` + +
+
+ +### **三、预安装openGauss软件** + +
+ +#### 3.1 配置clusterconfig.xml文件 + +
+ +```shell +# vi clusterconfig.xml +--------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------------------------------------------------------- +``` + +##### **说明:** +1> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
+2> 安装目录和数据目录必须为空或者不存在,否则可能导致安装失败。
+3> 确保配置的目录之间不相互耦合。
+4> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
+5> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
+6> 配置数据库节点名称时,确保与hostname命令获取数据库节点的主机名称一致。
+7> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
+ +#### 3.2 环境初始化 + +
+ +```shell +## 创建相关目录 +mkdir /gauss +chgrp dbgrp -R /gauss +chmod 775 -R /gauss + +## 解压数据库安装包 +mkdir -p /soft/openGauss +chmod 775 -R /soft +mv clusterconfig.xml /soft/openGauss +mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss +cd /soft/openGauss +tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz +``` + +
+ +**交互式安装** + +**# 备注:** +    若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。安装时,preinstall脚本会自动创建root用户的互信(单实例是本机root互信),当不允许创建root用户互信时,在主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将节点的主机名和IP映射关系写入/etc/hosts文件,并在映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". +```shell +# 注: +export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml +./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##(可选)本地模式安装时,在每个节点手动执行 +``` + +
+ +**- - 手动使用脚本创建互信(参考)** +```shell +vi /soft/hostfile +----------------------- +192.168.0.11 +----------------------- + +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile +``` + +
+ +**- - 非交互式安装(参考)** +```shell +# 手动使用脚本创建互信 +vi /soft/hostfile +----------------------- +192.168.0.11 +----------------------- + +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive +``` + +
+ +**# 错误排查:** +​ 如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 + +
+
+ +### **四、部署安装openGauss软件** + +
+ +```shell +## 执行安装脚本 +chmod -R 775 /soft/ +chown omm:dbgrp /soft -R +su - omm +cd /soft/openGauss/script +./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) +``` + +**说明:**
+1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII;
+2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1;
+3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动;
+4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”. + +
+
+ +### **五、安装验证** + +
+ +```shell +su - root +cd /soft/openGauss/script/ +./gs_checkos -i A +./gs_checkos -i B +``` + +
+
+ +### **六、初始化数据库** + +
+ +##### **方法一:脚本初始化 (*经测试,该脚本运行异常,执行初始化后又自动将文件删除,最终初始化无效*)** +```shell +## 命令示例: +gs_initdb -E UTF-8 --locale=zh_CN.UTF-8 /opt/gaussdb/data/data_n1 --nodename dn1 -w "Bigdata@123" + +## 当前测试使用的数据库版本 +[omm@db1 ~]$ gaussdb -V +gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr + +## 初始化命令示例(结束时清空了数据目录,脚本可能存在异常,暂时不使用该方法) +[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" +The files belonging to this database system will be owned by user "omm". +This user must also own the server process. + +The database cluster will be initialized with locale "en_US.UTF-8". +The default text search configuration will be set to "english". + +creating directory /gauss/data/db1/tmp ... ok +creating subdirectories ... ok +selecting default max_connections ... 100 +selecting default shared_buffers ... 32MB +creating configuration files ... ok +creating template1 database in /gauss/data/db1/tmp/base/1 ... ok +initializing pg_authid ... ok +setting password ... ok +initializing dependencies ... ok +loading PL/pgSQL server-side language ... ok +creating system views ... ok +creating performance views ... ok +loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 自动删除了数据目录 +``` + +
+ +##### **方法二:gsql方式** +```shell +# gsql -d postgres -p 26000 +postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; +postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; +``` + +
+ +##### **简单查询测试:** +```shell +postgres=# select version(); +postgres=# \l + List of databases + + Name | Owner | Encoding | Collate | Ctype | Access privileges +-----------+-------+-----------+---------+-------+------------------- + mydb | omm | UTF8 | C | C | + postgres | omm | SQL_ASCII | C | C | + template0 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm + template1 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm +``` + +
+
+ +### **七、卸载数据库** + +
+ +```shell +## 登录主节点执行 +su - omm +gs_uninstall --delete-data # 卸载集群所有数据库 +gs_uninstall --delete-data -L # 仅卸载本地数据库 + +# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 +``` + +
+
+ +### **八、清理系统环境配置** + +
+ +    在openGauss卸载完成后,如果不需要在环境上重新部署openGauss,可以运行脚本gs_postuninstall对openGauss服务器上环境信息做清理。openGauss环境清理是对环境准备脚本gs_preinstall所做设置的清理。
+1> 确保root用户SSH互信
+2> 执行清理脚本,如下:
+```shell +cd /opt/software/openGauss/script +./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group +./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group -L ## 仅清理本地环境 +## 若为环境变量分离的模式安装的集群需删除之前source的环境变量分离的env参数 +``` +3> 删除root的SSH互信,并删除ENVFILE环境变量:`unset MPPDB_ENV_SEPARATE_PATH`
+注意:若是共用的环境,需要加入--sep-env-file \ No newline at end of file diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md new file mode 100644 index 00000000..8b72bf6d --- /dev/null +++ b/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md @@ -0,0 +1,1137 @@ ++++ +title = "openGauss 单实例 HA 安装部署 " +date = "2020-07-25" +tags = ["openGauss安装部署"] +archives = "2020-07" +author = "贾军锋" +summary = "openGauss 单实例 HA 安装部署" +img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" +times = "19:00" ++++ + +# **openGauss 单实例 HA 安装部署文档(CentOS 7.6+openGauss 1.0.0)** + +
+ +##### **说明:** +1> openGauss 支持单机部署和单机HA部署;
+2> openGauss HA部署时,备机数量为1~4台;
+3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
+4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. + +
+ +### **一、环境准备** + +
+ + + + + + + + + + + + + + + + + + + + +
IP地址规划
主机名
db1.opengauss.com
db2.opengauss.com
外网IP地址
192.168.124.11
192.168.124.12
后端IP地址
192.168.100.11
192.168.100.12
+ +
+ + +#### 1.1 硬件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
+ +
+ +##### **检查硬件配置:** +```shell +cat /proc/cpuinfo |grep processor +cat /etc/redhat-release +free -m +## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 +``` + +
+ +#### 1.2 软件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
+ +
+ +#### 1.3 安装示例 + +
+ +```shell +## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 +yum install -y lksctp* +yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel +yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core + +[root@db1 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel +psmisc-22.20-16.el7.x86_64 +flex-2.5.37-6.el7.x86_64 +redhat-lsb-core-4.1-27.el7.centos.1.x86_64 +bzip2-1.0.6-13.el7.x86_64 +java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 +libaio-devel-0.3.109-13.el7.x86_64 +bison-3.0.4-2.el7.x86_64 +ncurses-devel-5.9-14.20130511.el7_4.x86_64 +lksctp-tools-devel-1.0.17-2.el7.x86_64 +patch-2.7.1-12.el7_7.x86_64 +lksctp-tools-1.0.17-2.el7.x86_64 +glibc-devel-2.17-307.el7.1.x86_64 +lksctp-tools-doc-1.0.17-2.el7.x86_64 + +[root@db1 ~]# checksctp +SCTP supported +``` + +
+ +#### 1.4 Python3源码编译安装 + +
+ +```shell +## Python3 源码编译安装耗时约30分钟 +yum install gcc zlib* openssl* -y +tar -zxvf Python-3.6.11.tgz +cd Python-3.6.11 +./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared +make +make install + +ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 +ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 +ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ +export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH + +[root@db1 bin]# python3 -V +Python 3.6.11 +``` + +
+ +### ** 二、操作系统配置** + +
+ +#### 2.1 编辑Hosts文件 + +
+ +```shell +vi /etc/hosts +-------------------- +192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping +192.168.100.12 db2 db2.opengauss.com #Gauss OM IP Hosts Mapping +-------------------- +``` + +
+ +#### 2.2 关闭防火墙 + +
+ +```shell +systemctl status firewalld +systemctl disable firewalld.service +systemctl stop firewalld.service +``` + +
+ +#### 2.3 关闭SELinux + +
+ +```shell +vi /etc/selinux/config +--------------------------- +SELINUX=disabled +--------------------------- +## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 +``` + +
+ +#### 2.4 修改字符集参数 + +
+ +```shell +vi ~/.bash_profile +--------------------------- +export LANG=en_US.UTF-8 +--------------------------- + +source ~/.bash_profile +``` + +
+ +#### 2.5 设置时区并统一主机时间 + +
+ +```shell +## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) +[root@db1 ~]# ll /etc/localtime +lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai +[root@db1 ~]# date +Fri Jul 17 15:49:08 CST 2020 + +## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) +[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +``` + +
+ +#### 2.6 关闭SWAP + +
+ +```shell +vi /etc/fstab ## 注释掉swap分区挂载 +swapoff -a ## 关闭swap +``` + +
+ +#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) + +
+ +```shell +vi /etc/sysconfig/network-scripts/ifcfg-ens34 +--------------------------------------- +MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改后,建议重启服务器,否则可能造成ssh互信异常 +--------------------------------------- + +# 命令临时修改方法: +ifconfig ens34 mtu 8192 +``` + +
+ +#### 2.8 配置SSH服务(允许root登录,关闭Banner) + +
+ +```shell +# 检查root登录配置和Banner的配置 +cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' + +# 如果不满足要求,应修改配置如下 +vi /etc/ssh/sshd_config +-------------------------- +#Banner none ## 注释ssh登录的欢迎信息 +PermitRootLogin yes ## 允许root用户远程登录 +-------------------------- + +systemctl restart sshd.service +``` + +
+ +#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) + +
+ +```shell +groupadd dbgrp +``` + +
+ +#### 2.10 配置内核参数 + +
+ +```shell +# vi /etc/sysctl.conf +--------------------------- +net.ipv4.tcp_max_tw_buckets = 10000 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_tw_recycle = 1 +net.ipv4.tcp_keepalive_time = 30 +net.ipv4.tcp_keepalive_probes = 9 +net.ipv4.tcp_keepalive_intvl = 30 +net.ipv4.tcp_retries1 = 5 +net.ipv4.tcp_syn_retries = 5 +net.ipv4.tcp_synack_retries = 5 +net.sctp.path_max_retrans = 10 +net.sctp.max_init_retransmits = 10 +net.sctp.association_max_retrans = 10 +net.sctp.hb_interval = 30000 +net.ipv4.tcp_retries2 = 12 +vm.overcommit_memory = 0 +net.sctp.sndbuf_policy = 0 +net.sctp.rcvbuf_policy = 0 +net.sctp.sctp_mem = 94500000 915000000 927000000 +net.sctp.sctp_rmem = 8192 250000 16777216 +net.sctp.sctp_wmem = 8192 250000 16777216 +net.ipv4.tcp_rmem = 8192 250000 16777216 +net.ipv4.tcp_wmem = 8192 250000 16777216 +net.core.wmem_max = 21299200 +net.core.rmem_max = 21299200 +net.core.wmem_default = 21299200 +net.core.rmem_default = 21299200 +net.ipv4.ip_local_port_range = 26000 65535 +kernel.sem = 250 6400000 1000 25600 +vm.min_free_kbytes = 102400 ## 内存*5% +net.core.somaxconn = 65535 +net.ipv4.tcp_syncookies = 1 +net.sctp.addip_enable = 0 +net.core.netdev_max_backlog = 65535 +net.ipv4.tcp_max_syn_backlog = 65535 +net.ipv4.tcp_fin_timeout = 60 +kernel.shmall = 1152921504606846720 +kernel.shmmax = 18446744073709551615 +net.ipv4.tcp_sack = 1 +net.ipv4.tcp_timestamps = 1 +vm.extfrag_threshold = 500 +vm.overcommit_ratio = 90 +---------------------------------------- + +# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 +[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums +[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums +N +``` + +
+ +#### 2.11 修改系统资源限制 + +
+ +```shell +vi /etc/security/limits.conf +---------------------------- +* soft stack 3072 +* hard stack 3072 +* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 +* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 + ---------------------------- + +vi /etc/security/limits.d/90-nproc.conf +---------------------------- +* soft nproc unlimited ## 系统支持的最大进程数 +---------------------------- + +## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 +``` + +
+ +#### 2.12 关闭透明页transparent_hugepage + +
+ +```shell +vi /etc/default/grub +---------------------------- +#修改: +GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" +---------------------------- +grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 + +reboot + +cat /proc/meminfo |grep Huge + +## 临时关闭透明页方法 +echo never > /sys/kernel/mm/transparent_hugepage/enabled +echo never > /sys/kernel/mm/transparent_hugepage/defrag +``` + +
+ +#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) + +
+ +```shell +rx = 4096 # 预安装时是否由脚本自动设置 +tx = 4096 # 预安装时是否由脚本自动设置 +mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 +``` + +
+
+ +### **三、预安装openGauss软件** + +
+ +#### 3.1 配置clusterconfig.xml文件(仅在主节点配置即可) + +
+ +```shell +# vi clusterconfig.xml +------------------------------------------------ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------------------------------------------------ +``` +
+ + + + + + + + + + + + + + + + + +
实例角色
数据目录
备注
主DBNode
  /gauss/data/xxx  其中,xxx为当前主DBnode的名称
备DBnode
  /gauss/data/slaveX  其中,xxx为当前备DBnode的名称
+ +**备注:** +
+1> dataListenIp1 ---> 监听的IP地址,用于接受其他数据库节点的连接。未设置时,使用对应主机上的backIp1生成。
+2> dataHaIp1 ---> 主、备DBnode通讯的IP地址。未设置时,使用对应主机上的backIp生成。value中需要设置主、备DBnode所在主机的IP地址。
+3> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
+4> 安装目录和数据目录需为空或者不存在,否则可能导致安装失败。
+5> 确保配置的目录之间不相互耦合。
+6> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
+7> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
+8> 配置数据库节点名称时,"name"和"nodeNames"的值应该与hostname命令获取数据库节点的主机名称保持一致。
+9> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
+ +
+ +#### ** 3.2 环境初始化** + +
+ +#### 3.2.1 在主、备节点创建数据目录: +```shell +mkdir /gauss +chgrp dbgrp -R /gauss +chmod 775 -R /gauss +``` + +
+ +#### 3.2.2 解压安装包文件 + +```shell +mkdir -p /soft/openGauss +chmod 775 -R /soft +mv clusterconfig.xml /soft/openGauss +mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss +cd /soft/openGauss +tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz +``` + +
+ +#### 3.2.3 交互式安装 + +**注意:** 若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。
+    在openGauss的安装过程中,需要在openGauss中主机间执行命令,传送文件等操作,故在普通用户安装前需要确保互信是连通的。前置脚本中会先建立root用户间的互信,然后创建普通用户,并建立普通用户间的互信,安装完毕后即可删除root用户的互信。 +```shell +export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml ## 建议执行完毕后,重启系统,使部分参数生效 + +## 执行示例 +[root@db1 script]# ./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml +Parsing the configuration file. +Successfully parsed the configuration file. +Installing the tools on the local node. +Successfully installed the tools on the local node. +Are you sure you want to create trust for root (yes/no)? yes +Please enter password for root. +Password: +Creating SSH trust for the root permission user. +Checking network information. +All nodes in the network are Normal. +Successfully checked network information. +Creating SSH trust. +Creating the local key file. +Successfully created the local key files. +Appending local ID to authorized_keys. +Successfully appended local ID to authorized_keys. +Updating the known_hosts file. +Successfully updated the known_hosts file. +Appending authorized_key on the remote node. +Successfully appended authorized_key on all remote node. +Checking common authentication file content. +Successfully checked common authentication content. +Distributing SSH trust file to all node. +Successfully distributed SSH trust file to all node. +Verifying SSH trust on all hosts. +Successfully verified SSH trust on all hosts. +Successfully created SSH trust. +Successfully created SSH trust for the root permission user. +Setting pssh path +Successfully set core path. +Distributing package. +Begin to distribute package to tool path. +Successfully distribute package to tool path. +Begin to distribute package to package path. +Successfully distribute package to package path. +Successfully distributed package. +Are you sure you want to create the user[omm] and create trust for it (yes/no)? yes +Please enter password for cluster user. ## 输入集群管理用户omm的密码 +Password: +Please enter password for cluster user again. +Password: +Successfully created [omm] user on all nodes. +Preparing SSH service. +Successfully prepared SSH service. +Installing the tools in the cluster. +Successfully installed the tools in the cluster. +Checking hostname mapping. +Successfully checked hostname mapping. +Creating SSH trust for [omm] user. +Checking network information. +All nodes in the network are Normal. +Successfully checked network information. +Creating SSH trust. +Creating the local key file. +Successfully created the local key files. +Appending local ID to authorized_keys. +Successfully appended local ID to authorized_keys. +Updating the known_hosts file. +Successfully updated the known_hosts file. +Appending authorized_key on the remote node. +Successfully appended authorized_key on all remote node. +Checking common authentication file content. +Successfully checked common authentication content. +Distributing SSH trust file to all node. +Successfully distributed SSH trust file to all node. +Verifying SSH trust on all hosts. +Successfully verified SSH trust on all hosts. +Successfully created SSH trust. +Successfully created SSH trust for [omm] user. +Checking OS software. +Successfully check os software. +Checking OS version. +Successfully checked OS version. +Creating cluster's path. +Successfully created cluster's path. +Setting SCTP service. +Successfully set SCTP service. +Set and check OS parameter. +Setting OS parameters. +Successfully set OS parameters. +Warning: Installation environment contains some warning messages. +Please get more details by "/soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail". +Set and check OS parameter completed. +Preparing CRON service. +Successfully prepared CRON service. +Setting user environmental variables. +Successfully set user environmental variables. +Setting the dynamic link library. +Successfully set the dynamic link library. +Setting Core file +Successfully set core path. +Setting pssh path +Successfully set pssh path. +Set ARM Optimization. +No need to set ARM Optimization. +Fixing server package owner. +Setting finish flag. +Successfully set finish flag. +Preinstallation succeeded. +``` + +
+ +#### 3.2.4 执行脚本对主、备节点进行检查 + +```shell +[root@db1 script]# /soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail +Checking items: + A1. [ OS version status ] : Normal + [db1.opengauss.com] + centos_7.6.1810_64bit + [db2.opengauss.com] + centos_7.6.1810_64bit + + A2. [ Kernel version status ] : Normal + The names about all kernel versions are same. The value is "3.10.0-957.el7.x86_64". + A3. [ Unicode status ] : Normal + The values of all unicode are same. The value is "LANG=en_US.UTF-8". + A4. [ Time zone status ] : Normal + The informations about all timezones are same. The value is "+0800". + A5. [ Swap memory status ] : Normal + The value about swap memory is correct. + A6. [ System control parameters status ] : Normal + All values about system control parameters are correct. + A7. [ File system configuration status ] : Normal + Both soft nofile and hard nofile are correct. + A8. [ Disk configuration status ] : Normal + The value about XFS mount parameters is correct. + A9. [ Pre-read block size status ] : Normal + The value about Logical block size is correct. + A10.[ IO scheduler status ] : Normal + The value of IO scheduler is correct. + A11.[ Network card configuration status ] : Normal + The configuration about network card is correct. + A12.[ Time consistency status ] : Warning + [db1.opengauss.com] + The NTPD not detected on machine and local time is "2020-07-22 18:52:57". + [db2.opengauss.com] + The NTPD not detected on machine and local time is "2020-07-22 18:52:57". + + A13.[ Firewall service status ] : Normal + The firewall service is stopped. + A14.[ THP service status ] : Normal + The THP service is stopped. +Total numbers:14. Abnormal numbers:0. Warning numbers:1. + +## 由于没有使用NTP服务器,所以告警提示时间同步存在问题,考虑到系统时间对数据库的重要性,建议生产环境启用NTP服务,确保系统时间同步 +[root@db1 ~]# reboot +[root@db2 ~]# reboot +``` + +##### **注意:** +  当不允许创建root用户互信时,在各主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将所有节点的主机名和IP映射关系,写入各个主机的/etc/hosts文件,并在每个映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". + +
+ +#### 3.2.5 (可选)使用脚本手动创建互信,并执行本地预安装脚本 + +```shell +vi /soft/hostfile +----------------------- +192.168.100.11 +192.168.100.12 +----------------------- +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +## 指定preinstall脚本 +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##在每个节点手动执行 +``` + +
+ +#### 3.2.6 (可选参考)非交互式安装 + +```shell +## 手动创建互信(脚本) +vi /soft/hostfile +----------------------- +192.168.100.11 +192.168.100.12 +----------------------- +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +## 以非交互式的方式执行preinstall脚本 +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive +``` + +**错误排查:** +如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 + + + +### **四、部署安装openGauss软件** + +
+ +#### **4.1 执行安装脚本(仅在主节点执行即可)** + +
+ +```shell +## 执行完毕preinstall脚本后,建议重启操作系统,否则请手动设置max user process参数 +## 参考命令: ulimit -u unlimited +chmod -R 775 /soft/ +chown omm:dbgrp /soft -R +su - omm +cd /soft/openGauss/script +./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) + +## 执行示例如下: +[omm@db1 script]$ ./gs_install -X /soft/openGauss/clusterconfig.xml +Parsing the configuration file. +Check preinstall on every node. +Successfully checked preinstall on every node. +Creating the backup directory. +Successfully created the backup directory. +begin deploy.. +Installing the cluster. +begin prepare Install Cluster.. +Checking the installation environment on all nodes. +begin install Cluster.. +Installing applications on all nodes. +Successfully installed APP. +begin init Instance.. +encrypt cipher and rand files for database. +Please enter password for database: ##输入数据库密码 +Please repeat for database: +begin to create CA cert files +The sslcert will be generated in /gauss/app/share/sslcert/om +Cluster installation is completed. +Configuring. +Deleting instances from all nodes. +Successfully deleted instances from all nodes. +Checking node configuration on all nodes. +Initializing instances on all nodes. +Updating instance configuration on all nodes. +Check consistence of memCheck and coresCheck on database nodes. +Successful check consistence of memCheck and coresCheck on all nodes. +Configuring pg_hba on all nodes. +Configuration is completed. +Successfully started cluster. +Successfully installed application. +end deploy.. +``` + +##### **说明:** +1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII
+2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1
+3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动
+4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”
+5> 主、备数据库Single-inst HA安装完毕后,节点间互通则使用omm用户,从安全角度考虑,可以删除root用户的SSH互信 + +
+ +#### **4.2 备机可读(可选)** + +
+ +#### 1> 关闭cluster集群(仅在主节点执行即可) + +```shell +[omm@db1 ~]$ gs_om -t stop +Stopping cluster. +========================================= +Successfully stopped cluster. +========================================= +End stop cluster. +``` + +
+ +#### 2> 分别修改主、备库postgres.conf文件 + +```shell +cd /gauss/data/db1/ ## 备库路径在/gauss/data/slavedb2/ +vi postgresql.conf +----------------------------------- +## 内容如下: +wal_level=hot_standby ## 默认值 hot_standby +hot_standby = on ## 默认值 on +hot_standby_feedback = on ## 默认值 off +----------------------------------- +``` + +
+ +#### 3> 启动cluster集群(仅在主节点执行即可) + +```shell +[omm@db1 db1]$ gs_om -t start +Starting cluster. +========================================= +========================================= +Successfully started. +``` + +
+
+ + +### **五、安装验证** + +
+ +```shell +su - root +cd /soft/openGauss/script/ +./gs_checkos -i A +./gs_checkos -i B + +## 示例如下: +[root@db1 script]# ./gs_checkos -i A +Checking items: + A1. [ OS version status ] : Normal + A2. [ Kernel version status ] : Normal + A3. [ Unicode status ] : Normal + A4. [ Time zone status ] : Normal + A5. [ Swap memory status ] : Normal + A6. [ System control parameters status ] : Normal + A7. [ File system configuration status ] : Normal + A8. [ Disk configuration status ] : Normal + A9. [ Pre-read block size status ] : Normal + A10.[ IO scheduler status ] : Normal + A11.[ Network card configuration status ] : Normal + A12.[ Time consistency status ] : Warning + A13.[ Firewall service status ] : Normal + A14.[ THP service status ] : Normal +Total numbers:14. Abnormal numbers:0. Warning numbers:1. + +[root@db1 script]# ./gs_checkos -i B +Setting items: + B1. [ Set system control parameters ] : Normal + B2. [ Set file system configuration value ] : Normal + B3. [ Set pre-read block size value ] : Normal + B4. [ Set IO scheduler value ] : Normal + B5. [ Set network card configuration value ] : Normal + B6. [ Set THP service ] : Normal + B7. [ Set RemoveIPC value ] : Normal +NOTICE: MTU value and some warning items can NOT be set. Please do it manually. +Total numbers:7. Abnormal numbers:0. Warning numbers:0. +``` + +
+
+ +### **六、集群的基本管理操作** + +
+ +**6.1 启动集群** + +```shell +[omm@db1 ~]$ gs_om -t start +Starting cluster. +========================================= +========================================= +Successfully started. +``` + +
+ +**6.2 停止集群** + +```shell +[omm@db1 ~]$ gs_om -t stop +Stopping cluster. +========================================= +Successfully stopped cluster. +========================================= +End stop cluster. +``` + +
+ +**6.3 集群状态检查** + +```shell +[omm@db1 ~]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +----------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal +``` + +
+ +**6.4 集群的主/备切换测试** + +```shell +## 检查集群状态 +[omm@db1 ~]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +----------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal + +## 切换主/备角色(在备库执行) +[omm@db2 slavedb2]$ gs_ctl switchover -D /gauss/data/slavedb2/ +[2020-07-22 20:59:04.701][12415][][gs_ctl]: gs_ctl switchover ,datadir is -D "/gauss/data/slavedb2" +[2020-07-22 20:59:04.701][12415][][gs_ctl]: switchover term (1) +[2020-07-22 20:59:04.784][12415][][gs_ctl]: waiting for server to switchover............ +[2020-07-22 20:59:14.435][12415][][gs_ctl]: done +[2020-07-22 20:59:14.435][12415][][gs_ctl]: switchover completed (/gauss/data/slavedb2) + +## 检查集群状态 +[omm@db2 slavedb2]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 S Standby Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 P Primary Normal + +## 保存集群主备机器信息 +[omm@db2 slavedb2]$ gs_om -t refreshconf +Generating dynamic configuration file for all nodes. +Successfully generated dynamic configuration file. +``` + +
+ +### **七、配置数据库区域和字符集** + +
+ +**示例一:脚本初始化数据库(*脚本可能存在异常,测试时不生效*)** + +```shell +######目前官方提供的软件包版本如下所示: +[omm@db1 ~]$ gaussdb -V +gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr +## 测试时,该版本的gs_initdb脚本存在异常,暂时不使用该方法。 + +## 初始化数据库时,请确保对应的数据目录为空 +gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "Bigdata@123" + +## 初始化操作示例如下: +[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" +The files belonging to this database system will be owned by user "omm". +This user must also own the server process. + +The database cluster will be initialized with locale "en_US.UTF-8". +The default text search configuration will be set to "english". + +creating directory /gauss/data/db1/tmp ... ok +creating subdirectories ... ok +selecting default max_connections ... 100 +selecting default shared_buffers ... 32MB +creating configuration files ... ok +creating template1 database in /gauss/data/db1/tmp/base/1 ... ok +initializing pg_authid ... ok +setting password ... ok +initializing dependencies ... ok +loading PL/pgSQL server-side language ... ok +creating system views ... ok +creating performance views ... ok +loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 最终自动清空了数据目录,不生效 +``` + +
+ +**示例二:gsql方式新建库** + +```shell +# gsql -d postgres -p 26000 +postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; +postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; + +## 简单查询测试 +postgres=# select version(); +postgres=# \l + List of databases + + Name | Owner | Encoding | Collate | Ctype | Access privileges +-----------+-------+-----------+---------+-------+------------------- + mydb | omm | UTF8 | C | C | + postgres | omm | SQL_ASCII | C | C | + template0 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm + template1 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm +``` + +
+
+ +### **附录1:【手动创建SSH互信的方法】** + +
+ + +#### 1> 生成本地秘钥Key(每个主机执行一遍) +```shell +ssh-keygen -t rsa +cat .ssh/id_rsa.pub >> .ssh/authorized_keys ##生成本机授权 +``` + +
+ +#### 2> 收集各节点公钥至本机的known_hosts + +```shell +ssh-keyscan -t rsa db1 >> ~/.ssh/known_hosts +ssh-keyscan -t rsa db2 >> ~/.ssh/known_hosts +``` + +
+ +#### 3> 将互信文件分发给其他所有主机 + +```shell +scp -r .ssh db2:~ +``` + +
+ +#### 4> ssh登录测试 + + +
+
+ +### **附录2:【卸载数据库】** + +
+ +```shell +su - omm +gs_uninstall --delete-data # 卸载集群所有数据库 +gs_uninstall --delete-data -L # 仅卸载本地数据库 +# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 + +## 示例: +[omm@db1 ~]$ gs_uninstall --delete-data +Checking uninstallation. +Successfully checked uninstallation. +Stopping the cluster. +Successfully stopped cluster. +Successfully deleted instances. +Uninstalling application. +Successfully uninstalled application. +Uninstallation succeeded. +``` \ No newline at end of file -- Gitee From ba90968c0aff08bcbae383b0a3053d619be4936e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=86=9B=E9=94=8B?= <287523394@qq.com> Date: Mon, 27 Jul 2020 20:56:12 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20cont?= =?UTF-8?q?ent/zh/post/jiajunfeng/openGauss=20Single-inst=20Deployment=20(?= =?UTF-8?q?CentOS7.6+openGauss=201.0.0).md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... Deployment (CentOS7.6+openGauss 1.0.0).md | 682 ------------------ 1 file changed, 682 deletions(-) delete mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md deleted file mode 100644 index dab7f1ab..00000000 --- a/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md +++ /dev/null @@ -1,682 +0,0 @@ -+++ -title = "openGauss 单实例安装部署" -date = "2020-07-25" -tags = ["openGauss安装部署"] -archives = "2020-07" -author = "贾军锋" -summary = "openGauss 单实例安装部署" -img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" -times = "19:00" -+++ - -# **openGauss 单实例安装部署文档(CentOS 7.6+openGauss 1.0.0)** - -
- -##### **说明:** -1> openGauss 支持单机部署和单机HA部署;
-2> openGauss HA部署时,备机数量为1~4台;
-3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
-4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. - -
- -### **一、环境准备** -
-
- -#### 1.1 硬件需求 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
- -
- -##### **检查硬件配置:** -```shell -cat /proc/cpuinfo |grep processor -cat /etc/redhat-release -free -m - -## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 -``` - -
- -#### 1.2 软件需求 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
- -
- -#### 1.3 安装示例 - -
- -```shell -## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 -yum install -y lksctp* -yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel -yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core - -[root@ecs-7777 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel -psmisc-22.20-16.el7.x86_64 -flex-2.5.37-6.el7.x86_64 -redhat-lsb-core-4.1-27.el7.centos.1.x86_64 -bzip2-1.0.6-13.el7.x86_64 -java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 -libaio-devel-0.3.109-13.el7.x86_64 -bison-3.0.4-2.el7.x86_64 -ncurses-devel-5.9-14.20130511.el7_4.x86_64 -lksctp-tools-devel-1.0.17-2.el7.x86_64 -patch-2.7.1-12.el7_7.x86_64 -lksctp-tools-1.0.17-2.el7.x86_64 -glibc-devel-2.17-307.el7.1.x86_64 -lksctp-tools-doc-1.0.17-2.el7.x86_64 - -[root@ecs-7777 ~]# checksctp -SCTP supported -``` - -
- -#### 1.4 Python3源码编译安装 - -
- -```shell -## Python3 源码编译安装耗时约30分钟 -yum install gcc zlib* openssl* -y -tar -zxvf Python-3.6.11.tgz -cd Python-3.6.11 -./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared -make -make install - -ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 -ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 -ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ -export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH - -[root@db1 bin]# python3 -V -Python 3.6.11 -``` - -
-
- -### **二、操作系统配置** - -
- -#### 2.1 编辑Hosts文件 - -
- -```shell -vi /etc/hosts --------------------- -192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping --------------------- -``` - -
- -#### 2.2 关闭防火墙 - -
- -```shell -systemctl status firewalld -systemctl disable firewalld.service -systemctl stop firewalld.service -``` - -
- -#### 2.3 关闭SELinux - -
- -```shell -vi /etc/selinux/config ---------------------------- -SELINUX=disabled ---------------------------- -## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 -``` - -
- -#### 2.4 修改字符集参数 - -
- -```shell -vi ~/.bash_profile ---------------------------- -export LANG=en_US.UTF-8 ---------------------------- - -source ~/.bash_profile -``` - -
- -#### 2.5 设置时区并统一主机时间 - -
- -```shell -## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) -[root@db1 ~]# ll /etc/localtime -lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai -[root@db1 ~]# date -Fri Jul 17 15:49:08 CST 2020 - -## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) -[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -``` - -
- -#### 2.6 关闭SWAP - -
- -```shell -vi /etc/fstab ## 注释掉swap分区挂载 -swapoff -a ## 关闭swap -``` - -
- -#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) - -
- -```shell -vi /etc/sysconfig/network-scripts/ifcfg-ens34 ---------------------------------------- -MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改该参数后,建议重启服务器,否则可能造成SSH互信添加有问题 ---------------------------------------- - -# 命令临时修改方法: -ifconfig ens34 mtu 8192 -``` - -
- -#### 2.8 配置SSH服务(允许root登录,关闭Banner) - -
- -```shell -# 检查root登录配置和Banner的配置 -cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' - -# 如果不满足要求,应修改配置如下 -vi /etc/ssh/sshd_config --------------------------- -#Banner none ## 注释ssh登录的欢迎信息 -PermitRootLogin yes ## 允许root用户远程登录 --------------------------- - -systemctl restart sshd.service -``` - -
- -#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) - -
- -```shell -groupadd dbgrp -``` - -
- -#### 2.10 配置内核参数 - -
- -```shell -# vi /etc/sysctl.conf ---------------------------- -net.ipv4.tcp_max_tw_buckets = 10000 -net.ipv4.tcp_tw_reuse = 1 -net.ipv4.tcp_tw_recycle = 1 -net.ipv4.tcp_keepalive_time = 30 -net.ipv4.tcp_keepalive_probes = 9 -net.ipv4.tcp_keepalive_intvl = 30 -net.ipv4.tcp_retries1 = 5 -net.ipv4.tcp_syn_retries = 5 -net.ipv4.tcp_synack_retries = 5 -net.sctp.path_max_retrans = 10 -net.sctp.max_init_retransmits = 10 -net.sctp.association_max_retrans = 10 -net.sctp.hb_interval = 30000 -net.ipv4.tcp_retries2 = 12 -vm.overcommit_memory = 0 -net.sctp.sndbuf_policy = 0 -net.sctp.rcvbuf_policy = 0 -net.sctp.sctp_mem = 94500000 915000000 927000000 -net.sctp.sctp_rmem = 8192 250000 16777216 -net.sctp.sctp_wmem = 8192 250000 16777216 -net.ipv4.tcp_rmem = 8192 250000 16777216 -net.ipv4.tcp_wmem = 8192 250000 16777216 -net.core.wmem_max = 21299200 -net.core.rmem_max = 21299200 -net.core.wmem_default = 21299200 -net.core.rmem_default = 21299200 -net.ipv4.ip_local_port_range = 26000 65535 -kernel.sem = 250 6400000 1000 25600 -vm.min_free_kbytes = 102400 ## 内存*5% -net.core.somaxconn = 65535 -net.ipv4.tcp_syncookies = 1 -net.sctp.addip_enable = 0 -net.core.netdev_max_backlog = 65535 -net.ipv4.tcp_max_syn_backlog = 65535 -net.ipv4.tcp_fin_timeout = 60 -kernel.shmall = 1152921504606846720 -kernel.shmmax = 18446744073709551615 -net.ipv4.tcp_sack = 1 -net.ipv4.tcp_timestamps = 1 -vm.extfrag_threshold = 500 -vm.overcommit_ratio = 90 ----------------------------------------- - -# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 -[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums -[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums -N -``` - -
- -#### 2.11 修改系统资源限制 - -
- -```shell -vi /etc/security/limits.conf ----------------------------- -* soft stack 3072 -* hard stack 3072 -* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 -* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 - ---------------------------- - -vi /etc/security/limits.d/90-nproc.conf ----------------------------- -* soft nproc unlimited ## 系统支持的最大进程数 ----------------------------- - -## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 -``` - -
- -#### 2.12 关闭透明页transparent_hugepage - -
- -```shell -vi /etc/default/grub ----------------------------- -#修改: -GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" ----------------------------- -grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 - -reboot - -cat /proc/meminfo |grep Huge - -## 临时关闭透明页方法 -echo never > /sys/kernel/mm/transparent_hugepage/enabled -echo never > /sys/kernel/mm/transparent_hugepage/defrag -``` - -
- -#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) - -
- -```shell -rx = 4096 # 预安装时是否由脚本自动设置 -tx = 4096 # 预安装时是否由脚本自动设置 -mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 -``` - -
-
- -### **三、预安装openGauss软件** - -
- -#### 3.1 配置clusterconfig.xml文件 - -
- -```shell -# vi clusterconfig.xml ---------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------- -``` - -##### **说明:** -1> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
-2> 安装目录和数据目录必须为空或者不存在,否则可能导致安装失败。
-3> 确保配置的目录之间不相互耦合。
-4> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
-5> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
-6> 配置数据库节点名称时,确保与hostname命令获取数据库节点的主机名称一致。
-7> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
- -#### 3.2 环境初始化 - -
- -```shell -## 创建相关目录 -mkdir /gauss -chgrp dbgrp -R /gauss -chmod 775 -R /gauss - -## 解压数据库安装包 -mkdir -p /soft/openGauss -chmod 775 -R /soft -mv clusterconfig.xml /soft/openGauss -mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss -cd /soft/openGauss -tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz -``` - -
- -**交互式安装** - -**# 备注:** -    若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。安装时,preinstall脚本会自动创建root用户的互信(单实例是本机root互信),当不允许创建root用户互信时,在主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将节点的主机名和IP映射关系写入/etc/hosts文件,并在映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". -```shell -# 注: -export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH -cd /soft/openGauss/script -./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml -./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##(可选)本地模式安装时,在每个节点手动执行 -``` - -
- -**- - 手动使用脚本创建互信(参考)** -```shell -vi /soft/hostfile ------------------------ -192.168.0.11 ------------------------ - -cd /soft/openGauss/script -./gs_sshexkey -f /soft/hostfile -``` - -
- -**- - 非交互式安装(参考)** -```shell -# 手动使用脚本创建互信 -vi /soft/hostfile ------------------------ -192.168.0.11 ------------------------ - -cd /soft/openGauss/script -./gs_sshexkey -f /soft/hostfile - -cd /soft/openGauss/script -./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive -``` - -
- -**# 错误排查:** -​ 如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 - -
-
- -### **四、部署安装openGauss软件** - -
- -```shell -## 执行安装脚本 -chmod -R 775 /soft/ -chown omm:dbgrp /soft -R -su - omm -cd /soft/openGauss/script -./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) -``` - -**说明:**
-1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII;
-2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1;
-3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动;
-4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”. - -
-
- -### **五、安装验证** - -
- -```shell -su - root -cd /soft/openGauss/script/ -./gs_checkos -i A -./gs_checkos -i B -``` - -
-
- -### **六、初始化数据库** - -
- -##### **方法一:脚本初始化 (*经测试,该脚本运行异常,执行初始化后又自动将文件删除,最终初始化无效*)** -```shell -## 命令示例: -gs_initdb -E UTF-8 --locale=zh_CN.UTF-8 /opt/gaussdb/data/data_n1 --nodename dn1 -w "Bigdata@123" - -## 当前测试使用的数据库版本 -[omm@db1 ~]$ gaussdb -V -gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr - -## 初始化命令示例(结束时清空了数据目录,脚本可能存在异常,暂时不使用该方法) -[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" -The files belonging to this database system will be owned by user "omm". -This user must also own the server process. - -The database cluster will be initialized with locale "en_US.UTF-8". -The default text search configuration will be set to "english". - -creating directory /gauss/data/db1/tmp ... ok -creating subdirectories ... ok -selecting default max_connections ... 100 -selecting default shared_buffers ... 32MB -creating configuration files ... ok -creating template1 database in /gauss/data/db1/tmp/base/1 ... ok -initializing pg_authid ... ok -setting password ... ok -initializing dependencies ... ok -loading PL/pgSQL server-side language ... ok -creating system views ... ok -creating performance views ... ok -loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 自动删除了数据目录 -``` - -
- -##### **方法二:gsql方式** -```shell -# gsql -d postgres -p 26000 -postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; -postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; -``` - -
- -##### **简单查询测试:** -```shell -postgres=# select version(); -postgres=# \l - List of databases - - Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+-------+-----------+---------+-------+------------------- - mydb | omm | UTF8 | C | C | - postgres | omm | SQL_ASCII | C | C | - template0 | omm | SQL_ASCII | C | C | =c/omm + - | | | | | omm=CTc/omm - template1 | omm | SQL_ASCII | C | C | =c/omm + - | | | | | omm=CTc/omm -``` - -
-
- -### **七、卸载数据库** - -
- -```shell -## 登录主节点执行 -su - omm -gs_uninstall --delete-data # 卸载集群所有数据库 -gs_uninstall --delete-data -L # 仅卸载本地数据库 - -# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 -``` - -
-
- -### **八、清理系统环境配置** - -
- -    在openGauss卸载完成后,如果不需要在环境上重新部署openGauss,可以运行脚本gs_postuninstall对openGauss服务器上环境信息做清理。openGauss环境清理是对环境准备脚本gs_preinstall所做设置的清理。
-1> 确保root用户SSH互信
-2> 执行清理脚本,如下:
-```shell -cd /opt/software/openGauss/script -./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group -./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group -L ## 仅清理本地环境 -## 若为环境变量分离的模式安装的集群需删除之前source的环境变量分离的env参数 -``` -3> 删除root的SSH互信,并删除ENVFILE环境变量:`unset MPPDB_ENV_SEPARATE_PATH`
-注意:若是共用的环境,需要加入--sep-env-file \ No newline at end of file -- Gitee From 181e4aabd5f588e17be11a33de6eb2fb92708264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=86=9B=E9=94=8B?= <287523394@qq.com> Date: Mon, 27 Jul 2020 20:56:31 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20cont?= =?UTF-8?q?ent/zh/post/jiajunfeng/openGauss=20Single-inst=20HA=20Deploymen?= =?UTF-8?q?t=20(CentOS7.6+openGauss=201.0.0).md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... Deployment (CentOS7.6+openGauss 1.0.0).md | 1137 ----------------- 1 file changed, 1137 deletions(-) delete mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md deleted file mode 100644 index 8b72bf6d..00000000 --- a/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md +++ /dev/null @@ -1,1137 +0,0 @@ -+++ -title = "openGauss 单实例 HA 安装部署 " -date = "2020-07-25" -tags = ["openGauss安装部署"] -archives = "2020-07" -author = "贾军锋" -summary = "openGauss 单实例 HA 安装部署" -img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" -times = "19:00" -+++ - -# **openGauss 单实例 HA 安装部署文档(CentOS 7.6+openGauss 1.0.0)** - -
- -##### **说明:** -1> openGauss 支持单机部署和单机HA部署;
-2> openGauss HA部署时,备机数量为1~4台;
-3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
-4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. - -
- -### **一、环境准备** - -
- - - - - - - - - - - - - - - - - - - - -
IP地址规划
主机名
db1.opengauss.com
db2.opengauss.com
外网IP地址
192.168.124.11
192.168.124.12
后端IP地址
192.168.100.11
192.168.100.12
- -
- - -#### 1.1 硬件需求 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
- -
- -##### **检查硬件配置:** -```shell -cat /proc/cpuinfo |grep processor -cat /etc/redhat-release -free -m -## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 -``` - -
- -#### 1.2 软件需求 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
- -
- -#### 1.3 安装示例 - -
- -```shell -## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 -yum install -y lksctp* -yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel -yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core - -[root@db1 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel -psmisc-22.20-16.el7.x86_64 -flex-2.5.37-6.el7.x86_64 -redhat-lsb-core-4.1-27.el7.centos.1.x86_64 -bzip2-1.0.6-13.el7.x86_64 -java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 -libaio-devel-0.3.109-13.el7.x86_64 -bison-3.0.4-2.el7.x86_64 -ncurses-devel-5.9-14.20130511.el7_4.x86_64 -lksctp-tools-devel-1.0.17-2.el7.x86_64 -patch-2.7.1-12.el7_7.x86_64 -lksctp-tools-1.0.17-2.el7.x86_64 -glibc-devel-2.17-307.el7.1.x86_64 -lksctp-tools-doc-1.0.17-2.el7.x86_64 - -[root@db1 ~]# checksctp -SCTP supported -``` - -
- -#### 1.4 Python3源码编译安装 - -
- -```shell -## Python3 源码编译安装耗时约30分钟 -yum install gcc zlib* openssl* -y -tar -zxvf Python-3.6.11.tgz -cd Python-3.6.11 -./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared -make -make install - -ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 -ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 -ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ -export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH - -[root@db1 bin]# python3 -V -Python 3.6.11 -``` - -
- -### ** 二、操作系统配置** - -
- -#### 2.1 编辑Hosts文件 - -
- -```shell -vi /etc/hosts --------------------- -192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping -192.168.100.12 db2 db2.opengauss.com #Gauss OM IP Hosts Mapping --------------------- -``` - -
- -#### 2.2 关闭防火墙 - -
- -```shell -systemctl status firewalld -systemctl disable firewalld.service -systemctl stop firewalld.service -``` - -
- -#### 2.3 关闭SELinux - -
- -```shell -vi /etc/selinux/config ---------------------------- -SELINUX=disabled ---------------------------- -## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 -``` - -
- -#### 2.4 修改字符集参数 - -
- -```shell -vi ~/.bash_profile ---------------------------- -export LANG=en_US.UTF-8 ---------------------------- - -source ~/.bash_profile -``` - -
- -#### 2.5 设置时区并统一主机时间 - -
- -```shell -## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) -[root@db1 ~]# ll /etc/localtime -lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai -[root@db1 ~]# date -Fri Jul 17 15:49:08 CST 2020 - -## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) -[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -``` - -
- -#### 2.6 关闭SWAP - -
- -```shell -vi /etc/fstab ## 注释掉swap分区挂载 -swapoff -a ## 关闭swap -``` - -
- -#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) - -
- -```shell -vi /etc/sysconfig/network-scripts/ifcfg-ens34 ---------------------------------------- -MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改后,建议重启服务器,否则可能造成ssh互信异常 ---------------------------------------- - -# 命令临时修改方法: -ifconfig ens34 mtu 8192 -``` - -
- -#### 2.8 配置SSH服务(允许root登录,关闭Banner) - -
- -```shell -# 检查root登录配置和Banner的配置 -cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' - -# 如果不满足要求,应修改配置如下 -vi /etc/ssh/sshd_config --------------------------- -#Banner none ## 注释ssh登录的欢迎信息 -PermitRootLogin yes ## 允许root用户远程登录 --------------------------- - -systemctl restart sshd.service -``` - -
- -#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) - -
- -```shell -groupadd dbgrp -``` - -
- -#### 2.10 配置内核参数 - -
- -```shell -# vi /etc/sysctl.conf ---------------------------- -net.ipv4.tcp_max_tw_buckets = 10000 -net.ipv4.tcp_tw_reuse = 1 -net.ipv4.tcp_tw_recycle = 1 -net.ipv4.tcp_keepalive_time = 30 -net.ipv4.tcp_keepalive_probes = 9 -net.ipv4.tcp_keepalive_intvl = 30 -net.ipv4.tcp_retries1 = 5 -net.ipv4.tcp_syn_retries = 5 -net.ipv4.tcp_synack_retries = 5 -net.sctp.path_max_retrans = 10 -net.sctp.max_init_retransmits = 10 -net.sctp.association_max_retrans = 10 -net.sctp.hb_interval = 30000 -net.ipv4.tcp_retries2 = 12 -vm.overcommit_memory = 0 -net.sctp.sndbuf_policy = 0 -net.sctp.rcvbuf_policy = 0 -net.sctp.sctp_mem = 94500000 915000000 927000000 -net.sctp.sctp_rmem = 8192 250000 16777216 -net.sctp.sctp_wmem = 8192 250000 16777216 -net.ipv4.tcp_rmem = 8192 250000 16777216 -net.ipv4.tcp_wmem = 8192 250000 16777216 -net.core.wmem_max = 21299200 -net.core.rmem_max = 21299200 -net.core.wmem_default = 21299200 -net.core.rmem_default = 21299200 -net.ipv4.ip_local_port_range = 26000 65535 -kernel.sem = 250 6400000 1000 25600 -vm.min_free_kbytes = 102400 ## 内存*5% -net.core.somaxconn = 65535 -net.ipv4.tcp_syncookies = 1 -net.sctp.addip_enable = 0 -net.core.netdev_max_backlog = 65535 -net.ipv4.tcp_max_syn_backlog = 65535 -net.ipv4.tcp_fin_timeout = 60 -kernel.shmall = 1152921504606846720 -kernel.shmmax = 18446744073709551615 -net.ipv4.tcp_sack = 1 -net.ipv4.tcp_timestamps = 1 -vm.extfrag_threshold = 500 -vm.overcommit_ratio = 90 ----------------------------------------- - -# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 -[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums -[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums -N -``` - -
- -#### 2.11 修改系统资源限制 - -
- -```shell -vi /etc/security/limits.conf ----------------------------- -* soft stack 3072 -* hard stack 3072 -* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 -* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 - ---------------------------- - -vi /etc/security/limits.d/90-nproc.conf ----------------------------- -* soft nproc unlimited ## 系统支持的最大进程数 ----------------------------- - -## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 -``` - -
- -#### 2.12 关闭透明页transparent_hugepage - -
- -```shell -vi /etc/default/grub ----------------------------- -#修改: -GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" ----------------------------- -grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 - -reboot - -cat /proc/meminfo |grep Huge - -## 临时关闭透明页方法 -echo never > /sys/kernel/mm/transparent_hugepage/enabled -echo never > /sys/kernel/mm/transparent_hugepage/defrag -``` - -
- -#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) - -
- -```shell -rx = 4096 # 预安装时是否由脚本自动设置 -tx = 4096 # 预安装时是否由脚本自动设置 -mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 -``` - -
-
- -### **三、预安装openGauss软件** - -
- -#### 3.1 配置clusterconfig.xml文件(仅在主节点配置即可) - -
- -```shell -# vi clusterconfig.xml ------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------- -``` -
- - - - - - - - - - - - - - - - - -
实例角色
数据目录
备注
主DBNode
  /gauss/data/xxx  其中,xxx为当前主DBnode的名称
备DBnode
  /gauss/data/slaveX  其中,xxx为当前备DBnode的名称
- -**备注:** -
-1> dataListenIp1 ---> 监听的IP地址,用于接受其他数据库节点的连接。未设置时,使用对应主机上的backIp1生成。
-2> dataHaIp1 ---> 主、备DBnode通讯的IP地址。未设置时,使用对应主机上的backIp生成。value中需要设置主、备DBnode所在主机的IP地址。
-3> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
-4> 安装目录和数据目录需为空或者不存在,否则可能导致安装失败。
-5> 确保配置的目录之间不相互耦合。
-6> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
-7> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
-8> 配置数据库节点名称时,"name"和"nodeNames"的值应该与hostname命令获取数据库节点的主机名称保持一致。
-9> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
- -
- -#### ** 3.2 环境初始化** - -
- -#### 3.2.1 在主、备节点创建数据目录: -```shell -mkdir /gauss -chgrp dbgrp -R /gauss -chmod 775 -R /gauss -``` - -
- -#### 3.2.2 解压安装包文件 - -```shell -mkdir -p /soft/openGauss -chmod 775 -R /soft -mv clusterconfig.xml /soft/openGauss -mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss -cd /soft/openGauss -tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz -``` - -
- -#### 3.2.3 交互式安装 - -**注意:** 若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。
-    在openGauss的安装过程中,需要在openGauss中主机间执行命令,传送文件等操作,故在普通用户安装前需要确保互信是连通的。前置脚本中会先建立root用户间的互信,然后创建普通用户,并建立普通用户间的互信,安装完毕后即可删除root用户的互信。 -```shell -export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH -cd /soft/openGauss/script -./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml ## 建议执行完毕后,重启系统,使部分参数生效 - -## 执行示例 -[root@db1 script]# ./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml -Parsing the configuration file. -Successfully parsed the configuration file. -Installing the tools on the local node. -Successfully installed the tools on the local node. -Are you sure you want to create trust for root (yes/no)? yes -Please enter password for root. -Password: -Creating SSH trust for the root permission user. -Checking network information. -All nodes in the network are Normal. -Successfully checked network information. -Creating SSH trust. -Creating the local key file. -Successfully created the local key files. -Appending local ID to authorized_keys. -Successfully appended local ID to authorized_keys. -Updating the known_hosts file. -Successfully updated the known_hosts file. -Appending authorized_key on the remote node. -Successfully appended authorized_key on all remote node. -Checking common authentication file content. -Successfully checked common authentication content. -Distributing SSH trust file to all node. -Successfully distributed SSH trust file to all node. -Verifying SSH trust on all hosts. -Successfully verified SSH trust on all hosts. -Successfully created SSH trust. -Successfully created SSH trust for the root permission user. -Setting pssh path -Successfully set core path. -Distributing package. -Begin to distribute package to tool path. -Successfully distribute package to tool path. -Begin to distribute package to package path. -Successfully distribute package to package path. -Successfully distributed package. -Are you sure you want to create the user[omm] and create trust for it (yes/no)? yes -Please enter password for cluster user. ## 输入集群管理用户omm的密码 -Password: -Please enter password for cluster user again. -Password: -Successfully created [omm] user on all nodes. -Preparing SSH service. -Successfully prepared SSH service. -Installing the tools in the cluster. -Successfully installed the tools in the cluster. -Checking hostname mapping. -Successfully checked hostname mapping. -Creating SSH trust for [omm] user. -Checking network information. -All nodes in the network are Normal. -Successfully checked network information. -Creating SSH trust. -Creating the local key file. -Successfully created the local key files. -Appending local ID to authorized_keys. -Successfully appended local ID to authorized_keys. -Updating the known_hosts file. -Successfully updated the known_hosts file. -Appending authorized_key on the remote node. -Successfully appended authorized_key on all remote node. -Checking common authentication file content. -Successfully checked common authentication content. -Distributing SSH trust file to all node. -Successfully distributed SSH trust file to all node. -Verifying SSH trust on all hosts. -Successfully verified SSH trust on all hosts. -Successfully created SSH trust. -Successfully created SSH trust for [omm] user. -Checking OS software. -Successfully check os software. -Checking OS version. -Successfully checked OS version. -Creating cluster's path. -Successfully created cluster's path. -Setting SCTP service. -Successfully set SCTP service. -Set and check OS parameter. -Setting OS parameters. -Successfully set OS parameters. -Warning: Installation environment contains some warning messages. -Please get more details by "/soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail". -Set and check OS parameter completed. -Preparing CRON service. -Successfully prepared CRON service. -Setting user environmental variables. -Successfully set user environmental variables. -Setting the dynamic link library. -Successfully set the dynamic link library. -Setting Core file -Successfully set core path. -Setting pssh path -Successfully set pssh path. -Set ARM Optimization. -No need to set ARM Optimization. -Fixing server package owner. -Setting finish flag. -Successfully set finish flag. -Preinstallation succeeded. -``` - -
- -#### 3.2.4 执行脚本对主、备节点进行检查 - -```shell -[root@db1 script]# /soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail -Checking items: - A1. [ OS version status ] : Normal - [db1.opengauss.com] - centos_7.6.1810_64bit - [db2.opengauss.com] - centos_7.6.1810_64bit - - A2. [ Kernel version status ] : Normal - The names about all kernel versions are same. The value is "3.10.0-957.el7.x86_64". - A3. [ Unicode status ] : Normal - The values of all unicode are same. The value is "LANG=en_US.UTF-8". - A4. [ Time zone status ] : Normal - The informations about all timezones are same. The value is "+0800". - A5. [ Swap memory status ] : Normal - The value about swap memory is correct. - A6. [ System control parameters status ] : Normal - All values about system control parameters are correct. - A7. [ File system configuration status ] : Normal - Both soft nofile and hard nofile are correct. - A8. [ Disk configuration status ] : Normal - The value about XFS mount parameters is correct. - A9. [ Pre-read block size status ] : Normal - The value about Logical block size is correct. - A10.[ IO scheduler status ] : Normal - The value of IO scheduler is correct. - A11.[ Network card configuration status ] : Normal - The configuration about network card is correct. - A12.[ Time consistency status ] : Warning - [db1.opengauss.com] - The NTPD not detected on machine and local time is "2020-07-22 18:52:57". - [db2.opengauss.com] - The NTPD not detected on machine and local time is "2020-07-22 18:52:57". - - A13.[ Firewall service status ] : Normal - The firewall service is stopped. - A14.[ THP service status ] : Normal - The THP service is stopped. -Total numbers:14. Abnormal numbers:0. Warning numbers:1. - -## 由于没有使用NTP服务器,所以告警提示时间同步存在问题,考虑到系统时间对数据库的重要性,建议生产环境启用NTP服务,确保系统时间同步 -[root@db1 ~]# reboot -[root@db2 ~]# reboot -``` - -##### **注意:** -  当不允许创建root用户互信时,在各主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将所有节点的主机名和IP映射关系,写入各个主机的/etc/hosts文件,并在每个映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". - -
- -#### 3.2.5 (可选)使用脚本手动创建互信,并执行本地预安装脚本 - -```shell -vi /soft/hostfile ------------------------ -192.168.100.11 -192.168.100.12 ------------------------ -cd /soft/openGauss/script -./gs_sshexkey -f /soft/hostfile - -## 指定preinstall脚本 -cd /soft/openGauss/script -./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##在每个节点手动执行 -``` - -
- -#### 3.2.6 (可选参考)非交互式安装 - -```shell -## 手动创建互信(脚本) -vi /soft/hostfile ------------------------ -192.168.100.11 -192.168.100.12 ------------------------ -cd /soft/openGauss/script -./gs_sshexkey -f /soft/hostfile - -## 以非交互式的方式执行preinstall脚本 -cd /soft/openGauss/script -./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive -``` - -**错误排查:** -如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 - - - -### **四、部署安装openGauss软件** - -
- -#### **4.1 执行安装脚本(仅在主节点执行即可)** - -
- -```shell -## 执行完毕preinstall脚本后,建议重启操作系统,否则请手动设置max user process参数 -## 参考命令: ulimit -u unlimited -chmod -R 775 /soft/ -chown omm:dbgrp /soft -R -su - omm -cd /soft/openGauss/script -./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) - -## 执行示例如下: -[omm@db1 script]$ ./gs_install -X /soft/openGauss/clusterconfig.xml -Parsing the configuration file. -Check preinstall on every node. -Successfully checked preinstall on every node. -Creating the backup directory. -Successfully created the backup directory. -begin deploy.. -Installing the cluster. -begin prepare Install Cluster.. -Checking the installation environment on all nodes. -begin install Cluster.. -Installing applications on all nodes. -Successfully installed APP. -begin init Instance.. -encrypt cipher and rand files for database. -Please enter password for database: ##输入数据库密码 -Please repeat for database: -begin to create CA cert files -The sslcert will be generated in /gauss/app/share/sslcert/om -Cluster installation is completed. -Configuring. -Deleting instances from all nodes. -Successfully deleted instances from all nodes. -Checking node configuration on all nodes. -Initializing instances on all nodes. -Updating instance configuration on all nodes. -Check consistence of memCheck and coresCheck on database nodes. -Successful check consistence of memCheck and coresCheck on all nodes. -Configuring pg_hba on all nodes. -Configuration is completed. -Successfully started cluster. -Successfully installed application. -end deploy.. -``` - -##### **说明:** -1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII
-2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1
-3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动
-4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”
-5> 主、备数据库Single-inst HA安装完毕后,节点间互通则使用omm用户,从安全角度考虑,可以删除root用户的SSH互信 - -
- -#### **4.2 备机可读(可选)** - -
- -#### 1> 关闭cluster集群(仅在主节点执行即可) - -```shell -[omm@db1 ~]$ gs_om -t stop -Stopping cluster. -========================================= -Successfully stopped cluster. -========================================= -End stop cluster. -``` - -
- -#### 2> 分别修改主、备库postgres.conf文件 - -```shell -cd /gauss/data/db1/ ## 备库路径在/gauss/data/slavedb2/ -vi postgresql.conf ------------------------------------ -## 内容如下: -wal_level=hot_standby ## 默认值 hot_standby -hot_standby = on ## 默认值 on -hot_standby_feedback = on ## 默认值 off ------------------------------------ -``` - -
- -#### 3> 启动cluster集群(仅在主节点执行即可) - -```shell -[omm@db1 db1]$ gs_om -t start -Starting cluster. -========================================= -========================================= -Successfully started. -``` - -
-
- - -### **五、安装验证** - -
- -```shell -su - root -cd /soft/openGauss/script/ -./gs_checkos -i A -./gs_checkos -i B - -## 示例如下: -[root@db1 script]# ./gs_checkos -i A -Checking items: - A1. [ OS version status ] : Normal - A2. [ Kernel version status ] : Normal - A3. [ Unicode status ] : Normal - A4. [ Time zone status ] : Normal - A5. [ Swap memory status ] : Normal - A6. [ System control parameters status ] : Normal - A7. [ File system configuration status ] : Normal - A8. [ Disk configuration status ] : Normal - A9. [ Pre-read block size status ] : Normal - A10.[ IO scheduler status ] : Normal - A11.[ Network card configuration status ] : Normal - A12.[ Time consistency status ] : Warning - A13.[ Firewall service status ] : Normal - A14.[ THP service status ] : Normal -Total numbers:14. Abnormal numbers:0. Warning numbers:1. - -[root@db1 script]# ./gs_checkos -i B -Setting items: - B1. [ Set system control parameters ] : Normal - B2. [ Set file system configuration value ] : Normal - B3. [ Set pre-read block size value ] : Normal - B4. [ Set IO scheduler value ] : Normal - B5. [ Set network card configuration value ] : Normal - B6. [ Set THP service ] : Normal - B7. [ Set RemoveIPC value ] : Normal -NOTICE: MTU value and some warning items can NOT be set. Please do it manually. -Total numbers:7. Abnormal numbers:0. Warning numbers:0. -``` - -
-
- -### **六、集群的基本管理操作** - -
- -**6.1 启动集群** - -```shell -[omm@db1 ~]$ gs_om -t start -Starting cluster. -========================================= -========================================= -Successfully started. -``` - -
- -**6.2 停止集群** - -```shell -[omm@db1 ~]$ gs_om -t stop -Stopping cluster. -========================================= -Successfully stopped cluster. -========================================= -End stop cluster. -``` - -
- -**6.3 集群状态检查** - -```shell -[omm@db1 ~]$ gs_om -t status --detail -[ Cluster State ] - -cluster_state : Normal -redistributing : No -current_az : AZ_ALL - -[ Datanode State ] - -node node_ip instance state ------------------------------------------------------------------------------------------------------------ -1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal -2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal -``` - -
- -**6.4 集群的主/备切换测试** - -```shell -## 检查集群状态 -[omm@db1 ~]$ gs_om -t status --detail -[ Cluster State ] - -cluster_state : Normal -redistributing : No -current_az : AZ_ALL - -[ Datanode State ] - -node node_ip instance state ------------------------------------------------------------------------------------------------------------ -1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal -2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal - -## 切换主/备角色(在备库执行) -[omm@db2 slavedb2]$ gs_ctl switchover -D /gauss/data/slavedb2/ -[2020-07-22 20:59:04.701][12415][][gs_ctl]: gs_ctl switchover ,datadir is -D "/gauss/data/slavedb2" -[2020-07-22 20:59:04.701][12415][][gs_ctl]: switchover term (1) -[2020-07-22 20:59:04.784][12415][][gs_ctl]: waiting for server to switchover............ -[2020-07-22 20:59:14.435][12415][][gs_ctl]: done -[2020-07-22 20:59:14.435][12415][][gs_ctl]: switchover completed (/gauss/data/slavedb2) - -## 检查集群状态 -[omm@db2 slavedb2]$ gs_om -t status --detail -[ Cluster State ] - -cluster_state : Normal -redistributing : No -current_az : AZ_ALL - -[ Datanode State ] - -node node_ip instance state -------------------------------------------------------------------------------------------------------- -1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 S Standby Normal -2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 P Primary Normal - -## 保存集群主备机器信息 -[omm@db2 slavedb2]$ gs_om -t refreshconf -Generating dynamic configuration file for all nodes. -Successfully generated dynamic configuration file. -``` - -
- -### **七、配置数据库区域和字符集** - -
- -**示例一:脚本初始化数据库(*脚本可能存在异常,测试时不生效*)** - -```shell -######目前官方提供的软件包版本如下所示: -[omm@db1 ~]$ gaussdb -V -gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr -## 测试时,该版本的gs_initdb脚本存在异常,暂时不使用该方法。 - -## 初始化数据库时,请确保对应的数据目录为空 -gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "Bigdata@123" - -## 初始化操作示例如下: -[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" -The files belonging to this database system will be owned by user "omm". -This user must also own the server process. - -The database cluster will be initialized with locale "en_US.UTF-8". -The default text search configuration will be set to "english". - -creating directory /gauss/data/db1/tmp ... ok -creating subdirectories ... ok -selecting default max_connections ... 100 -selecting default shared_buffers ... 32MB -creating configuration files ... ok -creating template1 database in /gauss/data/db1/tmp/base/1 ... ok -initializing pg_authid ... ok -setting password ... ok -initializing dependencies ... ok -loading PL/pgSQL server-side language ... ok -creating system views ... ok -creating performance views ... ok -loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 最终自动清空了数据目录,不生效 -``` - -
- -**示例二:gsql方式新建库** - -```shell -# gsql -d postgres -p 26000 -postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; -postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; - -## 简单查询测试 -postgres=# select version(); -postgres=# \l - List of databases - - Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+-------+-----------+---------+-------+------------------- - mydb | omm | UTF8 | C | C | - postgres | omm | SQL_ASCII | C | C | - template0 | omm | SQL_ASCII | C | C | =c/omm + - | | | | | omm=CTc/omm - template1 | omm | SQL_ASCII | C | C | =c/omm + - | | | | | omm=CTc/omm -``` - -
-
- -### **附录1:【手动创建SSH互信的方法】** - -
- - -#### 1> 生成本地秘钥Key(每个主机执行一遍) -```shell -ssh-keygen -t rsa -cat .ssh/id_rsa.pub >> .ssh/authorized_keys ##生成本机授权 -``` - -
- -#### 2> 收集各节点公钥至本机的known_hosts - -```shell -ssh-keyscan -t rsa db1 >> ~/.ssh/known_hosts -ssh-keyscan -t rsa db2 >> ~/.ssh/known_hosts -``` - -
- -#### 3> 将互信文件分发给其他所有主机 - -```shell -scp -r .ssh db2:~ -``` - -
- -#### 4> ssh登录测试 - - -
-
- -### **附录2:【卸载数据库】** - -
- -```shell -su - omm -gs_uninstall --delete-data # 卸载集群所有数据库 -gs_uninstall --delete-data -L # 仅卸载本地数据库 -# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 - -## 示例: -[omm@db1 ~]$ gs_uninstall --delete-data -Checking uninstallation. -Successfully checked uninstallation. -Stopping the cluster. -Successfully stopped cluster. -Successfully deleted instances. -Uninstalling application. -Successfully uninstalled application. -Uninstallation succeeded. -``` \ No newline at end of file -- Gitee From 1c0705d7e424a8fed5df5a9c12be160d6da260ea Mon Sep 17 00:00:00 2001 From: jia_junfeng1 <287523394@qq.com> Date: Mon, 27 Jul 2020 20:57:44 +0800 Subject: [PATCH 4/4] update 20200727 --- ... Deployment (CentOS7.6+openGauss 1.0.0).md | 682 ++++++++++ ... Deployment (CentOS7.6+openGauss 1.0.0).md | 1137 +++++++++++++++++ 2 files changed, 1819 insertions(+) create mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md create mode 100644 content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md new file mode 100644 index 00000000..dab7f1ab --- /dev/null +++ b/content/zh/post/jiajunfeng/openGauss Single-inst Deployment (CentOS7.6+openGauss 1.0.0).md @@ -0,0 +1,682 @@ ++++ +title = "openGauss 单实例安装部署" +date = "2020-07-25" +tags = ["openGauss安装部署"] +archives = "2020-07" +author = "贾军锋" +summary = "openGauss 单实例安装部署" +img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" +times = "19:00" ++++ + +# **openGauss 单实例安装部署文档(CentOS 7.6+openGauss 1.0.0)** + +
+ +##### **说明:** +1> openGauss 支持单机部署和单机HA部署;
+2> openGauss HA部署时,备机数量为1~4台;
+3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
+4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. + +
+ +### **一、环境准备** +
+
+ +#### 1.1 硬件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
+ +
+ +##### **检查硬件配置:** +```shell +cat /proc/cpuinfo |grep processor +cat /etc/redhat-release +free -m + +## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 +``` + +
+ +#### 1.2 软件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
+ +
+ +#### 1.3 安装示例 + +
+ +```shell +## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 +yum install -y lksctp* +yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel +yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core + +[root@ecs-7777 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel +psmisc-22.20-16.el7.x86_64 +flex-2.5.37-6.el7.x86_64 +redhat-lsb-core-4.1-27.el7.centos.1.x86_64 +bzip2-1.0.6-13.el7.x86_64 +java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 +libaio-devel-0.3.109-13.el7.x86_64 +bison-3.0.4-2.el7.x86_64 +ncurses-devel-5.9-14.20130511.el7_4.x86_64 +lksctp-tools-devel-1.0.17-2.el7.x86_64 +patch-2.7.1-12.el7_7.x86_64 +lksctp-tools-1.0.17-2.el7.x86_64 +glibc-devel-2.17-307.el7.1.x86_64 +lksctp-tools-doc-1.0.17-2.el7.x86_64 + +[root@ecs-7777 ~]# checksctp +SCTP supported +``` + +
+ +#### 1.4 Python3源码编译安装 + +
+ +```shell +## Python3 源码编译安装耗时约30分钟 +yum install gcc zlib* openssl* -y +tar -zxvf Python-3.6.11.tgz +cd Python-3.6.11 +./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared +make +make install + +ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 +ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 +ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ +export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH + +[root@db1 bin]# python3 -V +Python 3.6.11 +``` + +
+
+ +### **二、操作系统配置** + +
+ +#### 2.1 编辑Hosts文件 + +
+ +```shell +vi /etc/hosts +-------------------- +192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping +-------------------- +``` + +
+ +#### 2.2 关闭防火墙 + +
+ +```shell +systemctl status firewalld +systemctl disable firewalld.service +systemctl stop firewalld.service +``` + +
+ +#### 2.3 关闭SELinux + +
+ +```shell +vi /etc/selinux/config +--------------------------- +SELINUX=disabled +--------------------------- +## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 +``` + +
+ +#### 2.4 修改字符集参数 + +
+ +```shell +vi ~/.bash_profile +--------------------------- +export LANG=en_US.UTF-8 +--------------------------- + +source ~/.bash_profile +``` + +
+ +#### 2.5 设置时区并统一主机时间 + +
+ +```shell +## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) +[root@db1 ~]# ll /etc/localtime +lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai +[root@db1 ~]# date +Fri Jul 17 15:49:08 CST 2020 + +## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) +[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +``` + +
+ +#### 2.6 关闭SWAP + +
+ +```shell +vi /etc/fstab ## 注释掉swap分区挂载 +swapoff -a ## 关闭swap +``` + +
+ +#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) + +
+ +```shell +vi /etc/sysconfig/network-scripts/ifcfg-ens34 +--------------------------------------- +MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改该参数后,建议重启服务器,否则可能造成SSH互信添加有问题 +--------------------------------------- + +# 命令临时修改方法: +ifconfig ens34 mtu 8192 +``` + +
+ +#### 2.8 配置SSH服务(允许root登录,关闭Banner) + +
+ +```shell +# 检查root登录配置和Banner的配置 +cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' + +# 如果不满足要求,应修改配置如下 +vi /etc/ssh/sshd_config +-------------------------- +#Banner none ## 注释ssh登录的欢迎信息 +PermitRootLogin yes ## 允许root用户远程登录 +-------------------------- + +systemctl restart sshd.service +``` + +
+ +#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) + +
+ +```shell +groupadd dbgrp +``` + +
+ +#### 2.10 配置内核参数 + +
+ +```shell +# vi /etc/sysctl.conf +--------------------------- +net.ipv4.tcp_max_tw_buckets = 10000 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_tw_recycle = 1 +net.ipv4.tcp_keepalive_time = 30 +net.ipv4.tcp_keepalive_probes = 9 +net.ipv4.tcp_keepalive_intvl = 30 +net.ipv4.tcp_retries1 = 5 +net.ipv4.tcp_syn_retries = 5 +net.ipv4.tcp_synack_retries = 5 +net.sctp.path_max_retrans = 10 +net.sctp.max_init_retransmits = 10 +net.sctp.association_max_retrans = 10 +net.sctp.hb_interval = 30000 +net.ipv4.tcp_retries2 = 12 +vm.overcommit_memory = 0 +net.sctp.sndbuf_policy = 0 +net.sctp.rcvbuf_policy = 0 +net.sctp.sctp_mem = 94500000 915000000 927000000 +net.sctp.sctp_rmem = 8192 250000 16777216 +net.sctp.sctp_wmem = 8192 250000 16777216 +net.ipv4.tcp_rmem = 8192 250000 16777216 +net.ipv4.tcp_wmem = 8192 250000 16777216 +net.core.wmem_max = 21299200 +net.core.rmem_max = 21299200 +net.core.wmem_default = 21299200 +net.core.rmem_default = 21299200 +net.ipv4.ip_local_port_range = 26000 65535 +kernel.sem = 250 6400000 1000 25600 +vm.min_free_kbytes = 102400 ## 内存*5% +net.core.somaxconn = 65535 +net.ipv4.tcp_syncookies = 1 +net.sctp.addip_enable = 0 +net.core.netdev_max_backlog = 65535 +net.ipv4.tcp_max_syn_backlog = 65535 +net.ipv4.tcp_fin_timeout = 60 +kernel.shmall = 1152921504606846720 +kernel.shmmax = 18446744073709551615 +net.ipv4.tcp_sack = 1 +net.ipv4.tcp_timestamps = 1 +vm.extfrag_threshold = 500 +vm.overcommit_ratio = 90 +---------------------------------------- + +# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 +[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums +[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums +N +``` + +
+ +#### 2.11 修改系统资源限制 + +
+ +```shell +vi /etc/security/limits.conf +---------------------------- +* soft stack 3072 +* hard stack 3072 +* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 +* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 + ---------------------------- + +vi /etc/security/limits.d/90-nproc.conf +---------------------------- +* soft nproc unlimited ## 系统支持的最大进程数 +---------------------------- + +## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 +``` + +
+ +#### 2.12 关闭透明页transparent_hugepage + +
+ +```shell +vi /etc/default/grub +---------------------------- +#修改: +GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" +---------------------------- +grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 + +reboot + +cat /proc/meminfo |grep Huge + +## 临时关闭透明页方法 +echo never > /sys/kernel/mm/transparent_hugepage/enabled +echo never > /sys/kernel/mm/transparent_hugepage/defrag +``` + +
+ +#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) + +
+ +```shell +rx = 4096 # 预安装时是否由脚本自动设置 +tx = 4096 # 预安装时是否由脚本自动设置 +mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 +``` + +
+
+ +### **三、预安装openGauss软件** + +
+ +#### 3.1 配置clusterconfig.xml文件 + +
+ +```shell +# vi clusterconfig.xml +--------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------------------------------------------------------- +``` + +##### **说明:** +1> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
+2> 安装目录和数据目录必须为空或者不存在,否则可能导致安装失败。
+3> 确保配置的目录之间不相互耦合。
+4> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
+5> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
+6> 配置数据库节点名称时,确保与hostname命令获取数据库节点的主机名称一致。
+7> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
+ +#### 3.2 环境初始化 + +
+ +```shell +## 创建相关目录 +mkdir /gauss +chgrp dbgrp -R /gauss +chmod 775 -R /gauss + +## 解压数据库安装包 +mkdir -p /soft/openGauss +chmod 775 -R /soft +mv clusterconfig.xml /soft/openGauss +mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss +cd /soft/openGauss +tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz +``` + +
+ +**交互式安装** + +**# 备注:** +    若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。安装时,preinstall脚本会自动创建root用户的互信(单实例是本机root互信),当不允许创建root用户互信时,在主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将节点的主机名和IP映射关系写入/etc/hosts文件,并在映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". +```shell +# 注: +export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml +./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##(可选)本地模式安装时,在每个节点手动执行 +``` + +
+ +**- - 手动使用脚本创建互信(参考)** +```shell +vi /soft/hostfile +----------------------- +192.168.0.11 +----------------------- + +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile +``` + +
+ +**- - 非交互式安装(参考)** +```shell +# 手动使用脚本创建互信 +vi /soft/hostfile +----------------------- +192.168.0.11 +----------------------- + +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive +``` + +
+ +**# 错误排查:** +​ 如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 + +
+
+ +### **四、部署安装openGauss软件** + +
+ +```shell +## 执行安装脚本 +chmod -R 775 /soft/ +chown omm:dbgrp /soft -R +su - omm +cd /soft/openGauss/script +./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) +``` + +**说明:**
+1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII;
+2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1;
+3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动;
+4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”. + +
+
+ +### **五、安装验证** + +
+ +```shell +su - root +cd /soft/openGauss/script/ +./gs_checkos -i A +./gs_checkos -i B +``` + +
+
+ +### **六、初始化数据库** + +
+ +##### **方法一:脚本初始化 (*经测试,该脚本运行异常,执行初始化后又自动将文件删除,最终初始化无效*)** +```shell +## 命令示例: +gs_initdb -E UTF-8 --locale=zh_CN.UTF-8 /opt/gaussdb/data/data_n1 --nodename dn1 -w "Bigdata@123" + +## 当前测试使用的数据库版本 +[omm@db1 ~]$ gaussdb -V +gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr + +## 初始化命令示例(结束时清空了数据目录,脚本可能存在异常,暂时不使用该方法) +[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" +The files belonging to this database system will be owned by user "omm". +This user must also own the server process. + +The database cluster will be initialized with locale "en_US.UTF-8". +The default text search configuration will be set to "english". + +creating directory /gauss/data/db1/tmp ... ok +creating subdirectories ... ok +selecting default max_connections ... 100 +selecting default shared_buffers ... 32MB +creating configuration files ... ok +creating template1 database in /gauss/data/db1/tmp/base/1 ... ok +initializing pg_authid ... ok +setting password ... ok +initializing dependencies ... ok +loading PL/pgSQL server-side language ... ok +creating system views ... ok +creating performance views ... ok +loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 自动删除了数据目录 +``` + +
+ +##### **方法二:gsql方式** +```shell +# gsql -d postgres -p 26000 +postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; +postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; +``` + +
+ +##### **简单查询测试:** +```shell +postgres=# select version(); +postgres=# \l + List of databases + + Name | Owner | Encoding | Collate | Ctype | Access privileges +-----------+-------+-----------+---------+-------+------------------- + mydb | omm | UTF8 | C | C | + postgres | omm | SQL_ASCII | C | C | + template0 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm + template1 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm +``` + +
+
+ +### **七、卸载数据库** + +
+ +```shell +## 登录主节点执行 +su - omm +gs_uninstall --delete-data # 卸载集群所有数据库 +gs_uninstall --delete-data -L # 仅卸载本地数据库 + +# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 +``` + +
+
+ +### **八、清理系统环境配置** + +
+ +    在openGauss卸载完成后,如果不需要在环境上重新部署openGauss,可以运行脚本gs_postuninstall对openGauss服务器上环境信息做清理。openGauss环境清理是对环境准备脚本gs_preinstall所做设置的清理。
+1> 确保root用户SSH互信
+2> 执行清理脚本,如下:
+```shell +cd /opt/software/openGauss/script +./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group +./gs_postuninstall -U omm -X /opt/software/openGauss/clusterconfig.xml --delete-user --delete-group -L ## 仅清理本地环境 +## 若为环境变量分离的模式安装的集群需删除之前source的环境变量分离的env参数 +``` +3> 删除root的SSH互信,并删除ENVFILE环境变量:`unset MPPDB_ENV_SEPARATE_PATH`
+注意:若是共用的环境,需要加入--sep-env-file \ No newline at end of file diff --git a/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md b/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md new file mode 100644 index 00000000..8b72bf6d --- /dev/null +++ b/content/zh/post/jiajunfeng/openGauss Single-inst HA Deployment (CentOS7.6+openGauss 1.0.0).md @@ -0,0 +1,1137 @@ ++++ +title = "openGauss 单实例 HA 安装部署 " +date = "2020-07-25" +tags = ["openGauss安装部署"] +archives = "2020-07" +author = "贾军锋" +summary = "openGauss 单实例 HA 安装部署" +img = "/zh/post/jiajunfeng/img/DBlogo_20200722.png" +times = "19:00" ++++ + +# **openGauss 单实例 HA 安装部署文档(CentOS 7.6+openGauss 1.0.0)** + +
+ +##### **说明:** +1> openGauss 支持单机部署和单机HA部署;
+2> openGauss HA部署时,备机数量为1~4台;
+3> openGauss 脚本安装仅支持单实例部署,如果一台主机部署多个实例,建议手动使用命令安装;
+4> openGauss Connectors的Linux版本:JDBC、ODBC、libpq. + +
+ +### **一、环境准备** + +
+ + + + + + + + + + + + + + + + + + + + +
IP地址规划
主机名
db1.opengauss.com
db2.opengauss.com
外网IP地址
192.168.124.11
192.168.124.12
后端IP地址
192.168.100.11
192.168.100.12
+ +
+ + +#### 1.1 硬件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
组件
最小配置要求
备注
CPU
8c
 
内存
32GB
  如果小于32GB,需要调整数据库内存参数
硬盘
1.5GB
  禁用磁盘的Disk Cache Policy
网卡
300MB
  建议做网卡bond
+ +
+ +##### **检查硬件配置:** +```shell +cat /proc/cpuinfo |grep processor +cat /etc/redhat-release +free -m +## 如果内存小于32GB,会因为内存不足导致数据库无法启动,此时需要修改shared_buffers和max_connections调整openGauss所需的内存 +``` + +
+ +#### 1.2 软件需求 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
条目
说明
 Linux操作系统  openEuler 20.3LTS
  CentOS 7.6
 Linux文件系统  剩余inode个数 > 15亿
 工具  Huawei JDK 1.8.0、psmisc、bzip2
 Python  openEuler: 支持Python 3.7.x
  CentOS 7.6:支持Python 3.6.x
 其他依赖软件包  libaio-devel >= 0.3.109-13
  flex >= 2.5.31
  bison >= 2.7.4
  ncurses-devel >= 5.9-13.20130511
  glibc-devel >= 2.17-111
  patch >= 2.7.1-10
  lsb_release >= 4.1
+ +
+ +#### 1.3 安装示例 + +
+ +```shell +## 当系统环境仅限内网使用时,可以配置系统镜像ISO作为默认YUM源,但是该YUM源(CentOS 7.6)默认不包含python3,需要手动编译安装。 +yum install -y lksctp* +yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel +yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core + +[root@db1 ~]# rpm -qa java-1.8.0-openjdk psmisc bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core lksctp-tools* python3 python3-devel +psmisc-22.20-16.el7.x86_64 +flex-2.5.37-6.el7.x86_64 +redhat-lsb-core-4.1-27.el7.centos.1.x86_64 +bzip2-1.0.6-13.el7.x86_64 +java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 +libaio-devel-0.3.109-13.el7.x86_64 +bison-3.0.4-2.el7.x86_64 +ncurses-devel-5.9-14.20130511.el7_4.x86_64 +lksctp-tools-devel-1.0.17-2.el7.x86_64 +patch-2.7.1-12.el7_7.x86_64 +lksctp-tools-1.0.17-2.el7.x86_64 +glibc-devel-2.17-307.el7.1.x86_64 +lksctp-tools-doc-1.0.17-2.el7.x86_64 + +[root@db1 ~]# checksctp +SCTP supported +``` + +
+ +#### 1.4 Python3源码编译安装 + +
+ +```shell +## Python3 源码编译安装耗时约30分钟 +yum install gcc zlib* openssl* -y +tar -zxvf Python-3.6.11.tgz +cd Python-3.6.11 +./configure --prefix=/usr/python3.6.11 --enable-optimizations --enable-shared +make +make install + +ln -s /usr/python3.6.11/bin/python3.6 /usr/bin/python3 +ln -s /usr/python3.6.11/bin/pip3 /usr/bin/pip3 +ln -s /usr/python3.6.11/lib/libpython3.6m.so.1.0 /usr/lib64/ +export LD_LIBRARY_PATH=/usr/python3.6.11/lib:$LD_LIBRARY_PATH + +[root@db1 bin]# python3 -V +Python 3.6.11 +``` + +
+ +### ** 二、操作系统配置** + +
+ +#### 2.1 编辑Hosts文件 + +
+ +```shell +vi /etc/hosts +-------------------- +192.168.100.11 db1 db1.opengauss.com #Gauss OM IP Hosts Mapping +192.168.100.12 db2 db2.opengauss.com #Gauss OM IP Hosts Mapping +-------------------- +``` + +
+ +#### 2.2 关闭防火墙 + +
+ +```shell +systemctl status firewalld +systemctl disable firewalld.service +systemctl stop firewalld.service +``` + +
+ +#### 2.3 关闭SELinux + +
+ +```shell +vi /etc/selinux/config +--------------------------- +SELINUX=disabled +--------------------------- +## SELinux的配置文件需要重启操作系统才可以生效,可以使用setenforce 0 使SELinux临时变更为Permissive状态,降低SELinux的影响。 +``` + +
+ +#### 2.4 修改字符集参数 + +
+ +```shell +vi ~/.bash_profile +--------------------------- +export LANG=en_US.UTF-8 +--------------------------- + +source ~/.bash_profile +``` + +
+ +#### 2.5 设置时区并统一主机时间 + +
+ +```shell +## 检查时区和时间是否正确(建议生产环境开启NTP服务同步时间) +[root@db1 ~]# ll /etc/localtime +lrwxrwxrwx. 1 root root 35 Apr 27 22:06 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai +[root@db1 ~]# date +Fri Jul 17 15:49:08 CST 2020 + +## 如果时区不正确,则copy时区模板至/etc/localtime(此处以上海时间为例) +[root@db1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +``` + +
+ +#### 2.6 关闭SWAP + +
+ +```shell +vi /etc/fstab ## 注释掉swap分区挂载 +swapoff -a ## 关闭swap +``` + +
+ +#### 2.7 [可选]设置backupIP网卡的MTU值(建议8192) + +
+ +```shell +vi /etc/sysconfig/network-scripts/ifcfg-ens34 +--------------------------------------- +MTU=8192 ## 可能需要网络工程师协助修改网络设备端口MTU配置,操作系统修改后,建议重启服务器,否则可能造成ssh互信异常 +--------------------------------------- + +# 命令临时修改方法: +ifconfig ens34 mtu 8192 +``` + +
+ +#### 2.8 配置SSH服务(允许root登录,关闭Banner) + +
+ +```shell +# 检查root登录配置和Banner的配置 +cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner' + +# 如果不满足要求,应修改配置如下 +vi /etc/ssh/sshd_config +-------------------------- +#Banner none ## 注释ssh登录的欢迎信息 +PermitRootLogin yes ## 允许root用户远程登录 +-------------------------- + +systemctl restart sshd.service +``` + +
+ +#### 2.9 创建管理用户组(管理用户稍后使用脚本gs_preinstall创建) + +
+ +```shell +groupadd dbgrp +``` + +
+ +#### 2.10 配置内核参数 + +
+ +```shell +# vi /etc/sysctl.conf +--------------------------- +net.ipv4.tcp_max_tw_buckets = 10000 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_tw_recycle = 1 +net.ipv4.tcp_keepalive_time = 30 +net.ipv4.tcp_keepalive_probes = 9 +net.ipv4.tcp_keepalive_intvl = 30 +net.ipv4.tcp_retries1 = 5 +net.ipv4.tcp_syn_retries = 5 +net.ipv4.tcp_synack_retries = 5 +net.sctp.path_max_retrans = 10 +net.sctp.max_init_retransmits = 10 +net.sctp.association_max_retrans = 10 +net.sctp.hb_interval = 30000 +net.ipv4.tcp_retries2 = 12 +vm.overcommit_memory = 0 +net.sctp.sndbuf_policy = 0 +net.sctp.rcvbuf_policy = 0 +net.sctp.sctp_mem = 94500000 915000000 927000000 +net.sctp.sctp_rmem = 8192 250000 16777216 +net.sctp.sctp_wmem = 8192 250000 16777216 +net.ipv4.tcp_rmem = 8192 250000 16777216 +net.ipv4.tcp_wmem = 8192 250000 16777216 +net.core.wmem_max = 21299200 +net.core.rmem_max = 21299200 +net.core.wmem_default = 21299200 +net.core.rmem_default = 21299200 +net.ipv4.ip_local_port_range = 26000 65535 +kernel.sem = 250 6400000 1000 25600 +vm.min_free_kbytes = 102400 ## 内存*5% +net.core.somaxconn = 65535 +net.ipv4.tcp_syncookies = 1 +net.sctp.addip_enable = 0 +net.core.netdev_max_backlog = 65535 +net.ipv4.tcp_max_syn_backlog = 65535 +net.ipv4.tcp_fin_timeout = 60 +kernel.shmall = 1152921504606846720 +kernel.shmmax = 18446744073709551615 +net.ipv4.tcp_sack = 1 +net.ipv4.tcp_timestamps = 1 +vm.extfrag_threshold = 500 +vm.overcommit_ratio = 90 +---------------------------------------- + +# 注意:redhat 6.4&6.5需要打开sctp的checksums,否则可能引起创建表或数据库失败 +[root@db1 ~]# echo 0 > /sys/module/sctp/parameters/no_checksums +[root@db1 ~]# cat /sys/module/sctp/parameters/no_checksums +N +``` + +
+ +#### 2.11 修改系统资源限制 + +
+ +```shell +vi /etc/security/limits.conf +---------------------------- +* soft stack 3072 +* hard stack 3072 +* soft nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 +* hard nofile 1000000 ## gs_preinstall脚本自动设置,可以不手动设置 + ---------------------------- + +vi /etc/security/limits.d/90-nproc.conf +---------------------------- +* soft nproc unlimited ## 系统支持的最大进程数 +---------------------------- + +## 说明:在使用gs_preinstall脚本后,limits资源虽然已经设置,但可能存在暂时不生效的情况,需要重启系统使之生效。 +``` + +
+ +#### 2.12 关闭透明页transparent_hugepage + +
+ +```shell +vi /etc/default/grub +---------------------------- +#修改: +GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never" +---------------------------- +grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新编译grub,关闭透明页 + +reboot + +cat /proc/meminfo |grep Huge + +## 临时关闭透明页方法 +echo never > /sys/kernel/mm/transparent_hugepage/enabled +echo never > /sys/kernel/mm/transparent_hugepage/defrag +``` + +
+ +#### 2.13 [可选]网卡参数配置(配置万兆业务网卡[backIp1]) + +
+ +```shell +rx = 4096 # 预安装时是否由脚本自动设置 +tx = 4096 # 预安装时是否由脚本自动设置 +mtu = 8192 # 推荐值:8192,同时需要协调对网络端口做出相应调整 +``` + +
+
+ +### **三、预安装openGauss软件** + +
+ +#### 3.1 配置clusterconfig.xml文件(仅在主节点配置即可) + +
+ +```shell +# vi clusterconfig.xml +------------------------------------------------ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------------------------------------------------ +``` +
+ + + + + + + + + + + + + + + + + +
实例角色
数据目录
备注
主DBNode
  /gauss/data/xxx  其中,xxx为当前主DBnode的名称
备DBnode
  /gauss/data/slaveX  其中,xxx为当前备DBnode的名称
+ +**备注:** +
+1> dataListenIp1 ---> 监听的IP地址,用于接受其他数据库节点的连接。未设置时,使用对应主机上的backIp1生成。
+2> dataHaIp1 ---> 主、备DBnode通讯的IP地址。未设置时,使用对应主机上的backIp生成。value中需要设置主、备DBnode所在主机的IP地址。
+3> "/gauss/om"存放互信等工具,避免权限问题,不要把实例数据目录放在此目录下。
+4> 安装目录和数据目录需为空或者不存在,否则可能导致安装失败。
+5> 确保配置的目录之间不相互耦合。
+6> 若需要安装脚本自动创建安装用户时,各配置的目录需保证不与系统创建的默认用户目录耦合关联。
+7> 配置openGauss路径和实例路径时,路径中不能包含"|",";","&","$","<",">","\`","","","'","{","}","(",")","\[","]","~","\*","?"特殊字符。
+8> 配置数据库节点名称时,"name"和"nodeNames"的值应该与hostname命令获取数据库节点的主机名称保持一致。
+9> 配置文件中所有IP参数(backIP、sshIP、listenIP等)均只支持配置一个IP,如果配置第二个IP参数,则不会读取第二个参数的配置值。
+ +
+ +#### ** 3.2 环境初始化** + +
+ +#### 3.2.1 在主、备节点创建数据目录: +```shell +mkdir /gauss +chgrp dbgrp -R /gauss +chmod 775 -R /gauss +``` + +
+ +#### 3.2.2 解压安装包文件 + +```shell +mkdir -p /soft/openGauss +chmod 775 -R /soft +mv clusterconfig.xml /soft/openGauss +mv openGauss-1.0.0-CentOS-64bit.tar.gz /soft/openGauss +cd /soft/openGauss +tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz +``` + +
+ +#### 3.2.3 交互式安装 + +**注意:** 若是共用的环境,需要加入--sep-env-file=ENVFILE参数分离环境变量,避免与其他用户相互影响。
+    在openGauss的安装过程中,需要在openGauss中主机间执行命令,传送文件等操作,故在普通用户安装前需要确保互信是连通的。前置脚本中会先建立root用户间的互信,然后创建普通用户,并建立普通用户间的互信,安装完毕后即可删除root用户的互信。 +```shell +export LD_LIBRARY_PATH=/soft/openGauss/script/gspylib/clib:/usr/python3.6.11/lib:$LD_LIBRARY_PATH +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml ## 建议执行完毕后,重启系统,使部分参数生效 + +## 执行示例 +[root@db1 script]# ./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml +Parsing the configuration file. +Successfully parsed the configuration file. +Installing the tools on the local node. +Successfully installed the tools on the local node. +Are you sure you want to create trust for root (yes/no)? yes +Please enter password for root. +Password: +Creating SSH trust for the root permission user. +Checking network information. +All nodes in the network are Normal. +Successfully checked network information. +Creating SSH trust. +Creating the local key file. +Successfully created the local key files. +Appending local ID to authorized_keys. +Successfully appended local ID to authorized_keys. +Updating the known_hosts file. +Successfully updated the known_hosts file. +Appending authorized_key on the remote node. +Successfully appended authorized_key on all remote node. +Checking common authentication file content. +Successfully checked common authentication content. +Distributing SSH trust file to all node. +Successfully distributed SSH trust file to all node. +Verifying SSH trust on all hosts. +Successfully verified SSH trust on all hosts. +Successfully created SSH trust. +Successfully created SSH trust for the root permission user. +Setting pssh path +Successfully set core path. +Distributing package. +Begin to distribute package to tool path. +Successfully distribute package to tool path. +Begin to distribute package to package path. +Successfully distribute package to package path. +Successfully distributed package. +Are you sure you want to create the user[omm] and create trust for it (yes/no)? yes +Please enter password for cluster user. ## 输入集群管理用户omm的密码 +Password: +Please enter password for cluster user again. +Password: +Successfully created [omm] user on all nodes. +Preparing SSH service. +Successfully prepared SSH service. +Installing the tools in the cluster. +Successfully installed the tools in the cluster. +Checking hostname mapping. +Successfully checked hostname mapping. +Creating SSH trust for [omm] user. +Checking network information. +All nodes in the network are Normal. +Successfully checked network information. +Creating SSH trust. +Creating the local key file. +Successfully created the local key files. +Appending local ID to authorized_keys. +Successfully appended local ID to authorized_keys. +Updating the known_hosts file. +Successfully updated the known_hosts file. +Appending authorized_key on the remote node. +Successfully appended authorized_key on all remote node. +Checking common authentication file content. +Successfully checked common authentication content. +Distributing SSH trust file to all node. +Successfully distributed SSH trust file to all node. +Verifying SSH trust on all hosts. +Successfully verified SSH trust on all hosts. +Successfully created SSH trust. +Successfully created SSH trust for [omm] user. +Checking OS software. +Successfully check os software. +Checking OS version. +Successfully checked OS version. +Creating cluster's path. +Successfully created cluster's path. +Setting SCTP service. +Successfully set SCTP service. +Set and check OS parameter. +Setting OS parameters. +Successfully set OS parameters. +Warning: Installation environment contains some warning messages. +Please get more details by "/soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail". +Set and check OS parameter completed. +Preparing CRON service. +Successfully prepared CRON service. +Setting user environmental variables. +Successfully set user environmental variables. +Setting the dynamic link library. +Successfully set the dynamic link library. +Setting Core file +Successfully set core path. +Setting pssh path +Successfully set pssh path. +Set ARM Optimization. +No need to set ARM Optimization. +Fixing server package owner. +Setting finish flag. +Successfully set finish flag. +Preinstallation succeeded. +``` + +
+ +#### 3.2.4 执行脚本对主、备节点进行检查 + +```shell +[root@db1 script]# /soft/openGauss/script/gs_checkos -i A -h db1.opengauss.com,db2.opengauss.com --detail +Checking items: + A1. [ OS version status ] : Normal + [db1.opengauss.com] + centos_7.6.1810_64bit + [db2.opengauss.com] + centos_7.6.1810_64bit + + A2. [ Kernel version status ] : Normal + The names about all kernel versions are same. The value is "3.10.0-957.el7.x86_64". + A3. [ Unicode status ] : Normal + The values of all unicode are same. The value is "LANG=en_US.UTF-8". + A4. [ Time zone status ] : Normal + The informations about all timezones are same. The value is "+0800". + A5. [ Swap memory status ] : Normal + The value about swap memory is correct. + A6. [ System control parameters status ] : Normal + All values about system control parameters are correct. + A7. [ File system configuration status ] : Normal + Both soft nofile and hard nofile are correct. + A8. [ Disk configuration status ] : Normal + The value about XFS mount parameters is correct. + A9. [ Pre-read block size status ] : Normal + The value about Logical block size is correct. + A10.[ IO scheduler status ] : Normal + The value of IO scheduler is correct. + A11.[ Network card configuration status ] : Normal + The configuration about network card is correct. + A12.[ Time consistency status ] : Warning + [db1.opengauss.com] + The NTPD not detected on machine and local time is "2020-07-22 18:52:57". + [db2.opengauss.com] + The NTPD not detected on machine and local time is "2020-07-22 18:52:57". + + A13.[ Firewall service status ] : Normal + The firewall service is stopped. + A14.[ THP service status ] : Normal + The THP service is stopped. +Total numbers:14. Abnormal numbers:0. Warning numbers:1. + +## 由于没有使用NTP服务器,所以告警提示时间同步存在问题,考虑到系统时间对数据库的重要性,建议生产环境启用NTP服务,确保系统时间同步 +[root@db1 ~]# reboot +[root@db2 ~]# reboot +``` + +##### **注意:** +  当不允许创建root用户互信时,在各主机上使用创建的omm用户执行本地模式前置,然后用户手动创建openGauss用户互信:如果预安装指定-L参数,预安装前需手动将所有节点的主机名和IP映射关系,写入各个主机的/etc/hosts文件,并在每个映射关系后添加注释内容"*#Gauss OM IP Hosts Mapping*". + +
+ +#### 3.2.5 (可选)使用脚本手动创建互信,并执行本地预安装脚本 + +```shell +vi /soft/hostfile +----------------------- +192.168.100.11 +192.168.100.12 +----------------------- +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +## 指定preinstall脚本 +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -L -X /soft/openGauss/clusterconfig.xml ##在每个节点手动执行 +``` + +
+ +#### 3.2.6 (可选参考)非交互式安装 + +```shell +## 手动创建互信(脚本) +vi /soft/hostfile +----------------------- +192.168.100.11 +192.168.100.12 +----------------------- +cd /soft/openGauss/script +./gs_sshexkey -f /soft/hostfile + +## 以非交互式的方式执行preinstall脚本 +cd /soft/openGauss/script +./gs_preinstall -U omm -G dbgrp -X /soft/openGauss/clusterconfig.xml --non-interactive +``` + +**错误排查:** +如果准备安装环境失败请根据openGauss日志目录“`$GAUSSLOG/om`”下的“`gs_preinstall-YYYY-MM-DD_HHMMSS.log`”和“`gs_local-YYYY-MM-DD_HHMMSS.log`”中的日志信息排查错误。例如配置文件中“`$gaussdbLogPath`”参数指定的路径为“`/var/log/gaussdb`”,则“`$GAUSSLOG/om`”路径为“`/var/log/gaussdb/omm/om`”,omm用户为运行openGauss的用户。 + + + +### **四、部署安装openGauss软件** + +
+ +#### **4.1 执行安装脚本(仅在主节点执行即可)** + +
+ +```shell +## 执行完毕preinstall脚本后,建议重启操作系统,否则请手动设置max user process参数 +## 参考命令: ulimit -u unlimited +chmod -R 775 /soft/ +chown omm:dbgrp /soft -R +su - omm +cd /soft/openGauss/script +./gs_install -X /soft/openGauss/clusterconfig.xml ## 密码复杂度要求:大写+小写+数字+特殊字符(任选3类,至少8位) + +## 执行示例如下: +[omm@db1 script]$ ./gs_install -X /soft/openGauss/clusterconfig.xml +Parsing the configuration file. +Check preinstall on every node. +Successfully checked preinstall on every node. +Creating the backup directory. +Successfully created the backup directory. +begin deploy.. +Installing the cluster. +begin prepare Install Cluster.. +Checking the installation environment on all nodes. +begin install Cluster.. +Installing applications on all nodes. +Successfully installed APP. +begin init Instance.. +encrypt cipher and rand files for database. +Please enter password for database: ##输入数据库密码 +Please repeat for database: +begin to create CA cert files +The sslcert will be generated in /gauss/app/share/sslcert/om +Cluster installation is completed. +Configuring. +Deleting instances from all nodes. +Successfully deleted instances from all nodes. +Checking node configuration on all nodes. +Initializing instances on all nodes. +Updating instance configuration on all nodes. +Check consistence of memCheck and coresCheck on database nodes. +Successful check consistence of memCheck and coresCheck on all nodes. +Configuring pg_hba on all nodes. +Configuration is completed. +Successfully started cluster. +Successfully installed application. +end deploy.. +``` + +##### **说明:** +1> 默认字符集与操作系统设置保持一致,也可以在数据库初始化时使用-E参数指定数据库的字符集为GBK/UTF-8/Latin1,默认字符集为SQL_ASCII
+2> openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8、Latine1/latine1
+3> 执行gs_install脚本时,如果输入参数–autostart=no, 则工具脚本在配置(config)步骤完成后退出,不会自动启动openGauss,需要用户通过执行gs_om -t start命令手动启动
+4> 安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为集群openGauss配置文件中指定的程序安装目录。日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”
+5> 主、备数据库Single-inst HA安装完毕后,节点间互通则使用omm用户,从安全角度考虑,可以删除root用户的SSH互信 + +
+ +#### **4.2 备机可读(可选)** + +
+ +#### 1> 关闭cluster集群(仅在主节点执行即可) + +```shell +[omm@db1 ~]$ gs_om -t stop +Stopping cluster. +========================================= +Successfully stopped cluster. +========================================= +End stop cluster. +``` + +
+ +#### 2> 分别修改主、备库postgres.conf文件 + +```shell +cd /gauss/data/db1/ ## 备库路径在/gauss/data/slavedb2/ +vi postgresql.conf +----------------------------------- +## 内容如下: +wal_level=hot_standby ## 默认值 hot_standby +hot_standby = on ## 默认值 on +hot_standby_feedback = on ## 默认值 off +----------------------------------- +``` + +
+ +#### 3> 启动cluster集群(仅在主节点执行即可) + +```shell +[omm@db1 db1]$ gs_om -t start +Starting cluster. +========================================= +========================================= +Successfully started. +``` + +
+
+ + +### **五、安装验证** + +
+ +```shell +su - root +cd /soft/openGauss/script/ +./gs_checkos -i A +./gs_checkos -i B + +## 示例如下: +[root@db1 script]# ./gs_checkos -i A +Checking items: + A1. [ OS version status ] : Normal + A2. [ Kernel version status ] : Normal + A3. [ Unicode status ] : Normal + A4. [ Time zone status ] : Normal + A5. [ Swap memory status ] : Normal + A6. [ System control parameters status ] : Normal + A7. [ File system configuration status ] : Normal + A8. [ Disk configuration status ] : Normal + A9. [ Pre-read block size status ] : Normal + A10.[ IO scheduler status ] : Normal + A11.[ Network card configuration status ] : Normal + A12.[ Time consistency status ] : Warning + A13.[ Firewall service status ] : Normal + A14.[ THP service status ] : Normal +Total numbers:14. Abnormal numbers:0. Warning numbers:1. + +[root@db1 script]# ./gs_checkos -i B +Setting items: + B1. [ Set system control parameters ] : Normal + B2. [ Set file system configuration value ] : Normal + B3. [ Set pre-read block size value ] : Normal + B4. [ Set IO scheduler value ] : Normal + B5. [ Set network card configuration value ] : Normal + B6. [ Set THP service ] : Normal + B7. [ Set RemoveIPC value ] : Normal +NOTICE: MTU value and some warning items can NOT be set. Please do it manually. +Total numbers:7. Abnormal numbers:0. Warning numbers:0. +``` + +
+
+ +### **六、集群的基本管理操作** + +
+ +**6.1 启动集群** + +```shell +[omm@db1 ~]$ gs_om -t start +Starting cluster. +========================================= +========================================= +Successfully started. +``` + +
+ +**6.2 停止集群** + +```shell +[omm@db1 ~]$ gs_om -t stop +Stopping cluster. +========================================= +Successfully stopped cluster. +========================================= +End stop cluster. +``` + +
+ +**6.3 集群状态检查** + +```shell +[omm@db1 ~]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +----------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal +``` + +
+ +**6.4 集群的主/备切换测试** + +```shell +## 检查集群状态 +[omm@db1 ~]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +----------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 P Primary Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 S Standby Normal + +## 切换主/备角色(在备库执行) +[omm@db2 slavedb2]$ gs_ctl switchover -D /gauss/data/slavedb2/ +[2020-07-22 20:59:04.701][12415][][gs_ctl]: gs_ctl switchover ,datadir is -D "/gauss/data/slavedb2" +[2020-07-22 20:59:04.701][12415][][gs_ctl]: switchover term (1) +[2020-07-22 20:59:04.784][12415][][gs_ctl]: waiting for server to switchover............ +[2020-07-22 20:59:14.435][12415][][gs_ctl]: done +[2020-07-22 20:59:14.435][12415][][gs_ctl]: switchover completed (/gauss/data/slavedb2) + +## 检查集群状态 +[omm@db2 slavedb2]$ gs_om -t status --detail +[ Cluster State ] + +cluster_state : Normal +redistributing : No +current_az : AZ_ALL + +[ Datanode State ] + +node node_ip instance state +------------------------------------------------------------------------------------------------------- +1 db1.opengauss.com 192.168.100.11 6001 /gauss/data/db1 S Standby Normal +2 db2.opengauss.com 192.168.100.12 6002 /gauss/data/slavedb2 P Primary Normal + +## 保存集群主备机器信息 +[omm@db2 slavedb2]$ gs_om -t refreshconf +Generating dynamic configuration file for all nodes. +Successfully generated dynamic configuration file. +``` + +
+ +### **七、配置数据库区域和字符集** + +
+ +**示例一:脚本初始化数据库(*脚本可能存在异常,测试时不生效*)** + +```shell +######目前官方提供的软件包版本如下所示: +[omm@db1 ~]$ gaussdb -V +gaussdb (openGauss 1.0.0 build 0bd0ce80) compiled at 2020-06-30 18:19:27 commit 0 last mr +## 测试时,该版本的gs_initdb脚本存在异常,暂时不使用该方法。 + +## 初始化数据库时,请确保对应的数据目录为空 +gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "Bigdata@123" + +## 初始化操作示例如下: +[omm@db1 ~]$ gs_initdb -E UTF-8 --locale=en_US.UTF-8 /gauss/data/db1/tmp --nodename db1.opengauss.com -w "gauss@111" +The files belonging to this database system will be owned by user "omm". +This user must also own the server process. + +The database cluster will be initialized with locale "en_US.UTF-8". +The default text search configuration will be set to "english". + +creating directory /gauss/data/db1/tmp ... ok +creating subdirectories ... ok +selecting default max_connections ... 100 +selecting default shared_buffers ... 32MB +creating configuration files ... ok +creating template1 database in /gauss/data/db1/tmp/base/1 ... ok +initializing pg_authid ... ok +setting password ... ok +initializing dependencies ... ok +loading PL/pgSQL server-side language ... ok +creating system views ... ok +creating performance views ... ok +loading system objects' descriptions ... gs_initdb: removing data directory "/gauss/data/db1/tmp" ## 最终自动清空了数据目录,不生效 +``` + +
+ +**示例二:gsql方式新建库** + +```shell +# gsql -d postgres -p 26000 +postgres=# alter role omm identified by 'Gauss@123' replace 'Gauss_111'; +postgres=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; + +## 简单查询测试 +postgres=# select version(); +postgres=# \l + List of databases + + Name | Owner | Encoding | Collate | Ctype | Access privileges +-----------+-------+-----------+---------+-------+------------------- + mydb | omm | UTF8 | C | C | + postgres | omm | SQL_ASCII | C | C | + template0 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm + template1 | omm | SQL_ASCII | C | C | =c/omm + + | | | | | omm=CTc/omm +``` + +
+
+ +### **附录1:【手动创建SSH互信的方法】** + +
+ + +#### 1> 生成本地秘钥Key(每个主机执行一遍) +```shell +ssh-keygen -t rsa +cat .ssh/id_rsa.pub >> .ssh/authorized_keys ##生成本机授权 +``` + +
+ +#### 2> 收集各节点公钥至本机的known_hosts + +```shell +ssh-keyscan -t rsa db1 >> ~/.ssh/known_hosts +ssh-keyscan -t rsa db2 >> ~/.ssh/known_hosts +``` + +
+ +#### 3> 将互信文件分发给其他所有主机 + +```shell +scp -r .ssh db2:~ +``` + +
+ +#### 4> ssh登录测试 + + +
+
+ +### **附录2:【卸载数据库】** + +
+ +```shell +su - omm +gs_uninstall --delete-data # 卸载集群所有数据库 +gs_uninstall --delete-data -L # 仅卸载本地数据库 +# 如果卸载失败请根据“$GAUSSLOG/om/gs_uninstall-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。 + +## 示例: +[omm@db1 ~]$ gs_uninstall --delete-data +Checking uninstallation. +Successfully checked uninstallation. +Stopping the cluster. +Successfully stopped cluster. +Successfully deleted instances. +Uninstalling application. +Successfully uninstalled application. +Uninstallation succeeded. +``` \ No newline at end of file -- Gitee