greenplum集群部署及运维

一 节点规划

Ip

Hostname

192.168.1.97

mdw

192.168.1.98

sdw4

192.168.1.99

sdw1

192.168.1.101

smdw

192.168.1.105

sdw3

192.168.1.106

sdw2

二 系统环境配置

GP数据库安装前需要的依赖包

yum -y install apr apr-util openssh openssh-clients openssh-server

修改/etc/hosts

192.168.1.97  mdw

192.168.1.98  smdw

192.168.1.99  sdw1

192.168.1.106  sdw2

修改主机名

hostnamectl set-hostname mdw

hostnamectl set-hostname smdw

hostnamectl set-hostname sdw1

hostnamectl set-hostname sdw2

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

systemctl status firewalld

修改/etc/selinux/config

sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

修改内核文件/etc/sysctl.conf

vm.swappiness=10

kernel.shmall = 68719476736

kernel.shmmax = 4294967296

kernel.shmmni = 4096

vm.overcommit_memory = 2

vm.overcommit_ratio = 95

net.ipv4.ip_local_port_range = 10000 65535

kernel.sem = 500 2048000 200 40960

kernel.sysrq = 1

kernel.core_uses_pid = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.msgmni = 2048

net.ipv4.tcp_syncookies = 1

net.ipv4.conf.default.accept_source_route = 0

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.conf.all.arp_filter = 1

net.core.netdev_max_backlog = 10000

net.core.rmem_max = 2097152

net.core.wmem_max = 2097152

vm.zone_reclaim_mode = 0

vm.dirty_expire_centisecs = 500

vm.dirty_writeback_centisecs = 100

vm.dirty_background_ratio = 3

vm.dirty_ratio = 10

vm.dirty_background_bytes = 1610612736

vm.dirty_bytes = 4294967296

修改/etc/security/limits.conf

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

------------操作系统一定要设置swap交换内存

设置gpadmin用户组及账号

groupdel gpadmin

userdel gpadmin

groupadd -g 530 gpadmin

useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin

chown -R gpadmin:gpadmin /home/gpadmin/

passwd gpadmin

Inspur@#2023

gp安装(所有节点)

yum install ./open-source-greenplum-db-6.23.3-rhel7-x86_64.rpm

chown -R gpadmin:gpadmin /usr/local/greenplum*

chown -R gpadmin:gpadmin /home/admin/gpdata

============hostlist、seg_hosts

cd /home/gpadmin/conf

[gpadmin@gp_mdw conf]$ more hostlist

mdw

smdw

sdw1

sdw2

[gpadmin@gp_mdw conf]$ more seg_hosts

sdw1

sdw2

Inspur@#2023

============ssh免密(所有节点)

ssh-keygen -t rsa

master

cd  ~

ssh-copy-id smdw

ssh-copy-id sdw1

ssh-copy-id sdw2

standby master

ssh-copy-id mdw

ssh-copy-id sdw1

ssh-copy-id sdw2

#segment1机器输入

ssh-copy-id mdw

ssh-copy-id smdw

ssh-copy-id sdw2

#segment2机器输入

ssh-copy-id mdw

ssh-copy-id smdw

ssh-copy-id sdw1

source /usr/local/greenplum-db/greenplum_path.sh

gpssh-exkeys -f /home/gpadmin/conf/hostlist

gpssh -f /home/gpadmin/conf/hostlist

==================================创建目录

mkdir -p /home/admin/gpdata/gpmaster

mkdir -p /home/admin/gpdata/gpdatap1

mkdir -p /home/admin/gpdata/gpdatap2

mkdir -p /home/admin/gpdata/gpdatam1

mkdir -p /home/admin/gpdata/gpdatam2

================================gpadmin环境变量设置  (master,standby都设置)

source /usr/local/greenplum-db/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1

export PGPORT=2345

export PGDATABASE=testdb

================================初始化数据库配置文件

vi initgp_config

# 数据库的代号

ARRAY_NAME="Greenplum"

MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts

#Segment的名称前缀

SEG_PREFIX=gpseg

#Primary Segment起始的端口号

PORT_BASE=33000

#指定PrimarySegment的数据目录

declare -a DATA_DIRECTORY=(/home/admin/gpdata/gpdatap1 /home/admin/gpdata/gpdatap2)

#Master所在机器的Hostname

MASTER_HOSTNAME=mdw

#指定Master的数据目录

MASTER_DIRECTORY=/home/admin/gpdata/gpmaster

#Master的端口

MASTER_PORT=2345

#指定Bash的版本

TRUSTED_SHELL=/usr/bin/ssh

#字符集ENCODINGUNICODE

#Mirror Seqment 起始的端口号

MIRROR_PORT_BASE=43000

#PrimarySegment主备同步的起始端口号

REPLICATION_PORT_BASE=34000

#Mirror Segment主备同步的起始端口号

MIRROR_REPLICATION_PORT_BASE=44000

#Mirror Segment的数据目录

declare -a MIRROR_DATA_DIRECTORY=(/home/admin/gpdata/gpdatam1 /home/admin/gpdata/gpdatam2)

================================

网络测试:

gpcheckperf -d 目录 upload -r N -f 主机列表文件

文件系统性能验证:

gpcheckperf -d 目录1 -d 目录2 upload -r ds -D -f 主机列表文件

================================初始化数据库

gpinitsystem -c /home/gpadmin/conf/initgp_config -h /home/gpadmin/conf/seg_hosts

================================将standby加入集群

gpinitstandby -s smdw

================================将standby删除

gpinitstandby -r smdw

三 segment节点扩展

横向扩展(开启了mirror,每次最少扩2个机器)

新的机器基础配置和其他一样

more seg_new

sdw3

sdw4

gpexpand -f seg_new

会生成配置文件

gpexpand -i gpexpand_inputfile_20230330_162241

gpexpand -i gpexpand_inputfile_20230330_162241.ts

查看数据库的节点状态

SELECT * from gp_segment_configuration ;

执行表重分布

gpexpand -a -d

进入数据库查看重分布状态

select * from gpexpand.status;

退出扩展

gpexpand -c

纵向扩容:

每个数据几点增加计算segment

gpssh -f /home/gpadmin/conf/seg_hosts

mkdir -p /home/admin/gpdata/gpdatap3

mkdir -p /home/admin/gpdata/gpdatap4

mkdir -p /home/admin/gpdata/gpdatap5

mkdir -p /home/admin/gpdata/gpdatap6

mkdir -p /home/admin/gpdata/gpdatap7

mkdir -p /home/admin/gpdata/gpdatap8

mkdir -p /home/admin/gpdata/gpdatam3

mkdir -p /home/admin/gpdata/gpdatam4

mkdir -p /home/admin/gpdata/gpdatam5

mkdir -p /home/admin/gpdata/gpdatam6

mkdir -p /home/admin/gpdata/gpdatam7

mkdir -p /home/admin/gpdata/gpdatam8

生成配置文件

gpexpand -f seg_hosts

在线扩容节点

gpexpand -i gpexpand_inputfile_20230330_162241

gpexpand -i gpexpand_inputfile_20230330_162241.ts

查看数据库的节点状态

SELECT * from gp_segment_configuration;

执行表重分布

gpexpand -a -d

进入数据库查看重分布状态

select * from gpexpand.status;

退出扩展

gpexpand -c

mkdir -p /home/admin/gpdata/platform_tblspc

mkdir -p /home/admin/gpdata/ehr_tblspc

扩展之后的架构

每个数据节点8p+8m

四 基本使用

psql -d postgres

\password postgres

createdb testdb -E utf-8

数据库集群启停

#快速重启数据库,先停库再启动速度较快

gpstop -M fast

gpstart

#直接重启,速度较慢

gpstop -r

#修复节点

gprecoverseg

#平衡修复好的节点

gprecoverseg -r

重新加载文件

gpstop -u

有极端情况数据库无法停止的时候,需要手动杀进程才能完成停库(非极端情况不要使用)

ps -ef | grep gpadmin | grep postgres | awk '{print "kill -9 "$2}'

基础创建和查询命令

--创建用户

create role dbdream password 'Dbdream#@2023' createdb login;

CREATE ROLE kanon PASSWORD 'kanon' LOGIN;

---等同于

CREATE USER kanon PASSWORD 'kanon';

--创建数据库

CREATE DATABASE <new_dbname>;

CREATE DATABASE testDB;

--数据库创建时相对完整的语法应该是

CREATE DATABASE platform_dc OWNER dbdream TABLESPACE platform_dc;

--克隆数据库

CREATE DATABASE <new_dbname> TEMPLATE <old_dbname>;

--查询所有数据库

SELECT datname from pg_database;

SELECT * from pg_database;

--删除数据库

DROP DATABASE testDB;

--查询现有连接

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='ehr' AND pid<>pg_backend_pid();

为空才能正常删除数据库

--表空间创建

mkdir -p /home/admin/gpdata/platform_tblspc

CREATE TABLESPACE platform_dc LOCATION '/home/admin/gpdata/platform_tblspc';

GRANT CREATE ON TABLESPACE platform_dc TO dbdream;

--删除表空间

DROP TABLESPACE ehr;

--查看表空间信息

SELECT oid, * FROM pg_tablespace

--查看表空间系统位置

SELECT * FROM gp_tablespace_location(16402);

--显示段实例信息以及表空间的文件系统位置

WITH spc AS (SELECT * FROM  gp_tablespace_location(16402))

  SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc

    FROM spc, gp_segment_configuration AS seg

    WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;

       

模式创建(Schema)

官方建议:在管理员创建一个具体数据库后,应该为所有可以连接到该数据库的用户分别创建一个与用户名相同的模式,

然后,将search_path设置为"$user"(即缺省模式为与用户名相同的模式),

这样,任何当某个用户连接上来后,会默认将查找或者定义的对象都定位到与之同名的模式中。这是一个好的设计架构

CREATE SCHEMA ehr;

创建一个由其他人拥有的模式

CREATE SCHEMA dbdream AUTHORIZATION dbdream;

授权

grant all on schema dbdream to dbdream;

设置模式顺序

ALTER ROLE sally SET search_path TO ehr, public, pg_catalog;

查询当前模式

SELECT current_schema();

显示当前搜索顺序

SHOW search_path;

删除模式

DROP SCHEMA ehr CASCADE;

greenplum数据库、模式、表空间、role的含义与关系

--role

在GP中是通过role来控制数据库的访问权限

role包含两个概念一个是user一个是group。

两者的创建方式没有明显的区别,主要是看创建者的使用方式以及赋予权限。

一个role可以成为其他role的父类使其子类拥有本身的权限,也可以成为任意role的子类拥有其父类的权限。

--模式(schema)

什么是模式?

greenplum中的模式指的是schema,可以在数据库中创建多个模式来管理同名表,通过"模式名.表名"的方式。

数据库中默认有一个public模式,如果在创建对象时不指定模式名,这个对象的默认模式就是public。比如建表的完整语句create table public.t1。查询表也是一样如select * from public.t1,如果不加模式名将会以当前登录的用户名做隐含访问。

一个集群中有会有多个数据库,如果做一个关系的总结应该是“gp集群” > databases > schema > object。

为什么需要模式

1方便用户的管理:用户可以在集群中创建不同模式名同表名的对象。

2把需要使用的多个对象变为一个模式,方便使用。

--表空间

什么是表空间?

表空间是实际的数据存储的地方。用来存放数据库对象物理文件的位置

表空间的作用:

通过表空间dba可以优化集群磁盘的使用,提高业务效率,比如,可以在读写效率比较高的磁盘上建立表空间将常用的数据放在上面。将不常用的数据放在读写效率低的磁盘上。

--表空间与数据库的关系

与模式相同的是,greenplum数据库同样有默认的表空间pg_default。在gp中数据库的创建通过克隆默认的数据库模板template1来创建,template1数据库的默认模板就是pg_default。

在物理环境中表空间的表达方式就是一个目录,里面存储的是它所包含的数据库的各种物理文件。

--表空间、数据库、角色、模式及表之间的关系

简单的说表空间就是目录,是databases中对象在物理存储上的位置,databases就是object的集合,而schema就是用来管理object的方式

role则是用来管理数据库object的权限的系统,role可以登录任意的databases只需要拥有其权限。一般role会有一个默认登陆的databases在pg_hba文件中配置。

gp数据库查询表的分布键

SELECT

        aaa.oid,

        aaa.nspname AS "模式名",

        aaa.relname AS "表名",

        aaa.table_comment AS "中文表名",

        ccc.attname AS "分布键"

FROM

        (

SELECT

        aa.oid,

        aa.relname,

        obj_description ( aa.oid ) AS table_comment,

        bb.localoid,

        bb.distkey,

        regexp_split_to_table( array_to_string( bb.distkey, ' ' ), ' ' ) att,

        dd.nspname

FROM

        pg_class aa

        LEFT JOIN pg_catalog.gp_distribution_policy bb ON bb.localoid = aa.oid

        LEFT JOIN pg_namespace dd ON dd.oid = aa.relnamespace --模式

        LEFT JOIN pg_inherits hh ON aa.oid = hh.inhrelid --继承表

WHERE

        dd.nspname = 'public' -- 替换成需要的模式schema

        AND hh.inhrelid IS NULL

        ) aaa

        LEFT JOIN pg_attribute ccc ON ccc.attrelid = aaa.oid

        AND CAST ( ccc.attnum AS TEXT ) = aaa.att

WHERE

        ccc.attnum > 0

--AND aaa.relname = 'opn_label_factory_user_group' --需要查询的表名

----查看表数据的分布情况,是否均匀

select gp_segment_id,count(*) from 表名称 group by gp_segment_id order by count(*) desc

----重新设置表的分布键语句

ALTER TABLE cehr_active_patient SET distributed by (org_code,event_no);

分区表创建举例sql

按年分区sql:

create table lineitem_partition (   

    l_orderkey    bigint not null,       

    l_partkey     integer not null,   

    l_suppkey     integer not null,   

    l_linenumber  integer not null,   

    l_quantity    DECIMAL(15,2) not null,   

    l_extendedprice  DECIMAL(15,2) not null,   

    l_discount    DECIMAL(15,2) not null,   

    l_tax         DECIMAL(15,2) not null,   

    l_returnflag  char(1) not null,   

    l_linestatus  char(1) not null,   

    l_shipdate    date not null,   

    l_commitdate  date not null,   

    l_receiptdate date not null,   

    l_shipinstruct char(25) not null,  

    l_shipmode     char(10) not null,   

    l_comment      varchar(44) not null)

with (appendonly=true, orientation=column)

distributed by (l_orderkey) partition by range(l_shipdate)(

        PARTITION p1992 START ('1992-01-01'::date) inclusive END ('1993-01-01'::date) exclusive,

    PARTITION p1993 START ('1993-01-01'::date) inclusive END ('1994-01-01'::date) exclusive,

    PARTITION p1994 START ('1994-01-01'::date) inclusive END ('1995-01-01'::date) exclusive,

    PARTITION p1995 START ('1995-01-01'::date) inclusive END ('1996-01-01'::date) exclusive,

    PARTITION p1996 START ('1996-01-01'::date) inclusive END ('1997-01-01'::date) exclusive,

    PARTITION p1997 START ('1997-01-01'::date) inclusive END ('1998-01-01'::date) exclusive,

    PARTITION p1998 START ('1998-01-01'::date) inclusive END ('1999-01-01'::date) inclusive

); ```

--------------------------------------------------------------------------------------------------------

``` 按月分区sql:

create table lineitem_partition_month (       

        l_orderkey    bigint not null,           

        l_partkey     integer not null,      

        l_suppkey     integer not null,      

        l_linenumber  integer not null,       

        l_quantity    DECIMAL(15,2) not null,         

        l_extendedprice  DECIMAL(15,2) not null,       

        l_discount    DECIMAL(15,2) not null,       

        l_tax         DECIMAL(15,2) not null,       

        l_returnflag  char(1) not null,       

        l_linestatus  char(1) not null,       

        l_shipdate    date not null,       

        l_commitdate  date not null,       

        l_receiptdate date not null,       

        l_shipinstruct char(25) not null,      

        l_shipmode     char(10) not null,       

        l_comment      varchar(44) not null

)with (appendonly=true, orientation=column)

  distributed by (l_orderkey)

  partition by range(l_shipdate)(   

        PARTITION p_ START ('1992-01-01'::date) inclusive

                              END ('1999-01-01'::date) exclusive

                                           every ('1 month'::interval)));

--------------------------------------------------------------------------------------------------------

按年分区

create table lineitem (   

    l_orderkey    bigint not null,       

    l_partkey     integer not null,   

    l_suppkey     integer not null,   

    l_linenumber  integer not null,   

    l_quantity    DECIMAL(15,2) not null,   

    l_extendedprice  DECIMAL(15,2) not null,   

    l_discount    DECIMAL(15,2) not null,   

    l_tax         DECIMAL(15,2) not null,   

    l_returnflag  char(1) not null,   

    l_linestatus  char(1) not null,   

    l_shipdate    date not null,   

    l_commitdate  date not null,   

    l_receiptdate date not null,   

    l_shipinstruct char(25) not null,  

    l_shipmode     char(10) not null,   

    l_comment      varchar(44) not null)

with (appendonly=true, orientation=column)

distributed by (l_orderkey) partition by range(l_shipdate)(

        PARTITION p1992 START ('1992-01-01'::date) inclusive END ('1993-01-01'::date) exclusive,

    PARTITION p1993 START ('1993-01-01'::date) inclusive END ('1994-01-01'::date) exclusive,

    PARTITION p1994 START ('1994-01-01'::date) inclusive END ('1995-01-01'::date) exclusive,

    PARTITION p1995 START ('1995-01-01'::date) inclusive END ('1996-01-01'::date) exclusive,

    PARTITION p1996 START ('1996-01-01'::date) inclusive END ('1997-01-01'::date) exclusive,

    PARTITION p1997 START ('1997-01-01'::date) inclusive END ('1998-01-01'::date) exclusive,

    PARTITION p1998 START ('1998-01-01'::date) inclusive END ('1999-01-01'::date) inclusive

);

按月分区sql:

create table lineitem (       

        l_orderkey    bigint not null,           

        l_partkey     integer not null,      

        l_suppkey     integer not null,      

        l_linenumber  integer not null,       

        l_quantity    DECIMAL(15,2) not null,         

        l_extendedprice  DECIMAL(15,2) not null,       

        l_discount    DECIMAL(15,2) not null,       

        l_tax         DECIMAL(15,2) not null,       

        l_returnflag  char(1) not null,       

        l_linestatus  char(1) not null,       

        l_shipdate    date not null,       

        l_commitdate  date not null,       

        l_receiptdate date not null,       

        l_shipinstruct char(25) not null,      

        l_shipmode     char(10) not null,       

        l_comment      varchar(44) not null

)with (appendonly=true, orientation=column)

  distributed by (l_orderkey)

  partition by range(l_shipdate)(   

        PARTITION p_ START ('1992-01-01'::date) inclusive

                              END ('1999-01-01'::date) exclusive

                                           every ('1 month'::interval));

                                           

-----查询数据节点磁盘空间使用情况

SELECT * FROM gp_toolkit.gp_disk_free ORDER BY dfsegment;

五 greenplum集群参数调优记录

gp配置参数调整

gpconfig -c max_connections -v 2500 -m 500         ###segment为master的5-10倍

gpconfig -c max_prepared_transactions -v 500       ###和master的max_connections参数配置一致

gpconfig -c shared_buffers -v 16384MB              ###至少>max_connections*16k

gpconfig -c gp_vmem_protect_limit -v 21688         ###为在每个segment数据库中完成的所有 工作分配的最大内存

    gp_vmem(Greenplum数据库可用的主机内存):

    gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7

            = (630 -(7.5+0.05*630))/1.7 = 347G           

    max_acting_primary_segments = 8+8个容错的primary=16

    gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments= 347G/16=21688MB

                                                 

                                                 

gpconfig -c statement_mem -v 650MB               ###statement_mem服务器配置参数是分配给segment数据库中任何单个查询的内存量

   

        statement_mem =((gp_vmem_protect_limit * .9) / max_expected_concurrent_queries)

              = 21688*0.9/30 =650MB

                          

                          

gpconfig -c effective_cache_size -v 256GB            # (物理内存一半),设置有关Postgres查询优化器(计划程序)的单个查询可用的磁盘高速缓存的有效大小的假设,估算使用指数的成本的因素; 较高的值使得更有可能使用索引扫描,较低的值使得更有可能使用顺序扫描

gpconfig -c work_mem -v 25600MB                      #设置每个segment内存排序的大小,先测试为系统总内存的5%=5%*500=25G=25.6*1000=25600MB

gpconfig -c temp_buffers -v 8MB                      #默认1024,以允许每个数据库会话使用临时缓冲区。 这些是仅用于访问临时表的会话本地缓冲区

gpconfig -c gp_hashjoin_tuples_per_bucket -v 5       #默认5,设置HashJoin操作使用的哈希表的目标密度。 较小的值往往会产生较大的哈希表,这可以提高连接性能

gpconfig -c gp_interconnect_setup_timeout -v 2h      #默认2h,指定在超时之前等待Greenplum数据库interconnect完成设置的时间

gpconfig -c max_statement_mem -v 8192MB              #2000M,设置查询的最大内存限制

gpconfig -c maintenance_work_mem -v 12GB             #默认16MB,指定要在维护操作中使用的最大内存量,例如VACUUM和CREATE INDEX。指定要在维护操作中使用的最大内存量,例如VACUUM和CREATE INDEX。

gpconfig -c gp_enable_global_deadlock_detector -v on ##控制是否开启全局死锁检测功能,打开它才可以支持并发更新/删除操作;

gpconfig -c random_page_cost -v 10                   ##将随机访问代价开销调小,有利于查询走索引。

gpconfig -c wal_buffers -v 256MB                     ##将WAL日志缓存调大。修改该参数需要重启实例

gpconfig -c log_statement -v ddl

磁盘和I/O

#配置readhead,减少磁盘的寻道次数和应用程序的I/O等待时间,提升磁盘读I/O性能

blockdev预读尺寸应该被设置为16384

/sbin/blockdev --setra 16384 /dev/sdb

查看

/sbin/blockdev --getra /dev/sdb

配置IO调度,deadline更适用于Greenplum数据库场景

echo deadline > /sys/block/dfa/queue/scheduler

六 greenplum备份恢复

备份恢复工具安装

上传压缩包greenplum_backup_restore-1.28.1-rhel7.tar.gz到/usr/local/greenplum-db解压

#tar -xzvf greenplum_backup_restore-1.28.1-rhel7.tar.gz

检查

#gpbackup --version

gpbackup version 1.28.1

备份操作

全备命令 master执行

#gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup

增备

gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup --leaf-partition-data

gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup --leaf-partition-data --incremental

注:

先执行全量备份,再执行增量备份,增量备份所使用的基础备份,必须也带有 --leaf-partition-data 参数

全量+增量恢复:master执行

gprestore --backup-dir=/home/admin/gpbackup --timestamp=20230601165333 --create-db

备份管理

查看备份

#gpbackup_manager list-backups

删除无效备份

#gpbackup_manager delete-backup 20230601165333

Pg_dump备份

pg_dump -v -F c -f /home/admin/backup/empi.dmp -C -E UTF8 -h mdw empi

七 gcopy数据迁移实践

Gp1集群和gp2集群都安装

master节点安装

tar -zxvf gpcopy-2.3.1.tar.gz

cd gpcopy-2.3.1/

cp gpcopy /usr/local/greenplum-db/bin/bin/

cp gpcopy_helper /usr/local/greenplum-db/bin/bin/

chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy

chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy_helper

Segment节点安装

gpscp -f /home/gpadmin/conf/seglist ./gpcopy_helper =:/usr/local/greenplum-db/bin/bin

gpssh -f /home/gpadmin/conf/seglist

=> chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy_helper

=> exit

配置集群1和集群2主节点的免密:

1、在pg_hba.conf文件中 host all gpadmin ip/32 trust

2gpstop -u 刷新配置

迁移命令

全部元对象--不包含数据

gpcopy --dest-host 11.145.12.17 --dest-port 2345 --dest-user gpadmin --source-host 11.145.9.182 --source-port 2345 --source-user gpadmin --full --skip-existing --metadata-only

单个数据库

gpcopy --dest-host 11.145.12.17 --dest-port 2345 --dest-user gpadmin --source-host 11.145.9.182 --source-port 2345 --source-user gpadmin --dbname supervision --dest-dbname supervision --skip-existing

八 greenplum-cc-web监控安装使用

创建安装文件夹

#mkdir -p /usr/local/greenplum-cc-6.8.4

#chown -R gpadmin:gpadmin /usr/local/greenplum-cc-6.8.4

安装

#unzip greenplum-cc-web-6.8.4-gp6-rhel7-x86_64.zip

#mv greenplum-cc-web-6.8.4-gp6-rhel7-x86_64 greenplum-cc-web

#cd greenplum-cc-web

#./gpccinstall-6.8.4

#等待安装完毕之后,添加环境变量

#echo "source /usr/local/greenplum-cc-6.8.4/gpcc_path.sh" >> /home/gpadmin/.bash_profile

启动之前的问题处理:

#cd /usr/local/greenplum-cc-6.8.4/gppkg/

安装和gp版本最相近的插件

#gppkg -i MetricsCollector-6.8.4_gp_6.23.0-rhel7-x86_64.gppkg

修改数据库参数配置

gpconfig -c shared_preload_libraries -v metrics_collector

gpconfig -c  gp_enable_query_metrics -v on

重启数据库

gpstop

Gpstart

启动GPCC

#gpcc start

前端登录

http://ip:28080

九 日常维护

数据库角色权限管理

属性

login 权限:只有具有Login属性的角色才能被用于数据库连接,其中 create user 默认有login属性,而create role 则没有login属性。

Superuser权限:创建一个超级用户 create role name superuser。

database creation: 创建数据库的权限。create role name createdb。

role creation: 创建角色的权限。create role name createrole。

password: 创建认证口令的权限。create role name password 'xxx'。

示例语句

create role user_center password 'userCenter@z2023' createdb login;

修改用户名

alter role user_center password 'userCenter@z2023' rename 新名称

对象权限

在表、视图、序列、数据库、函数、语言、空间等对象被创建时,会被指派一个拥有者。如果想其他角色拥有和拥有者一样操作这些对象,需要赋予一定的对象权限。需要注意的是以上权限必须为每一个对象单独授权。如 在一个数据上授予all 权限,不代表完全的权限,仅代表 connect、create 、temporary 权限

对象

权限

表、序列、视图

select 、insert 、update、delete、rule、all

外部表

select、rule、all

数据库

connect、create、temporary|temp、all

函数

execute

语言

usage

方案

create、usage、all

表锁会话处理

----查询锁进程

select * from pg_stat_activity;     ----查看用户会话

select sess_id,pid,usename,application_name,state from pg_stat_activity;

通过查看state字段,找到进程处于idle in transaction的状态的pid

---处理表锁

# 取消后台操作,回滚未提交事务

select pg_cancel_backend(pid);

# 中断session,回滚未提交事务

select pg_terminate_backend(pid);

---操作系统层面

ps -ef |grep -i postgres |grep -i con     ###每个连接对应一个进程

kill -9 杀掉对应连接进程

  1. 查看数据库,表占用空间

函数

说明

pg_database_size(‘ehr’)

数据库大小,不计算索引

pg_total_size(‘ehr’)

数据库大小,包含索引

pg_indexes_size(‘表名’)

表中索引大小

pg_relation_size(‘表名’)

表大小,不包括索引

pg_total_relation_size(‘表名’)

表大小,包括索引

pg_tablespace_size(‘表名’)

表空间大小

select pg_size_pretty(pg_database_size('ehr'));

select pg_size_pretty(pg_relation_size('ehr'));

  1. 清理数据库

vacuum:该选项主要是清理数据库表中的垃圾空间

analyze

--检查查看表膨胀:select * from gp_toolkit.gp_bloat_diag order by bdirelpages desc ; 

--设置语句超时时间:set statement_timeout=0; 

 (0表示语句执行不会超时,数据库已经设置语句超时15分钟)

-- 执行vacuum命令:VACUUM pg_catalog.pg_attribute; 

重建索引:reindex table pg_catalog.pg_attribute;  (vacuum会导致索引失效,需要重建)

--服务器端执行命令实例:

vacuumdb --analyze --verbose --table 'qmjkxxptempi.cehr_patient_pool' qmjkxxptempi

vacuumdb --analyze --verbose --table 'schema.cehr_patient_pool' databasename

  1. 数据倾斜处理

---查询数据倾斜厉害的表

select * from gp_toolkit.gp_skew_idle_fractions;

--然后根据业务情况重新设定分布键

ALTER TABLE cehr_card_kf_1 SET distributed by (empi,card_no,org_code);

  1. pg_log日志定时清理查看

命令##gplogfilter --help

对应目录pg_log日志需要定期清理

故障处理记录

gp集群无法启动:

第一步:查询master节点日志:/home/admin/gpdata/gpmaster/gpseg-1/pg_log/下最新日志,发现有宿主机网络不通。

第二步:启动有报错警告

[WARNING]:-Skipping startup of segment marked down in configuration: on sdw2 directory /home/admin/gpdata/gpdatam/gpseg0

使用gprecoverseg命令恢复

--生成恢复文件

###gprecoverseg -o ./recov

--恢复失败节点

###gprecoverseg -i ./recov

--primary mirror角色对调

###gprecoverseg -r

 --如果gprecoverseg -i ./recov运行失败,建议采用gprecoverseg –F全量方式进程恢复尝试;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行好事,莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值