Posts

Greenplum 增加連線數目後 系統無法順利啟動

筆者: 歐立威 Hank Greenplum 在四版時,增加過多的 max_connection 至1000 以上時確實會遇見問題 (參考Pivotal KB: "https://discuss.pivotal.io/hc/en-us/articles/201462656-GPDB-startup-initilization-failed-with-could-not-create-semaphores-No-space-left-on-device-"), 筆者在五版時有遇過僅從預設 250 增加至 350 便遇見系統無法正常啟動的狀況, 原因可能是Segment Instance較多導致 semaphores 不足 (OS系統的信號燈,用以管控多執行緒環境共用資源的機制), 但問題解決並不複雜,可透過調整OS參數作解決: 筆者透過將 Greenplum 官方建議值調高成底下值便解決問題,詳細能夠調整至多大,還請詢問系統管理員,預設 Greenplum 群集不會和其他系統共用,測試結果調整至底下值並無其他影響發生。 $ vi /etc/sysctl.conf kernel.sem=32000 1024000000 500 32000 ## kernel.sem={ SEMMSL,  SEMMNS,  SEMOPM,  SEMMNI } 調整完畢後記得檢查OS參數是否正確讀取,以免系統又啟動失效還得修復: $ sysctl -p $ sysctl -a | grep sem kernel.sem = 32000 1024000000 500 32000 底下附上遇見問題時的GPDB LOG訊息: 2017-12-26 17:51:15.565211 CST,,,p17519,th1956788096,,,,0,,,seg-1,,,,,"FATAL","XX000","could not create semaphores: No space left on device (pg_sema.c:129)","Failed system call was semget(40010001, 17, 03600).",&q

Greenplum write out with copy command and read with external table

筆者: 歐立威 Hank Greenplum 可以透過 Postgresql 相同的 copy 指令來匯出所需的資料文字檔, 又或是資料文字檔式從其他的系統上(EX: Oracle)匯出得來, 再介由 Greenplum External Table 的方式匯入資料至 Greenplum, 這樣的操作看似簡單平常, 卻是常常遇到資料檔中有不符合預期的字元而導致資料匯入失敗。 這邊我整理了一些最常遇見問題及大家可能搞混的部分做說明, 便可大大減少在資料匯出匯入時所遇到的問題, 而不需要每次都花時間在解這些煩人的字元剖析問題。 狀況一: copy 指令的功能與語法相當直觀且單純,如下: copy (select * from test) to '/tmp/test.txt'; 若未給參數,則預設為 Text Format 且 delimiter 為 \t (Tab鍵), 但這樣會遇到一個問題,如果有欄位裡的值也有 \t, 則會導致在匯入資料時有剖析錯誤, 所以筆者這邊建議大家資料匯出時必須特別選擇 delimiter,要是資料裡絕對不會出現字元。 狀況二: 通常我們匯出資料的源頭,我們根本不了解資料到底有哪些字元, 常常是花了數小時的資料匯出與匯入才會發現有不預期的字元, 所以我們還有一個方法能夠避免掉萬一有 delimiter 的字元出現在資料內的情形, 那就是 quote 這個參數, 筆者這邊習慣直接使用以下語法: copy (select * from test) to '/tmp/test.txt' CSV ; CSV的格式預設便直接使用 delimiter ',' (逗號)及 quote '"' (雙引號), 所以若資料內有逗號字元時,便可因為有雙引號的 quote 而剖析通過。 狀況三: 倘若有資料內容還是有與 quote 相同的字元呢!? 1. 可以把 quote 改為其他字元如: $, ^ 等不常見字元... 2. 若資料內容甚麼奇怪的字元都有,筆者看來這欄位的資料也是些非結構化的資料, 不差這些字元也是能看出欄位意義,所以可使用取代的指令都把它換掉吧 ( :%s/word1/word2/

MPP Database – Pivotal Greenplum

Image
筆者: 歐立威 Hank 1.     Database 由來 : 資料庫是甚麼 !? 我們為何需要資料庫 !? 相信大家都能說出各家資料庫各式各樣的特色功能,但我想若從 ” 資料庫為我們解決了哪些問題 !?” 的角度切入,我想大家會對資料庫存在的必要性更有感覺。 在沒有資料庫前,資料以檔案的方式存放,甚至沒有電腦前,資料須以紙張的方式存放 … 隨著業務增長,資料量多了起來 ( 資料夾層數越來越多、檔案數越來越多或是紙本越來越多 …) ,最常用的搜尋、更改、刪除等功能 … 我想大家想到這便頭痛了起來 … 所以我們可以很明確的結論出 : “ 資料庫能夠提供我們更方便、省時的方法去組織與管理企業資料。 ” ,有了資料庫,除了基本的查詢、修改、新增、刪除,更有著許多進階功能如去重複、多用戶權限管理、加解密、備份還原、與其它應用的介接能力 … 2.      Database硬體 架構設計 : 隨著企業交易量增長或是大型分析型的資料倉儲的出現,人們發展出不同的架構來解決實務上的問題 ( 圖一 ): a.       Shared-Everything: 起初隨著交易量的增長, CPU 的運算需求增加,最直觀的方法便是在同樣的物理伺服器中放進多個 CPU 單元,多個 CPU 之間無主從關係,而擴充的方式不外乎換上更好的 CPU 或是增加 CPU 數量等 … 共享使得程序間資料交換相當容易,所以 Shared Everything相當適合運用在需要高一致性要求的系統中。 但也由於 Shared Everything 的主要特徵就是共享 ( 共享 Memory, 共享 Disk …) ,當多個 CPU 存取相同資源時必須等待,所以 CPU 數量越多,造成的 CPU 資源浪費也越大, 在擴充上是非常有限的, 最好的 CPU 運用效率約莫在 2~4 個。 b.       Shared-Storage: 由於 Shared Everything 擴充能力上的限制, Shared-Storage 算是人們為了解決此問題下的一個成果,其特徵為將多個 CPU 模塊透過特殊互連模塊組合成一組可擴充的大型系統,每個 CPU 模塊內有數個 CPU 與獨立的 Memo

GPDB DataDomain 備份

筆者: 歐立威 Hank Greenplum 對 DataDomain 有著特別的支持,可透過 gpcrondump 指令做 full backup ,但卻能夠在 DataDomain 上做到 incremental 的備份,省空間且省時間,底下為大家介紹在 GPDB 這端的相關設定與操作。 DD 連線相關設定 : 針對每一台 GPDB 環境上的主機 : 1. vim /etc/hosts    pbdd01 10.75.232.10 2. 確認能 Ping 到 pbdd01               ping pbdd01 3. mount 起 DD ,可查看 DD 上檔案狀態 mount -t nfs –o hard,intr,nfsvers=3,tcp,rsize=32768,wsize=32768 pbdd01:/data/col1/GPDB /backup 4. DD 一次性權限設定 : gpcrondump --ddboost-host pbdd01 --ddboost-user gpddboost --ddboost-backupdir dd_backup 5. 建立相關路徑給予 ID 501 帳號權限 ( 這可能算是一個 gpdb 用 DD 備份的 Bug ,必須給予這個權限才能透過 mount point 存取且順利備份 )  mkdir /backup/prod-1    chown 501:users /backup/prod-1 6. 檢查所需 Library : rpm -qa | grep compat-libstdc    若無則安裝 : yum install compat-libstdcXXXXXX    ( 可先 yum search compat-libstdc 查出 XXXXXX 的 postfix)    ( 需事先有著 RHEL6 的 Repository) 7. 透過自己建立的簡易 DB 做備份測試  gpcrondump -x testdb -z –ddboost -a --noanalyze 到這邊應該能順利備份,中間還是有許多需要與 DataDomain 負責人協調設定的東西,像是網路 ( 建議 1

GPCC 安裝

筆者: 歐立威 Hank Greenplum Command Center (GPCC) 安裝 預先準備 : 1.     一個能夠正常運作的 GPDB 環境 2.     於 Pivotal 官網下載 GPCC 安裝包,版本為 3.0.1 for GPDB 4.3.11 ,網址 : https://network.pivotal.io/products/pivotal-gpdb 3.     了解 GPDB 的基本操作 [ 建立相關帳號、資料庫與設定權限 ] $ su - gpadmin $ source /usr/local/greenplum-db/greenplum_path.sh $ gpperfmon_install --enable --password gpgpveryop --port 5432 $ vi /data/master/gpseg-1/pg_hba.conf (check following three lines is existing) local    gpperfmon   gpmon         md5 host     gpperfmon   gpmon         127.0.0.1/28    md5 host     gpperfmon   gpmon         ::1/128         md5 [ 重啟 GPDB 與驗證 ] $ gpstop -r $ ps -ef | grep gpmmon $ psql gpperfmon -c 'SELECT * FROM system_now;' $ psql gpperfmon [ 若有 S tandby Master ,請複製相關檔案過去 ] $ scp /data/master/gpseg-1/pg_hba.conf smdw:/data/master/gpseg-1/ $ scp ~/.pgpass smdw:~ [ 安裝 GPCC 軟體 ] $ su - $ unzip greenplum-cc-web-3.0.1-LINUX-x86_64.zip $ ./greenplum-cc-web-3.0.1-LINUX.

GPDB 單節點安裝

筆者: 歐立威 Hank 這邊向大家說明如何在自己的虛擬機上做單節點 Greenplum Database (GPDB) 設定與安裝,所使用的版本為 4.3.11: 1.       安裝前準備 : a.       先準備一台裝有 RHEL6.5 的虛擬機,或是有不要的舊電腦也行。 ( 資源建議 : CPU 2~4 cores 以上、 RAM 8 GB 以上、 Disk 空間視你可能需要測試的資料量為主,原則上 30 ~ 50 GB 即足以應付測試語法或各種功能使用了 ) b.      至 Pivotal 官網下載 GPDB 安裝包 ( 需註冊 ) https://network.pivotal.io/products/pivotal-gpdb c.       Optional: 建議放置 RHEL6.5 ISO 檔以建置 Repository ,將來可透過 yum install 安裝許多套件。 2.       作業系統相關設定 ( 需要 root 權限 ): $ vi /etc/selinux/config SELINUX=disabled ## 修改此行參數 $ service iptables stop $ /sbin/chkconfig iptables off $ vi /etc/sysctl.conf ## 修改底下兩行參數 kernel.shmmax = 500000000( 八個零 ) kernel.shmall = 4000000000( 九個零 ) ## 補上底下參數 kernel.shmmni = 4096 kernel.sem = 250 512000 100 2048 kernel.sysrq = 1 kernel.core_uses_pid = 1 kernel.msgmni = 2048 net.ipv4.tcp_syncookies = 1 net.ipv4.ip_forward = 0 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.conf.all.arp_filter = 1 net.ipv4.i