1、初始化
創建一個操作系統用戶,例如postgres,為這個用戶設置PATH和LD_LIBRARY_PATH環境變量,指向opengauss/bin和opengauss/lib
export GAUSSHOME=/mnt/disk01/opengauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
注意,GAUSSHOME這個環境變量一定要設置,它指向openGauss軟件的根目錄。
下文的操作系統命令,都是以postgres操作系統用戶執行的。
創建密碼文件,例如,密碼為Postgres@123,文件位置為/tmp/tmplk1xtqm1
echo Postgres@123> /tmp/tmplk1xtqm1
gs_ctl init -D _pg_root -o "--encoding=UTF8 --nodename=node1 --no-locale --username=postgres --pwfile=/tmp/tmplk1xtqm1"
-D _pg_root 是配置文件和數據庫數據存放的目錄,可以根據需要隨意起名,不要放到opengauss目錄下
--nodename 是節點名稱,隨便寫
--username 初始超級用戶名,也是隨意,建議postgres
--pwfile 前一步創建的密碼文件
初始化完成,啟動數據庫:
gs_ctl -D _pg_root start
啟動后ps -ef|grep gaussdb可以看到一個進程,這就是openGauss數據庫進程,注意,它只有一個進程:
登錄:
gsql -U postgres -W Postgres@123 -d postgres -r
-U指定用戶名
-W指定密碼
-d指定數據庫名
-r指定命令行中可以使用左右鍵
這個命令省略了主機IP和端口號,只能本機登錄
-p指定端口號(默認5432)
-h指定IP
初始化也創建了名為postgres的默認初始數據庫,各配置參數在_pg_root目錄下的postgresql.conf中,上面的步驟使用默認參數,如果想修改監聽端口、日志文件存儲的位置等,需要修改postgresql.conf然后重啟數據庫。
2、配主備
如果初始化啟動沒有問題,則準備配置主備。
將opengauss目錄復制到另一臺機器上(備庫),與主庫路徑可以不同,但建議最好相同,備庫同樣創建操作系統用戶postgres,設置環境變量GAUSSHOME、PATH和LD_LIBRARY_PATH,但是不初始化。
在主庫上,先停掉openGauss:
gs_ctl -D _pg_root stop
修改配置文件postgresql.conf:
port=5432
listen_addresses = '*'
修改replconninfo1參數:
對于一主一備(假設主庫地址172.32.155.57,備庫地址172.32.155.58),需要設置參數replconninfo1,其中localhost是自己的IP地址,localport、localheartbeatport、localservice是用來監聽備庫的端口,remotehost是備庫的IP地址,remoteport、remoteheartbeatport、remoteservice是監聽端口,這個信息是對稱的,即格式上主備相同。注意port參數,localport要比port大1,其它端口沒有限制,不要與已有服務器沖突。
replconninfo1 = 'localhost=172.32.155.57 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.58 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
然后修改主庫的_pg_root/pg_hba.conf,增加一行:(這是允許所有用戶的遠程連接,除了postgres)
host all all 0.0.0.0/0 sha256
然后作為主庫啟動:
gs_ctl -D _pg_root -M primary start
然后配置備庫,注意,備庫不需要初始化,也千萬不能初始化,它的數據目錄要用gs_basebackup從第一臺機器拉取過來,在備庫以操作系統用戶postgres執行:
mkdir _pg_root
chmod 0700 _pg_root
gs_basebackup --pgdata=_pg_root -X stream --username=postgres --host=172.32.155.57 --port=5432
此時 _pg_root目錄的內容與主庫 _pg_root的內容完全一樣,需要修改postgresql.conf里的replconninfo1:
replconninfo1 = 'localhost=172.32.155.58 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.57 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
然后作為備庫啟動:
gs_ctl -D _pg_root -M standby start
查詢主備狀態,在備庫或主庫機器上執行:
gs_ctl -D _pg_root query
還可以配置一主兩備,在第三個機器上創建postgres用戶,復制opengauss目錄,配置環境變量,執行gs_basebackup,這與前面配置備庫的過程大致相同,不同點是replconninfoXX參數,一主兩備的架構需要每個庫配置replconninfo1和replconninfo2兩個參數。
例如,主庫的IP為172.32.155.57,兩個備庫的IP為172.32.155.58和172.32.155.59,則三臺機器postgresql.conf中的replconninfo1和replconninfo2設置分別為:
172.32.155.57:
replconninfo1 = 'localhost=172.32.155.57 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.58 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
replconninfo2 = 'localhost=172.32.155.57 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.59 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
172.32.155.58:
replconninfo1 = 'localhost=172.32.155.58 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.57 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
replconninfo2 = 'localhost=172.32.155.58 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.59 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
172.32.155.59:
replconninfo1 = 'localhost=172.32.155.59 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.57 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
replconninfo2 = 'localhost=172.32.155.59 localport=5433 localheartbeatport=5434 localservice=5435 remotehost=172.32.155.58 remoteport=5433 remoteheartbeatport=5434 remoteservice=5435'
3、主備切換
在需要設置為主庫的機器上執行:
gs_ctl switchover -D _pg_root
如果成功,備庫會變為主庫,主庫會變為備庫
查看狀態主備狀態:
gs_ctl -D _pg_root query
4、備升主
當主庫故障時,人為將備庫切換為主庫稱為failover,與swithover的區別是,不會交換主備。在需要升為主庫的機器上執行:
gs_ctl failover -D _pg_root
failover之后是單機的可讀寫的庫。
5、故障庫重新加入
在需要重新加入的機器上,執行:
gs_ctl build -D _pg_root -b auto
它會同步主庫的數據目錄_pg_root并且作為備機啟動。
有個前提,就是故障庫上,原來的_pg_root還在,只是數據陳舊了,如果_pg_root不在了,或是同步失敗,就需要刪除_pg_root,按照前面gs_basebackup的過程走一遍了,即執行gs_basebackup后修改postgresql.conf里的replconninfo1、replconninfo2,再作為standby啟動。
6、參數修改
配置參數在postgresql.conf,訪問控制配置在pg_hba.conf,可以先在主庫修改,然后在備庫上執行:
gs_ctl build -D _pg_root -b auto
這個操作會同步postgresql.conf和pg_hba.conf中的配置(replconninfo1、replconninfo2不會同步)。
否則需要同時手動修改主備庫的postgresql.conf和pg_hba.conf
postgresql.conf中的參數分為sighup類型和postmaster類型,sighup類型參數不需要重啟數據庫實例就可以生效,postmaster類型需要重啟數據庫實例才能生效。
可以用命令 gs_guc修改postgresql.conf 文件,例如,設置參數 audit_enabled:
gs_guc -D _pg_root/ set -c audit_enabled=on
查看參數 audit_enabled:
gs_guc check -D _pg_root/ -c audit_enabled
gs_guc -D _pg_root/ set 只是修改了postgresql.conf,正在運行的openGauss中并沒有生效,對于sighup類型的參數,可以用gs_guc reload 修改并加載:
gs_guc reload -D _pg_root/ -c audit_enabled=on
但是對于postmaster類型的參數,gs_guc reload也不能使之生效,只能重啟openGauss。