博客 / 詳情

返回

VastbaseG100集羣部署實操

背景

近日的工作涉及到數據庫的集羣部署,為了熟悉過程,參考VastgbaseG100官方文檔進行部署。

參考文檔

https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.15/do...

實操

這裏採用HAS+DCS+Vastbase的解決方案,詳情可參考
海量智庫第8期|Vastbase G100核心技術介紹之高可用軟件實現原理

概述

總體包含dcs、vastbase、has的部署,並按照順序依次部署。細節性的東西參考文檔就行,不會描述,更多的是展示部署過程個各個步驟的截圖

信息

IP信息
172.16.19.151~153
172.16.19.154 作為VIP
平台信息
系統:中科方德4.0
處理器:Intel x86

dcs

dcs節點

節點 ip 默認端口 hostname
dcs節點1 172.16.19.151 2379、2380 vb1
dcs節點2 172.16.19.152 2379、2380 vb2
dcs節點2 172.16.19.153 2379、2380 dcs

配置

/etc/hosts

image.png

防火牆

直接關閉
image.png

安裝

為了易於後續刪除,二進制文件放在一個單獨創建的目錄。這裏用/opt/vastdata/dcs存放相關文件

mkdir -p /opt/vastdata/dcs
獲取安裝程序

解壓後將二進制文件放到/opt/vastdata/dcs/bin目錄,並賦予執行權限
image.png

tree -L 2 .

image.png

添加配置文件

添加目錄/opt/vastdata/dcs/etc存放配置文件,創建配置文件dcs.conf;添加目錄data用於存放dcs的數據。
image.png
配置文件

  • 172.16.19.151
    image.png
  • 172.16.19.152
  • 172.16.19.153

其他節點修改ip和節點序號即可。

配置DCS服務

作為系統服務
在dcs目錄創建dcs.service,並建立從系統目錄到這裏的軟鏈接
image.png

創建軟鏈接

ln -sf /opt/vastdata/dcs/dcs.service /usr/lib/systemd/system/dcs.service
配置其他節點

將本機上的配置文件複製到另外兩台機器,並簡單修改。

  • 要改ip和節點編號
  • 軟鏈接別忘了創建
啓動服務
systemctl daemon-reload
systemctl start dcs

# 查看狀態
systemctl status dcs

image.png

image.png

vastbase

第二步部署數據庫(一主一備)172.16.19.151部署主庫,172.16.19.152部署備庫
數據庫版本採用2.2.15

數據庫節點

節點名稱 IP 默認端口
數據庫主節點 172.16.19.151 5432,5433,26001,26002,26003
數據庫備節點 172.16.19.152 5432,5433,26001,26002,26003

安裝數據庫

和dcs放在同級目錄,新建目錄
/opt/vastdata/vastbase
image.png

將目錄權限給數據庫用户(這裏使用vastbase)
chown -R vastbase:vastbase /opt/vastdata/vastbase
安裝

獲取安裝包,按照單機安裝的操作安裝
安裝路徑選擇上述目錄
image.png

查看安裝後目錄
image.png

刪掉omTmp並且取消軟鏈接
image.png

主庫配置
  • postgresql.conf
    在/opt/vastdata/vastbase/data/vastbase/postgresql.conf
    添加以下配置項

    #For Replication
    replication_type = 1
    application_name = 'vb1'
    recovery_max_workers = 1
    password_encryption_type=0
    replconninfo1 = 'localhost=172.16.19.151 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=172.16.19.152 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003'
    wal_level=hot_standby
    hot_standby=on
    vastbase_login_info=false 
    synchronous_commit=off
    synchronous_standby_names = '*'   # * for sync, empty for async
    remote_read_mode='non_authentication'
  • pg_hba.conf
    /opt/vastdata/vastbase/data/vastbase/pg_hba.conf
    添加
    image.png

    啓動主庫
    vb_ctl -M primary start

    創建用户
    image.png

    備庫配置

  • 參考主庫安裝
  • 拷貝主庫配置文件略作修改
  • postgresql.conf

    #For Replication
    replication_type = 1
    application_name = 'vb2'
    recovery_max_workers = 1
    password_encryption_type=0
    replconninfo1 = 'localhost=172.16.19.152 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=172.16.19.151 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003'
    wal_level=hot_standby
    hot_standby=on
    vastbase_login_info=false 
    synchronous_commit=off
    synchronous_standby_names = '*'   # * for sync, empty for async
    remote_read_mode='non_authentication'

    啓動備庫

    vb_ctl build

    使用vb_ctl query查看狀態

    主庫
    image.png
    備庫
    image.png

has

HAS節點

節點名稱 IP 默認端口
HAS1(數據庫主節點) 172.16.19.151 8008
HAS2(數據庫備節點) 172.16.19.152 8008

安裝

和dcs、vastbase放在同一級目錄
/opt/vastdata/has
獲取壓縮包並調整目錄結構
image.png

image.png

配置HAS

配置文件放在/opt/vastdata/has/etc目錄下
這裏命名為vastbase.yml

scope: vastbase_ha_inst                                      # 集羣實例名稱
namespace: /vastbase/                                        # 集羣實例所在的命名空間,默認是/service
name: 'vb1'                                       # 節點在集羣內的名稱,每個節點都必須不一樣,通過hasctl list命令查看高可用集羣狀態時,在Member顯示該名稱

restapi:
  listen: 172.16.19.151:8008                               # has服務監聽的套接字,192.168.100.1為本節點的IP地址,下面的配置信息涉及192.168.100.1均表示本節點IP地址
  connect_address: 172.16.19.152:8008                       # 高可用集羣內,其他節點通過本參數的地址訪問本節點的has服務

etcd:
  hosts: 172.16.19.151:2379,172.16.19.152:2379,172.16.19.153:2379    # dcs地址集

bootstrap:
  dcs:
    ttl: 30                                                     # 持有單個DCS key的最長時間,單位秒,例如主節點持有leader key,如果不能再該時間內更新leader key,那麼可以認為發生failover
    loop_wait: 10                                               # has兩次執行工作之間的時間間隔,單位秒
    retry_timeout: 10                                           # 重試次數
    maximum_lag_on_failover: 1048576                            # 從庫允許被參與選舉主庫,最大的延遲字節數
    synchronous_mode: 'true'                                    # 是否開啓同步模式,開啓後,has會決定哪個節點是同步備庫並覆蓋數據庫配置文件內的synchronous_standby_names參數
    postgresql:
      use_pg_rewind: true                                       # 是否使用rewind,必須開啓
      use_slots: true                                           # 是否使用複製槽,必須開啓
      parameters:                                               # 實驗目的這次不配置該部分
        port: 5432                                              # 非必須

  initdb:
  - encoding: UTF8

  pg_hba:
  - host all vastbase 172.16.19.151/32 trust           # 配置集羣內所有節點的${initdb_user}用户遠程訪問為trust,否則增量build失敗,${initdb_user}為初始化實例的用户,一般與操作系統用户同名;如果是IPV6地址,需要替換IP為IPV6,例如:- host all ${initdb_user} 2001:0:3238:e1:63::133/24 trust   
  - host all vastbase 172.16.19.151/32 trust
  - host all vastbase 172.16.19.152/32 trust
  - host all all 0.0.0.0/0 md5                                # 此行配置必須在最後;如果是IPV6地址,需要替換IP為IPV6,例如:- host all all ::0/0 md5 

postgresql:
  callbacks:
    on_start: /opt/vastdata/has/etc/has_vip.sh     # 回調腳本路徑,一般用於管理VIP
    on_stop: /opt/vastdata/has/etc/has_vip.sh 
    on_role_change: /opt/vastdata/has/etc/has_vip.sh 
  listen: 0.0.0.0:5432
  connect_address: 172.16.19.151:5432
  use_unix_socket: true
  use_extreme_rto: false                                      # 如果開啓極致RTO,該參數必須設置為true,開啓極致RTO後,備機不可讀
  pg_ctl_timeout: 600                                         # 數據庫啓動超時時間,根據實際情況設置
  data_dir: /opt/vastdata/vastbase/data/vastbase                      # 數據庫實例路徑
  config_dir: /opt/vastdata/vastbase/data/vastbase                    # 數據庫實例配置文件路徑
  bin_dir: /opt/vastdata/vastbase/bin                  # 數據庫可執行文件路徑
  vastbase_lib_dir: /opt/vastdata/vastbase/lib://opt/vastdata/vastbase/jre/lib/amd64:/opt/vastdata/vastbase/jre/lib/amd64/server         # 數據庫共享庫路徑 amd64 for x86, aarch64 for arm
  vastbase_home: /opt/vastdata/vastbase                # 數據庫安裝路徑
  authentication:
    replication:
      username: tcpp                     #不能與初始化實例的用户同名
      password: tcpp@123                                     #需提前將用户的密碼修改為本配置項的取值。即本樣例中應在部署has前將vbadmin用户的密碼修改為Vbase@admin。
    superuser:
      username: tcpp                     #不能與初始化實例的用户同名
      password: tcpp@123                                      #需提前將用户的密碼修改為本配置項的取值。即本樣例中應在部署has前將vbadmin用户的密碼修改為Vbase@admin。
  parameters:                                                # 個性化配置部分,以下配置項建議寫到該部分
    application_name: vb1                         # 數據庫節點名稱,建議與第3行的name參數保持一致,否則synchronous_mode開後後不生效,此外,此參數不要寫在bootstrap部分
    archive_mode: on                                         # 是否開啓歸檔,根據實際情況
    archive_command: 'cp %p /data/archive/%f'                # 根據實際情況配置
    archive_dest: '/opt/vastdata/vastbase/data/vastbase/archive'                            # 直接指定歸檔目錄,效率比archive_command高,設置本參數後archive_command參數失效
    unix_socket_directory: '/tmp'
    replconninfo1: 'localhost=172.16.19.151 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=172.16.19.152 remoteport=55434 remoteheartbeatport=55435 remoteservice=55436'

配置HAS服務

添加has.service
目錄層級為
image.png

注意這裏有一個has_env文件,在裏面配置一些環境變量,不然啓動會報錯。這些變量在/home/vastbase/.Vastbase配置了,仍然無法獲取到只能添加這麼個文件

  • has.service
    image.png
  • has.env
    image.png

創建軟鏈接

ln -sf /opt/vastdata/has/has.service /usr/lib/systemd/system/has.service

配置VIP

創建has_vip.sh按照模板修改就行。

啓動HAS

因為用vastbase用户啓動服務,需要將has目錄的owner改為vastbase

systemctl daemon-reload
systemctl start has

查看最終結果

image.png

總結

目錄總體結構

image.png

主要是為了熟悉集羣搭建的步驟,遇到的問題沒有詳細描述了,還有一些細節的操作還是要閲讀官網文檔。遇到的問題主要在HAS配置上,(就是has.env那裏面的環境變量讀不到導致啓動不了。。。)。至於為什麼搞成這個目錄格式呢?因為有個做rpm包的任務,可能安裝之後就長成這個樣,然後可以幫助自己明確最後做出來的rpm包的效果吧。一是目錄效果,二是安裝之後提供怎樣的功能,三是搞完了知道怎麼去驗證做的對不對。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.