The project uses the greenplum-based data warehouse construction, and the test, implementation, and development are all done by themselves. First, a set of deployment is completed in the test environment based on a virtual machine. The production environment needs to consider disk and partition issues;
1. Root does not need to be secret
主机A/B/C为例,设置免密登录的方法:
① 每台机器上执行 ssh-keygen -t rsa ,敲3次回车会在家目录/home/csap下生成隐藏的.ssh目录,首先需要给此目录赋权限700: chmod 700 .ssh;这个目录下有两个文件:id_rsa 私钥和id_rsa.pub 公钥;
② 在此目录中创建 authorized_keys 文件并赋权:
cd .ssh
touch authorized_keys
chmod 644 authorized_keys
③ 以机器A为例,执行以上操作后,如果不知道其他机器的密码,比如绑定4A;把自己的 id_rsa.pub 公钥 以及其他两台机器的公钥粘贴到 authorized_keys文件中,然后把这个文件复制到其他2台机器即可。等于所有机器都有其他机器的公钥,即可完成ssh 免密登录;
④ 如果知道其他机器密码,可以直接执行这个把公钥写到其他机器的authorized_keys文件中:ssh-copy-id -i ~/.ssh/[email protected]
2. Modify the dns (guarantee to connect to the external network), this is the dns designated for the xxx computer room
# Generated by NetworkManager
nameserver 211.138.24.66
nameserver 114.114.114.114
nameserver 8.8.8.8
scp /etc/resolv.conf 10.191.247.46:/etc
scp /etc/resolv.conf 10.191.247.47:/etc
scp /etc/resolv.conf 10.191.247.48:/etc
3. Modify yum source-Ali source, install ansible
#如果yum源没法下载wget的rpm包:http://www.rpmfind.net/linux/rpm2html/search.php?query=wget
rpm -ivh wgetxxxxxxxxxx
yum clean all
yum install -y wget
yum install -y lrzsz
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
4. Modify the host name, ansible configuration, and perform batch operations
vi /etc/hosts
10.191.247.46 greeplum-1
10.191.247.47 greeplum-2
10.191.247.48 greeplum-3
# 修改hostname
vi /etc/hostname
# 永久变更主机名
hostnamectl set-hostname greenplum-1
hostnamectl set-hostname greenplum-2
hostnamectl set-hostname greenplum-3
yum install -y ansible
vi /etc/ansible/hosts
[greenplum]
10.191.247.46
10.191.247.47
10.191.247.48
ansible greenplum -m command -a ' ls'
5. Mount the data directory
ansible greenplum -m command -a 'mkfs.ext4 /dev/vdb'
ansible greenplum -m command -a 'mkdir /data'
ansible greenplum -m command -a 'mount /dev/vdb /data'
echo "/dev/vdb /data ext4 defaults 0 0 " >>/etc/fstab
6, ntp server
ansible greenplum -m command -a 'yum install -y ntp'
ansible greenplum -m command -a 'systemctl restart ntpd'
ansible greenplum -m command -a 'timedatectl set-timezone Asia/Shanghai '
ansible greenplum -m command -a 'systemctl restart ntpd'
ansible greenplum -m command -a 'ntpq –p'
ansible greenplum -m command -a 'date'
7. Firewall
ansible greenplum -m command -a 'systemctl disable firewalld'
#vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
8. Modify the sysctl.conf configuration (all servers)
ansible greenplum -m command -a ' cp /etc/sysctl.conf /etc/sysctl.conf.bak'
vi /etc/sysctl.conf
---分发
scp /etc/sysctl.conf 10.191.247.47:/etc
scp /etc/sysctl.conf 10.191.247.48:/etc
---执行命令使其生效
ansible greenplum -m command -a ' sysctl -p'
-----------------------------------------------------参数列表及含义----------------------------------------------
kernel.shmall = 536870912
#可用共享内存的总量,单位是页
#一般此值与kernel.shmmax相等
kernel.shmmax = 536870912
#共享内存段的最大值(以字节为单位),缺省为32M,一般为物理内存的一半
kernel.shmmni = 4096
#单个共享内存段的最小值,一般为4kB,可适当调大,一般为4096的2-3倍
vm.overcommit_ratio = 95
#CommitLimit(内存分配上限) = 物理内存 * overcommit_ratio(默认50,即50%) + swap大小
vm.overcommit_memory = 2
#Linux下overcommit有三种策略
#0:启发式策略
#1:任何overcommit都会被接受
#2:当系统分配的内存超过swap+N%*物理RAM(N%由vm.overcommit_ratio决定)时,会拒绝commit,
#一般设置为2
net.ipv4.ip_local_port_range = 10000 65535
#指定端口范围的一个配置,默认是32768 61000,可调整为1025 65535
kernel.sem = 500 2048000 200 40960
#用于控制内核信号量(信号量是System VIPC用于进程间通讯的方法)
#建议设置:250 32000 100 128
#第一列,表示每个信号集中的最大信号量数目
#第二列,表示系统范围内的最大信号量总数目
#第三列,表示每个信号发生时的最大系统操作数目
#第四列,表示系统范围内的最大信号集总数目
#(第一列)*(第四列)=(第二列)
kernel.sysrq = 1
#内核系统请求调试功能控制,0表示禁用,1表示启用
kernel.core_uses_pid = 1
#这有利于多线程调试,0表示禁用,1表示启用
kernel.msgmnb = 65536
#该文件指定一个消息队列的最大长度(bytes)。缺省设置:16384
kernel.msgmax = 65536
#该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)
#进程间的消息传递是在内核的内存中进行的,如果增加该值,则将增加操作系统所使用的内存数量
#缺省设置:8192
kernel.msgmni = 2048
#指定消息队列标识的最大数目,即系统范围内最大多少个消息队列
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies
#当SYN等待队列溢出时,启用cookies来处理,可以防范少量的SYN攻击
#默认为0,表示关闭。1表示启用
net.ipv4.ip_forward = 0
#表示是否打开IP转发。0:禁止 1:转发 缺省设置:0
net.ipv4.conf.default.accept_source_route = 0
#是否允许源地址经过路由。0:禁止 1:打开 缺省设置:0
net.ipv4.tcp_tw_recycle = 1
#允许将TIME_WAIT sockets快速回收以便利用。0表示禁用,1表示启用
net.ipv4.tcp_max_syn_backlog = 4096
#增加TCP SYN队列长度,使系统可以处理更多的并发连接
#一般为4096,可以调大,必须是4096的倍数,建议是2-3倍
net.ipv4.conf.all.arp_filter = 1
#表示控制具体应该由哪块网卡来回应arp包,缺省设置0, 建议设置为1
net.core.netdev_max_backlog = 10000
#进入包的最大设备队列
#默认是1000
#对重负载服务器而言该值太低,可调整到16384/32768/65535
net.core.rmem_max = 2097152
#最大socket读buffer,可参考的优化值:1746400/3492800/6985600
net.core.wmem_max = 2097152
#最大socket写buffer,可参考的优化值:1746400/3492800/6985600
vm.swappiness = 10
#当物理内存超过设置的值是开始使用swap的内存空间
#计算公式是100-1=99%表示物理内存使用到99%时开始交换分区使用
kernel.pid_max = 655360
#用户打开最大进程数,全局配置的参数
vm.zone_reclaim_mode = 0
#可选值0、1,当某个节点可用内存不足时
#如果为0的话,那么系统会倾向于从其他节点分配内存
#如果为1的话,那么系统会倾向于从本地节点回收Cache内存多数时候
#Cache对性能很重要,所以0是一个更好的选择
vm.dirty_expire_centisecs = 500
#比这个值老的脏页,将被刷到磁盘。500表示5秒
vm.dirty_writeback_centisecs = 100
#后台刷脏页进程的唤醒间隔, 100表示1秒
vm.dirty_background_ratio = 0
#这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)
#就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存
vm.dirty_ratio = 0
#如果系统进程刷脏页太慢,使得系统脏页超过内存 95 % 时,
# 则用户进程如果有写磁盘的操作(如fsync, fdatasync等调用),则需要主动把系统脏页刷出。
#有效防止用户进程刷脏页,在单机多实例,并且使用CGROUP限制单实例IOPS的情况下非常有效。
vm.dirty_background_bytes = 1610612736
#系统脏页到达这个值,系统后台刷脏页调度进程 pdflush(或其他) 自动将(dirty_expire_centisecs/100)秒前的脏页刷到磁盘
vm.dirty_bytes = 4294967296
---------------------------------------------------------------------------------------------------
9. Modify the limits.conf configuration (all servers)
ansible greenplum -m command -a ' cp /etc/security/limits.conf /etc/security/limits.conf.bak'
vi /etc/security/limits.conf
---分发
scp /etc/security/limits.conf 10.191.247.47:/etc/security
scp /etc/security/limits.conf 10.191.247.48:/etc/security
---执行命令使其生效
ansible greenplum -m command -a ' sysctl -p'
-----------------------------------------------------参数列表及含义----------------------------------------------
#用户 软限制/硬限制 内核文件/文件/进程 限制数量
* soft nofile 524288
#任意用户打开文件描述符数量超过524288报警
* hard nofile 524288
#任意用户打开文件描述符数量超过524288报错
* soft nproc 131072
#任意用户打开进程数量超过524288报警
* hard nproc 131072
#任意用户打开进程数量超过524288报错
---------------------------------------------------------------------------------------------------
10. Set disk pre-read and write (all servers)
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
ansible greenplum -m command -a 'systemctl restart systemd-logind'
11. Create users and user groups (all servers)
-----创建用户组
ansible greenplum -m command -a 'groupadd -g 530 gpadmin'
-----创建用户
ansible greenplum -m command -a 'useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin'
-----对文件夹进行赋权
ansible greenplum -m command -a 'chown -R gpadmin:gpadmin /home/gpadmin/'
------为账号gpadmin设置密码
passwd gpadmin
-----数据目录????????????????????????????????????????????????????????????????????????????????????????????????
ansible greenplum -m command -a 'mkdir /data/gpdata'
ansible greenplum -m command -a 'chown -R gpadmin:gpadmin /data'
ansible greenplum -m command -a 'chown -R gpadmin:gpadmin /data/gpdata'
12. Install greenplum
---------① gpadmin之间做免密
su gpadmin
cd ~
ssh-keygen -t rsa
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 644 authorized_keys
vi id_rsa.pub
----------② root用户分发rpm安装包,安装rpm包(所有服务器)
ansible greenplum -m copy -a 'src=/opt/greenplum-db-6.2.1-rhel7-x86_64.rpm dest=/opt'
ansible greenplum -m command -a 'yum install -y /opt/greenplum-db-6.2.1-rhel7-x86_64.rpm'
----目录权限给gpadmin(所有服务器)
ansible greenplum -m command -a 'chown -R gpadmin:gpadmin /usr/local/greenplum*'
----③ 设置gpadmin用户的环境变量(master节点)
su – gpadmin
cd ~
vi ~/.bashrc
source /usr/local/greenplum-db/greenplum_path.sh
export PGPORT=5432
export PGUSER=gpadmin
# 虚拟机设置的data目录
export MASTER_DATA_DIRECTORY=/data/gpdata/master/gpseg-1
export PGDATABASE=default_ database
export LD_PRELOAD=/lib64/libz.so.1 ps
----④ 设置gpadmin用户的环境变量(segment节点)
su gpadmin
cd ~
vi ~/.bashrc
----增加
source /usr/local/greenplum-db/greenplum_path.sh
----使其生效
source ~/.bashrc
----⑤ 创建pgconfigs文件夹,统一设置master和segment机器列表,机器启动配置项(所有服务器)
ansible greenplum -m command -a 'mkdir -p /home/gpadmin/gpconfigs'
---master上配置后分发
cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
----创建hostfile_exkeys,用于gpssh-exkeys
vi hostfile_exkeys
greenplum-1
greenplum-2
greenplum-3
----创建hostfile_segonly,用于数据库初始化
vi hostfile_segonly
greenplum-2
greenplum-3
----分发到segment
scp /home/gpadmin/gpconfigs/* 10.191.247.47:/home/gpadmin/gpconfigs
scp /home/gpadmin/gpconfigs/* 10.191.247.48:/home/gpadmin/gpconfigs
----gpssh打通三个机器????????
gpssh-exkeys -f /home/gpadmin/gpconfigs/hostfile_exkeys
13, the initial database
----master创建目录
mkdir /data/gpdata/master
----segment
mkdir /data/gpdata/pdata
mkdir /data/gpdata/mdata
----数据库的初始化指令
gpinitsystem -c cluster_configuration_file -s standby_master_host -h
-c 对应配置文件
-s 指定哪个是stanby的master(本次没有)
-h segment列表
-----修改初始化配置
cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
vi /home/gpadmin/gpconfigs/gpinitsystem_config
#数据库名称
ARRAY_NAME="Greenplum"
#segment前缀
SEG_PREFIX=gpseg
#primary segment起始端口号
PORT_BASE=6000
#primary segment的数据目录,多个目录表示一个机器多个segment
declare -a DATA_DIRECTORY=(/data/gpdata/pdata)
# master的名字
MASTER_HOSTNAME=greenplum-1
MASTER_DIRECTORY=/data/gpdata/master
MASTER_PORT=5432
#指定bash版本
TRUSTED_SHELL=ssh
#将日志写入磁盘的间隔
CHECK_POINT_SEGMENTS=8
#字符集
ENCODING=UNICODE
# mirror segment的端口号
MIRROR_PORT_BASE=7000
#mirror的数据目录
declare -a MIRROR_DATA_DIRECTORY=(/data/gpdata/mdata)
DATABASE_NAME=pgdb
----------------------初始化
gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config -h /home/gpadmin/gpconfigs/hostfile_segonly