哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
Greenplum是基于开源PostgreSQL的分布式数据库,采用shared-nothing架构,即主机、操作系统、内存、存储都是每台服务器独立自我控制,不存在共享。
Greenplum本质上是一个关系型数据库集群,实际上是由多个独立的数据库服务组合而成的一个逻辑数据库。与Oracle的RAC不同,这种数据库集群采取的是MPP(Massively Parallel Processing)架构。
Greenplum最大的特点就是基于低成本的开放平台基础上提供强大的并行数据计算性能和海量数据管理能力。这个能力主要指的是并行计算能力,是对大任务、复杂任务的快速高效计算。
https://github.com/greenplum-db/gpdb/releases
下载对应操作系统的RPM包即可,安装包大约65MB
1个master,2个segment的集群,OS均为CentOS 7.6
192.168.6.12 master
192.168.6.13 segment1
192.168.6.14 segment2
--设置host名
hostnamectl set-hostname master
hostnamectl set-hostname segment1
hostnamectl set-hostname segment2
编辑/etc/hosts的文件
在Greenplum中,习惯将Master机器叫做mdw,将Segment机器叫做sdw,dw的含义为Data Warehouse。
192.168.6.12 master mdw
192.168.6.13 segment1 sdw1
192.168.6.14 segment2 sdw2
注意:以上在所有节点均做配置,mdw和sdw只是一个主机的别名
为所有节点创建gpadmin用户:
groupadd -g 1630 gpadmin
useradd -g 1630 -u 1630 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
echo "gpadmin:jeames" | chpasswd
为所有的节点创建一个all_hosts文件,包含所有节点主机名:
su - gpadmin
mkdir -p /home/gpadmin/conf/
cat > /home/gpadmin/conf/all_hosts <<"EOF"
master
segment1
segment2
EOF
为所有的节点创建一个seg_hosts文件 ,包含所有的Segment Host的主机名:
cat > /home/gpadmin/conf/seg_hosts <<"EOF"
segment1
segment2
EOF
集群ssh免密,每个节点机器 gpadmin 用户操作
# 1.生成秘钥对
ssh-keygen -t rsa
# 2.分发公钥
ssh-copy-id gpadmin@master
ssh-copy-id gpadmin@segment1
ssh-copy-id gpadmin@segment2
# 每个节点机器 root 用户操作
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
sed -i "s#^SELINUX=.*#SELINUX=disabled#g" /etc/selinux/config
RemoveIPC默认开启,会影响使用 the shared memory segments 和 semaphores 的所有应用程序,
务必编辑 logind.conf 文件并设置 RemoveIPC=no
# 1.编辑 /etc/systemd/logind.conf 文件设置 RemoveIPC=no
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
# 2.使配置生效
service systemd-logind restart
# 覆盖原有配置信息
cat <<EOF > /etc/security/limits.conf
soft nofile 524288
hard nofile 524288
soft nproc 131072
hard nproc 131072
EOF
# 追加配置信息
cat <<EOF >> /etc/ssh/sshd_config
MaxStartups 200
MaxSessions 200
EOF
##创建挂载目录
[root@master ~]# mkdir /cdrom
[root@master ~]# ls -lrt /opt/CentOS-7-x86_64-DVD-1810.iso
-rw-r--r-- 1 root root 4712300544 Apr 8 09:28 /opt/CentOS-7-x86_64-DVD-1810.iso
##挂载目录
[root@master ~]# mount -o loop /opt/CentOS-7-x86_64-DVD-1810.iso /cdrom
[root@master ~]# umount -f /cdrom
[root@master opt]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos_jeames-root xfs 49G 6.1G 43G 13% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 13M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 xfs 1.1G 153M 911M 15% /boot
tmpfs tmpfs 396M 0 396M 0% /run/user/0
/dev/loop0 iso9660 4.6G 4.6G 0 100% /cdrom
##yum源配置文件
[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# mkdir bak
[root@master yum.repos.d]# mv *.repo bak
[root@master yum.repos.d]# vi local.repo
[base-local]
name=CentOS7-local
baseurl=file:///cdrom
enabled=1
gpgcheck=0
#清空并重载yum
yum clean all
yum makecache
##测试yum安装
yum -y install tree
##安装依赖包
yum install net-tools -y
yum install -y apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml \
zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip krb5-devel
## 在所有节点操作,root用户操作
1.默认安装到/usr/local下
rpm -ivh open-source-greenplum-db-6.23.1-rhel7-x86_64.rpm
2.赋权,修改该路径gpadmin操作权限
chown -R gpadmin:gpadmin /usr/local/greenplum*
# master创建目录,用作集群数据的存储目录
mkdir -p /greenplum/data/
chown -R gpadmin:gpadmin /greenplum
-- 所有节点
echo ". /usr/local/greenplum-db/greenplum_path.sh" >> /home/gpadmin/.bashrc
-- master配置
echo "export MASTER_DATA_DIRECTORY=/greenplum/data/master/gpseg-1" >> /home/gpadmin/.bashrc
# 使配置文件生效
source /home/gpadmin/.bashrc
# 在master节点操作:创建一个初始化副本 initgp_config,根据前面的配置,修改参数
-- 在所有节点root用户操作,创建3个目录
主节点使用的是master目录,从节点使用的是primary目录和mirror目录
mkdir -p /greenplum/data/master
mkdir -p /greenplum/data/primary
mkdir -p /greenplum/data/mirror
chown -R gpadmin:gpadmin /greenplum
-- master节点
[root@master ~]# su - gpadmin
cat > /home/gpadmin/conf/initgp_config <<"EOF"
declare -a DATA_DIRECTORY=(/greenplum/data/primary)
declare -a MIRROR_DATA_DIRECTORY=(/greenplum/data/mirror)
ARRAY_NAME="jemgp"
SEG_PREFIX=gpseg
PORT_BASE=6000
MASTER_PORT=5432
MASTER_HOSTNAME=master
MASTER_DIRECTORY=/greenplum/data/master
DATABASE_NAME=rptdb
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
EOF
-- 在master节点操作,执行初始化命令
su - gpadmin
gpinitsystem -c /home/gpadmin/conf/initgp_config -h /home/gpadmin/conf/seg_hosts
若初始化成功,则GP自动启动,可以看到master节点上的5432已经在listen了,psql进入数据库,开始greenplum之旅。
[gpadmin@master ~]$ netstat -tulnp | grep 5432
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 56385/postgres
tcp6 0 0 :::5432 :::* LISTEN 56385/postgres
[gpadmin@master ~]$ psql -d rptdb
psql (9.4.26)
Type "help" for help.
rptdb=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+---------+----------+------------+------------+---------------------
postgres | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 |
rptdb | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 | =c/gpadmin +
| | | | | gpadmin=CTc/gpadmin
template1 | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 | =c/gpadmin +
| | | | | gpadmin=CTc/gpadmin
(4 rows)
rptdb=# show port;
port
------
5432
(1 row)
rptdb=# show listen_addresses;
listen_addresses
------------------
*
(1 row)
rptdb=# select * from gp_segment_configuration order by 1;
dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir
------+---------+------+----------------+------+--------+------+----------+----------+--------------------------------
1 | -1 | p | p | n | u | 5432 | master | master | /greenplum/data/master/gpseg-1
2 | 0 | p | p | n | u | 6000 | segment1 | segment1 | /greenplum/data/primary/gpseg0
3 | 1 | p | p | n | u | 6000 | segment2 | segment2 | /greenplum/data/primary/gpseg1
(3 rows)