前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kudu-1:原生方式在aws的centos8系统上搭建生产级kudu集群

kudu-1:原生方式在aws的centos8系统上搭建生产级kudu集群

作者头像
千里行走
发布2021-12-20 12:55:35
1.3K0
发布2021-12-20 12:55:35
举报
文章被收录于专栏:千里行走

目录

(1).为什么不使用CDH/ambari/云服务

(2).重点概述

1.版本选择

2.组件拓扑与节点配置

(3).制作aws模版机与镜像

1.制作模版机

1.1.开EC2

1.2.挂载应用/数据盘

1.3.安装必要软件

1.3.1.确认操作系统版本

1.3.2安装必备库

1.3.3.安装 memkind 库

1.3.4.安装额外软件包

1.3.5.其他基础准备

1.3.5.1.创建基础目录

1.3.5.2.安装基础软件

1.3.5.3.部署docker/node-exporter

1.3.5.4.修改时区

1.3.5.5.确认磁盘挂载点重启生效

1.3.5.6.部署supervisor

1.3.5.7.安装cmake

1.3.6.源码构建kudu

1.3.7.配置supervisor的kudu启动配置文件

1.3.8.做镜像前测试模版机kudu

1.3.9.做集群内ssh免密

1.3.10.做AMI镜像前清空所有数据

1.3.11.将模版机制作为AMI镜像

1.3.12.从AMI镜像启动其余2台节点

1.3.13.配置与启动kudu的3节点集群

(4).问题与注意事项

1.kudu-master的3个节点必须在短时间内同时启动

(1).为什么不使用CDH/ambari/云服务

ambari已经被CDH所在公司收购,两者现在都已经闭源,生产使用需要付费,费用极其昂贵。

至于为什么不使用云服务,也是费用问题,因为是hadoop-flink集群用于实时计算,云服务的实时计算资源是非常昂贵的。

(2).重点概述

1.版本选择

kudu版本:1.15.0

jdk:1.8,kudu官方明确说明要使用1.8版本。

linux:kudu官方建议centos8。我们要选择aws的centos8 ami,这样的话不用自己做时钟同步。

2.组件拓扑与节点配置

3台c5a.2xlarge(8c16g)的机器,每个机器部署一个kube-master,kube-tserver,为了省钱,反正也是用于离线,可以接受。

(3).制作aws模版机与镜像

1.制作模版机

1.1.开EC2

选择aws制作的centos8镜像:这样不用自己配置时钟同步。

上图:

子网选择私有子网;禁用自动分配ip/使用弹性ip。

安全组内网全开。

存储盘:

系统盘"/"挂载点:20G

应用盘"/app"挂载点:1024G

1.2.挂载应用/数据盘

磁盘挂在参考文章:

aws生产实践-4:EC2挂载磁盘

https://mp.weixin.qq.com/s/joMicOYjPjpLjoQNheMlrA

1.3.源码方式安装kudu

1.3.1.确认操作系统版本

确认操作系统版本是:CentOS Linux release 8.2.2004 (Core)

cat /etc/redhat-release

顺带永久修改hostname:

sudo hostnamectl set-hostname --static kudu-cluster-node-1

1.3.2安装必备库

yum update -y

sudo yum install -y autoconf automake cyrus-sasl-devel cyrus-sasl-gssapi \

cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \

krb5-server krb5-workstation libtool make openssl-devel patch \

pkgconfig redhat-lsb-core rsync unzip vim-common

1.3.3.安装 memkind 库

需要支持 Kudu 的 NVM(非易失性内存)块缓存,请安装 memkind 库

sudo yum install -y memkind

如果Linux 发行版提供的 memkind 包太旧(需要 1.8.0 或更高版本),从源代码构建和安装(我的是1.10所以不需要源码安装):

$ sudo yum install numactl-libs numactl-devel

$ git clone https://github.com/memkind/memkind.git

$ cd memkind

$ ./build.sh --prefix=/usr

$ sudo yum remove memkind

$ sudo make install

$ sudo ldconfig

验证memkind是否安装成功:

查看memkind版本:

1.3.4.安装额外软件包

如果计划构建文档,请安装一些额外的软件包,包括 ruby。

$ sudo yum install -y gem graphviz zlib-devel

centos8无法安装ruby-devel。

安装ruby-devel:

sudo dnf install ruby

ruby --version

1.3.5.其他基础准备

1.3.5.1.创建基础目录

mkdir -p /app/3rd

mkdir -p /app/logs

mkdir -p /app/data

mkdir -p /app/download

mkdir -p /app/docker

mkdir -p /app/data/kudu-master/data

mkdir -p /app/data/kudu-master/metadata

mkdir -p /app/data/kudu-master/wal

mkdir -p /app/logs/kudu-master

mkdir -p /app/logs/kudu-master/supervisor

mkdir -p /app/data/kudu-tserver/data

mkdir -p /app/data/kudu-tserver/metadata

mkdir -p /app/data/kudu-tserver/wal

mkdir -p /app/logs/kudu-tserver

mkdir -p /app/logs/kudu-tserver/supervisor

1.3.5.2.安装基础软件

需要安装python(CentOS 8默认未安装Python):

sudo dnf install python3 -y

而且要做软链,否则后边编译的时候找不到python命令:

ln -s /usr/bin/python3.6 /usr/bin/python

yum install -y telnet nc lrzsz lsof wget

1.3.5.3.部署docker/node-exporter

yum install -y yum-utils

添加yum源

sudo yum-config-manager \

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

Enable the nightly or test repositories

sudo yum-config-manager --enable docker-ce-nightly

sudo yum-config-manager --enable docker-ce-test

一定要修改docker的默认存储目录!否则系统盘会炸。

mkdir /etc/docker vi /etc/docker/daemon.json { "data-root": "/app/docker" }

yum install docker-ce docker-ce-cli -y

启动docker

systemctl start docker

docker pull quay.io/prometheus/node-exporter:v1.2.2 docker run -d --restart=always -p 9100:9100 quay.io/prometheus/node-exporter:v1.2.2

1.3.5.4.修改时区

时区修改为北京时区(东8区): ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

1.3.5.5.确认磁盘挂载点重启生效

vi /etc/fstab /dev/nvme1n1 /app xfs defaults 1 1

1.3.5.6.部署supervisor

首先安装EPEL源

yum install epel-release -y

安装supervisor

yum install supervisor -y

systemctl start supervisord

1.3.5.7.安装cmake

centos8上安装cmake方式:

https://github.com/Kitware/CMake/releases

选择最新稳定版:v3.21.3

cd /app/3rd

wget https://github.com/Kitware/CMake/releases/download/v3.21.3/cmake-3.21.3-linux-x86_64.tar.gz

tar -xzvf cmake-3.21.3-linux-x86_64.tar.gz

ln -s /app/3rd/cmake-3.21.3-linux-x86_64/bin/cmake /usr/local/bin/cmake

mv cmake-3.21.3-linux-x86_64.tar.gz /app/download/

1.3.6.源码构建kudu

下载kudu1.15.0-release版本:

https://github.com/apache/kudu/releases

cd /app/3rd

wget https://github.com/apache/kudu/archive/refs/tags/1.15.0.tar.gz

tar -xzvf 1.15.0.tar.gz

mv 1.15.0.tar.gz /app/download/

cd kudu-1.15.0

注意:记住这个目录“/app/3rd/kudu-1.15.0/www”,存放后台web的静态文件,master和tserver的启动命令要指向这个目录。

Build any missing third-party requirements using the build-if-necessary.sh script. Not using the devtoolset will result in Host compiler appears to require libatomic, but cannot find it.

(安装系统确实的必要软件):要安装的东西比较多,要等很久,1个小时?

build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh

然后顺次执行:

mkdir -p build/release

cd build/release

../../build-support/enable_devtoolset.sh \

../../thirdparty/installed/common/bin/cmake \

-DCMAKE_BUILD_TYPE=release ../..

make -j4

时间会很长,耐性等待。

显示下述内容时完成编译。

sudo make DESTDIR=/opt/kudu install

1.3.7.配置supervisor的kudu启动配置文件

使用kudu用户启动kudu。

useradd kudu

将kudu所有目录修改为kudu用户持有:

chown -R kudu:kudu /app

chown -R kudu:kudu /opt/kudu

先准备好启动命令:

参考官网:https://kudu.apache.org/docs/configuration.html

master启动命令模版:

/opt/kudu/usr/local/sbin/kudu-master --master_addresses=master1-ip,master2-ip,master3-ip --fs_data_dirs=/app/data/kudu-master/data --fs_metadata_dir=/app/data/kudu-master/metadata --fs_wal_dir=/app/data/kudu-master/wal --log_dir=/app/logs/kudu-master

tserver启动命令:

/opt/kudu/usr/local/sbin/kudu-tserver --fs_data_dirs=/app/data/kudu-tserver/data --fs_metadata_dir=/app/data/kudu-tserver/metadata --fs_wal_dir=/app/data/kudu-tserver/wal --log_dir=/app/logs/kudu-tserver --tserver_master_addrs=0.0.0.0:7051

配置/etc/supervisord.d:

kudu-master.ini内容:

[program:kudu-master]

process_name=%(program_name)s

command=/opt/kudu/usr/local/sbin/kudu-master --master_addresses=master1-ip,master2-ip,master3-ip --fs_data_dirs=/app/data/kudu-master/data --fs_metadata_dir=/app/data/kudu-master/metadata --fs_wal_dir=/app/data/kudu-master/wal --log_dir=/app/logs/kudu-master --webserver_doc_root=/app/3rd/kudu/www

directory=/opt/kudu/usr/local/sbin ; 命令执行的目录

;environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量

user=kudu ; 进程执行的用户身份

stopsignal=INT

autostart=false

autorestart=true ; 程序意外退出是否自动重启

startsecs=3 ;/自动重启间隔

stderr_logfile=/app/logs/kudu-master/supervisor/kudu-master-supervisor.err.log ; 错误日志文件

stdout_logfile=/app/logs/kudu-master/supervisor/kudu-master-supervisor.out.log ; 输出日志文件

kudu-tserver.ini内容:

[program:kudu-tserver]

process_name=%(program_name)s

command=/opt/kudu/usr/local/sbin/kudu-tserver --fs_data_dirs=/app/data/kudu-tserver/data --fs_metadata_dir=/app/data/kudu-tserver/metadata --fs_wal_dir=/app/data/kudu-tserver/wal --log_dir=/app/logs/kudu-tserver --tserver_master_addrs=master1-ip,master2-ip,master3-ip --webserver_doc_root=/app/3rd/kudu/www

directory=/opt/kudu/usr/local/sbin ; 命令执行的目录

;environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量

user=kudu; 进程执行的用户身份

stopsignal=INT

autostart=false

autorestart=true ; 程序意外退出是否自动重启

startsecs=3 ;/自动重启间隔

stderr_logfile=/app/logs/kudu-master/supervisor/kudu-tserver-supervisor.err.log ; 错误日志文件

stdout_logfile=/app/logs/kudu-master/supervisor/kudu-tserver-supervisor.out.log ; 输出日志文件

1.3.8.做镜像前测试模版机kudu

需要在这台模版机上起一个单节点的kudu集群(一个master,一个tserver),来进行简单的check。

进入supervisorctl启动即可,日志验证。

master会提供8051开放后台web:

tserver会开放8050端口提供metrics:

http://10.0.40.184:8050/metrics

tserver通过8050端口也有一个相同的后台:

OK,说明work。

1.3.9.做集群内ssh免密

su kudu

ssh-keygen

cd ~/.ssh

> authorized_keys

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys

1.3.10.做AMI镜像前清空所有数据

先杀掉所有kudu进程(root用户下执行):supervisorctl stop all

rm -rf /app/data/kudu-master/data/*

rm -rf /app/data/kudu-master/metadata/*

rm -rf /app/data/kudu-master/wal/*

rm -rf /app/logs/kudu-master/*

rm -rf /app/logs/kudu-master/supervisor/*

rm -rf /app/data/kudu-tserver/data/*

rm -rf /app/data/kudu-tserver/metadata/*

rm -rf /app/data/kudu-tserver/wal/*

rm -rf /app/logs/kudu-tserver/*

rm -rf /app/logs/kudu-tserver/supervisor/*

1.3.11.将模版机制作为AMI镜像

因为kudu安装后自身就占用117G空间,所以制作这个ami镜像很费时间。

点击创建ami即可。

1.3.12.从AMI镜像启动其余2台节点

1.3.13.配置与启动kudu的3节点集群

依次修改3个kudu节点的hostname:

sudo hostnamectl set-hostname --static kudu-cluster-node-1

sudo hostnamectl set-hostname --static kudu-cluster-node-2

sudo hostnamectl set-hostname --static kudu-cluster-node-3

修改sudo vi /etc/supervisord.d/kudu-master.ini

command=/opt/kudu/usr/local/sbin/kudu-master --master_addresses=master1-ip,master2-ip,master3-ip --fs_data_dirs=/app/data/kudu-master/data --fs_metadata_dir=/app/data/kudu-master/metadata --fs_wal_dir=/app/data/kudu-master/wal --log_dir=/app/logs/kudu-master --webserver_doc_root=/app/3rd/kudu/www

master1-ip,master2-ip,master3-ip改为ip。

每个节点在root下启动supervisord:systemctl start supervisord

先启动3个kube-master:supervisorctl start kube-master

要在短时间内执行完命令,否则可能会启动失败,因为master集群选举有个超时时间,超过这个时间依然没有足够节点数就宕了。

日志验证kudu-master:

master会提供8051开放后台web:

然后依次启动tserver:

supervisorctl start kudu-tserver

日志验证:

tserver会开放8050端口提供metrics:

http://10.0.40.184:8050/metrics

tserver通过8050端口也有一个相同的后台:

OK,说明work。

然后需要在配置一个内网的反向代理,方便办公网络和vpn内使用。

(4).问题与注意事项

1.kudu-master的3个节点必须在短时间内同时启动

如果只启动一个kube-master节点,会报错后stop;可以理解,配置的是3个master,最多只能坏一个master节点,否则集群肯定也就宕了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档