GreenPlum集群搭建安装超详细步骤

本文详细介绍了GPDB数据库的源码编译流程,包括依赖库的配置、编译参数设置、orca静态编译及xerces更新等。同时,针对arm架构提供了性能优化建议,并说明了sigar依赖的安装与带有多种插件的GPDB编译方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码编译配置:

1、进入依赖库目录,拉取代码并编译:

cd gpdir/depends/

  ./configure

make

2、编译代码:

ubuntu: 

         sudo apt-get install libperl-dev libcurl4-openssl-dev

centos:

yum install gcc gcc-c++ flex bison readline-devel bzip2 zlib zlib-devel make cmake git  libzstd libzstd-devel openssl openssl-devel \
          apr-devel apr-util-devel libevent-devel libevent perl-ExtUtils-Embed\
         perl python2 python2-devel libxml2-devel perl-devel libcurl-devel bzip2-devel  -y  && ln -s /usr/bin/python2 /usr/bin/python
LD_LIBRARY_PATH=/gpdb-6.0.0/depends/build/lib ./configure --with-perl --with-python --with-libxml --enable-debug --enable-cassert --disable-gpcloud --disable-gpfdist --with-libraries=/gpdb-6.0.0/depends/build/lib --with-includes=/gpdb-6.0.0/depends/build/include  --without-libbz2 --disable-orca  --with-openssl CFLAGS='-g -O3 -march=native' CXXFLAGS='-g -O3 -march=native'

 静态编译orca:

                 修改src/Makfile.global中#Linking LIBS,增加以下选项:

                   (-Wl,--start-group  -Wl,-Bstatic -lgpopt -lnaucrates -lgpos -lgpcost -Wl,--end-group  -Wl,-Bdynamic )

    icu编码库依赖:    -licutu -licuuc -licudata 

    with-libz2依赖: yum install bzip2-delvel  libzstd libzstd-devel

    修复errrorcode错误:  

 perl src/backend/utils/generate-errcodes.pl src/backend/utils/errcodes.txt > src/backend/utils/errcodes.h
         perl src/pl/plpython/generate-spiexceptions.pl src/backend/utils/errcodes.txt > src/pl/plpython/spiexceptions.h
         perl src/pl/plpgsql/src/generate-plerrcodes.pl src/backend/utils/errcodes.txt > src/pl/plpgsql/src/plerrcodes.h

   debug:  CFLAG添加:-fsanitize=leak -fsanitize=address -static-libasan

                   (调试时设置export ASAN_OPTIONS=halt_on_error=0)

  update xerces及orca:

    

#xerces
./configure 

make DESTDIR=/xerces install

#gporca 

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/gporca \
-D XERCES_INCLUDE_DIR=/xerces/include \
-D XERCES_LIBRARY=/xerces/lib/libxerces-c.so ../
make -j 32
make install

备注:

arm下编译gporca时修改代码:src/backend/gporca/libgpos/include/gpos/utils.h

替换:

#define GPOS_ASMFP asm volatile("movq %%rbp, %0" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("movq %%rsp, %0" : "=g"(ulp));

为:

#if (GPOS_i386 || GPOS_i686 || GPOS_x86_64) && (GPOS_32BIT)
#define GPOS_ASMFP asm volatile("movl %%ebp, %0" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("movl %%esp, %0" : "=g"(ulp));

#elif (GPOS_i386 || GPOS_i686 || GPOS_x86_64) && (GPOS_64BIT)
#define GPOS_ASMFP asm volatile("movq %%rbp, %0" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("movq %%rsp, %0" : "=g"(ulp));

#elif (GPOS_aarch64) && (GPOS_64BIT)
#define GPOS_ASMFP asm volatile("mov %0, fp" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("mov %0, sp" : "=g"(ulp));

#elif (GPOS_sparc) && (GPOS_32BIT)
#define GPOS_ASMFP asm volatile("st %%fp, %0" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("st %%sp, %0" : "=g"(ulp));

#elif (GPOS_sparc) && (GPOS_64BIT)
#define GPOS_ASMFP asm volatile("stx %%fp, %0" : "=g"(ulp));
#define GPOS_ASMSP asm volatile("stx %%sp, %0" : "=g"(ulp));

#endif


 

arm架构性能优化:

修改 src/include/storage/s_lock.h:

#if defined(__aarch64__) || defined(__aarch64)
#ifdef HAVE_GCC_INT_ATOMICS
#define HAS_TEST_AND_SET

#define TAS(lock) tas(lock)

typedef int slock_t;

static __inline__ int CompareAndSwap(volatile slock_t* ptr, int old_value, int new_value)
{
	int prev;
	int temp;
	__asm__ __volatile__ (
		"0: \n\t"
		"ldaxr %w[prev], %[ptr] \n\t"
		"cmp %w[prev], %w[old_value] \n\t"
		"bne 1f \n\t"
		"stlxr %w[temp], %w[new_value], %[ptr] \n\t"
		"cbnz %w[temp], 0b \n\t"
		"1: \n\t"
		: [prev]"=&r" (prev),
		[temp]"=&r" (temp),
		[ptr]"+Q" (*ptr)
		: [old_value]"IJr" (old_value),
		[new_value]"r" (new_value)
		: "cc", "memory"
	);
	return prev;
}

static __inline__ int
tas(volatile slock_t *lock)
{
	return CompareAndSwap(lock, 0, 1);
	//return __sync_lock_test_and_set(lock, 1);
}

#define S_UNLOCK(lock) __sync_lock_release(lock)

#endif	 /* HAVE_GCC_INT_ATOMICS */
#endif	 /* __aarch64__ */

  安装sigar依赖:

# git clone https://github.com/boundary/sigar 
# cd sigar 
# mkdir build && cd build && cmake .. && make && make install

编译带各种插件的gp:

./configure --with-python --with-libxml --enable-gpperfmon --disable-gpcloud --enable-gpfdist --enable-orca  --with-openssl \
              CFLAGS='-I/usr/lib64/perl5/CORE -DGPOS_x86_64=1 -DGPOS_64BIT=1 -g -O2' CXXFLAGS='-DGPOS_x86_64=1 -DGPOS_64BIT=1 -g -O2'
         make   -j
         make DESTDIR=/release install

部署:

1) Set RemoveIPC=no in /etc/systemd/logind.conf

2) Reboot the server or restart systemd-logind as follows:
    # systemctl daemon-reload
    # systemctl restart systemd-logind

   初始化db:

           gpinitsystem  -c rb_config -e gpadmin
 

  环境变量设置:

export MASTER_DATA_DIRECTORY=/data/zhangqiang/gp-data/gp-1
export PGDATA=$MASTER_DATA_DIRECTORY
export GPPORT=5434
export PGUSER=gpadmin
export PGPASSWORD=gpadmin
export PGDATABASE=postgres
export PGHOST=xx.x.x.x
export PGPORT=5434
 

3)参数配置:

gpconfig -c max_connections -v 500 -m 400  
gpconfig -c shared_buffers -v '1GB'  
gpconfig -c max_prepared_transactions -v '1500'  
gpconfig -c max_stack_depth -v '4MB'  
gpconfig -c vacuum_cost_delay -v '0'  
gpconfig -c synchronous_commit -v 'off'  
gpconfig -c wal_buffers -v '16MB'  
gpconfig -c wal_writer_delay -v '10ms'  
gpconfig -c checkpoint_segments -v '128' --skipvalidation  
gpconfig -c random_page_cost -v '1.3'  
gpconfig -c log_statement -v 'ddl'  
gpconfig -c vacuum_freeze_table_age -v '1200000000'  
gpconfig -c autovacuum_freeze_max_age -v '1300000000' --skipvalidation  
gpconfig -c autovacuum_vacuum_cost_delay -v '0' --skipvalidation  
gpconfig -c autovacuum -v 'on' --skipvalidation  

对于小内存实例,需要配置:

gpconfig -c gp_vmem_protect_limit -v 1024
gpconfig -c logging_collector -v off
gpconfig -c statement_mem -v 8MB
# 可选 gpconfig -c gp_resqueue_memory_policy -v auto
gpconfig -c max_statement_mem -v 128MB
gpconfig -c max_connections -v 60 -m 20;
gpstop -r -M fast -a
gpconfig -s gp_vmem_protect_limit
gpconfig -s logging_collector 
gpconfig -s gp_resqueue_memory_policy
gpconfig -s statement_mem 
gpconfig -s max_statement_mem 
gpconfig -s max_connections

4)重启:

gpstop -M fast -a  
  
gpstart -a  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值