页面树结构
转至元数据结尾
转至元数据起始


Smartbi MPP 高速缓存库,列式数据库管理系统,用于抽取数据。分布式集群,提高数据的读取速度。

1、系统环境准备

1.1集群系统环境

集群地址:

IP

主机名

角色

192.168.99.104

test1

Zookeeper,smartbi-mpp

192.168.99.105

test2

smartbi-mpp

官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,部署前需要检查环境是否支持SSE4.2指令

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"


安装权限要求:
具有 sudo权限的用户或root用户,推荐使用root用户安装
安装时用root用户运行或使用具有 sudo权限的用户执行。

1.2防火墙配置

所有集群内的主机均需进行防火墙配置。(集群主机:test1,test2)

为了便于安装,建议在安装前关闭防火墙。使用过程中,为了系统安全可以选择启用防火墙,但必须启用Smartbi mpp使用到的相关端口。

1.2.1关闭防火墙

临时关闭防火墙

systemctl stop firewalld

永久关闭防火墙

systemctl disable firewalld

查看防火墙状态

systemctl status firewalld

1.2.2开启防火墙

相关服务及端口对照表

服务名

开放端口

smartbi-mpp

9000,8123,9009

Zookeeper

2181


如果确实需要打开防火墙安装,需要给防火墙放开以下需要使用到的端口
开启端口:9000、8123、2181、2888、3888、9009

firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=8123/tcp
firewall-cmd --permanent --add-port=2181/tcp

配置完以后重新加载firewalld,使配置生效

firewall-cmd --reload

查看防火墙的配置信息

firewall-cmd --list-all

1.2.3关闭selinux

临时关闭selinux,立即生效,不需要重启服务器。

setenforce 0

永久关闭selinux,修改完配置后需要重启服务器才能生效

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

2、开始安装

2.1安装介质

Centos 7.x/Redhat7.x

软件

安装包

Smartbi-MPP




clickhouse-client-19.4.2.7-1.el7.x86_64.rpm

clickhouse-common-static-19.4.2.7-1.el7.x86_64.rpm

clickhouse-server-19.4.2.7-1.el7.x86_64.rpm

clickhouse-server-common-19.4.2.7-1.el7.x86_64.rpm

JDK

jdk8.0.202-linux_x64.tar.gz

zookeeper

zookeeper-3.4.13.tar.gz

上传Smartbi-MPP安装介质到CentOS操作系统,本文档安装包存放在/data目录下

2.2设置系统环境

所有集群内的主机均需设置系统环境(集群主机:test1,test2)

1、取消打开文件限制:
在 /etc/security/limits.conf 文件末尾加入以下内容:

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

2、添加hosts文件解析 :

在/etc/hosts 文件末尾添加:

192.168.99.104 test1
192.168.99.105 test2

2.3 安装Java环境

集群内的主机均需安装java环境(集群主机:test1,test2)

 安装包解压到/opt目录

tar -zxvf jdk8.0.202-linux_x64.tar.gz -C /opt

配置java环境变量
执行 vi ~/.bash_profile 在文件末尾添加java环境变量参数,并保存

export  JAVA_HOME=/opt/jdk8.0.202-linux_x64
export  JRE_HOME=$JAVA_HOME/jre
export  CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/jre/lib:$CLASSPATH
export  PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

②使配置生效

source ~/.bash_profile

③查看java版本信息

java -version

2.4 安装zookeeper

test1主机安装

①解压zookeeper安装包到指定目录

tar -zxvf zookeeper-3.4.13.tar.gz -C /opt

②创建zookeeper数据目录和日志目录

cd /opt/zookeeper-3.4.13/
mkdir data
mkdir log

③修改zookeeper配置文件

cd /opt/zookeeper-3.4.13/conf/

移动重命名配置文件

mv zoo_sample.cfg zoo.cfg

修改配置文件,

vi zoo.cfg

参考配置如下:

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/opt/zookeeper-3.4.13/data
dataLogDir=/opt/zookeeper-3.4.13/log
autopurge.snapRetainCount=20
autopurge.purgeInterval=48

2.5启动zookeeper

1、启动zookeeper

cd /opt/zookeeper-3.4.13/bin
./zkServer.sh start /opt/zookeeper-3.4.13/conf/zoo.cfg

2、查看zookeeper状态

cd /opt/zookeeper-3.4.13/bin
./zkServer.sh status /opt/zookeeper-3.4.13/conf/zoo.cfg

2.6安装配置SmartbiMPP

集群内的主机均需安装smartbimpp(集群主机:test1,test2)

1、安装SmartbiMPP

cd /data/Smartbi-MPP-Colony/clickhous-package/
rpm -ivh clickhouse-common-static-19.4.2.7-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-common-19.4.2.7-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-19.4.2.7-1.el7.x86_64.rpm
rpm -ivh clickhouse-client-19.4.2.7-1.el7.x86_64.rpm

2、SmartbiMPP的配置文件
SmartbiMPP配置文件:/etc/clickhouse-server/config.xml
SmartbiMPP用户配置文件:/etc/clickhouse-server/users.xml


3、配置日志存放路径
修改的配置文件/etc/clickhouse-server/config.xml,配置日志路径。

如修改日志目录,服务启动时可能会提示目录权限不足,需要给目录添加权限:

#chown -R clickhouse.clickhouse <新的日志目录>  



4、修改默认端口
修改的配置文件/etc/clickhouse-server/config.xml,
8123是JDBC驱动的连接端口。
9000是clickhouse-client的连接端口。

9009是用于集群之间数据交换
一般不建议修改端口配置

Smartbi Mpp数据存储目录

数据存储目录用来存储Smartbi Mpp的数据文件,可以设置其他目录用于存储Smartbi Mpp的数据文件,如果指定其他目录,服务启动时可能会提示目录权限不足,需要为指定的目录添加权限:

chown -R clickhouse.clickhouse <新数据目录>     

修改的配置文件/etc/clickhouse-server/config.xml,设置数据目录

5、开启远程访问权限
修改的配置文件/etc/clickhouse-server/config.xml,放开注释即可。IPV4地址和IPV6地址只能配置一个,否则会出现端口冲突的报错。
开启监听0.0.0.0的配置。

6、设置smartbimpp内存大小
修改的配置文件/etc/clickhouse-server/users.xml,
单位是Byte,默认值是10G。根据实际情况配置内存值

7、设置用户密码

修改的配置文件/etc/clickhouse-server/users.xml
方法一:设置明文密码

方法二:设置加密密码(sha256sum加密)

echo -n "manager" | sha256sum | tr -d '-'


设置密码

8、启动smartbimpp

systemctl start clickhouse-server 

2.7集群部署

1、2个节点全部按照上面的指导部署单节点成功后,开始配置部署集群。
以test1节点为例(所有节点均需操作):
添加集群配置文件

vi /etc/metrika.xml

参考附件:

metrika.xml

metrika.xml文件须知

注意:根据实际情况修改metrika.xml中相关配置项,具体可查看metrika.xml配置文件.

注意:metrika.xml文件中不支持MPP加密密码(password_sha256_hex),仅支持明文密码(password).

注意:如果需要设置zookeeper的ACL访问控制,请查看文档末尾章节:zookeeper未授权访问处理方案

服务启动时可能会提示metrika.xml权限不足,添加权限:

chown  clickhouse.clickhouse /etc/metrika.xml


2、重启SmartbiMPP

systemctl restart clickhouse-server

登录SmartbiMpp查看集群

#test1节点:
clickhouse-client --host test1 --port 9000 --database default --user default --password manager
#test2节点:
clickhouse-client --host test2 --port 9000 --database default --user default --password manager
#查询集群信息
select * from system.clusters;


可以看到smartbi就是我们定义的集群名称,一共有2个分片,每个分片有一份数据。


5、插入数据验证集群
2个节点分别创建数据库:

create database if not exists smartbimpp;
show databases;


6、测试分布式集群
两个节点分别创建数据表:

use smartbimpp
CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192); 

创建分片表:

CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(smartbi, smartbimpp, ontime_local, rand()); 

分片表(Distributed)本身不存储数据,相当于路由,需要指定集群名、数据库名、数据表名、分片KEY,这里分片用rand()函数,表示随机分片。查询分布表,会根据集群配置信息,路由到具体的数据表,再把结果进行合并。
任意节点插入5条数据:

insert into ontime_all (FlightDate,Year)values('2001-10-12',2033);
insert into ontime_all (FlightDate,Year)values('2001-10-12',2002);
insert into ontime_all (FlightDate,Year)values('2001-10-12',2003);
insert into ontime_all (FlightDate,Year)values('2001-10-12',2004);
insert into ontime_all (FlightDate,Year)values('2001-10-12',2005);

查询插入的数据:

select count(1) from ontime_all; #查看总行数
select count(1) from ontime_local; #每个节点的行数

每个节点查询到ontime_all的总行数都是相同的,每个查询到的ontime_local的行数之和等于ontime_all的总行数。分布式集群部署成功。

2.8测试SmartbiMPP

1、配置高速缓存库,需要在连接字符串最后面添加 &clusterName=smartbi 参数,如下图所示。
 
2、抽数测试
以新建自助数据集为例

选择一个表(需要带时间字段),刷新并保存数据集



如下图,点击确定保存新的数据集

再次点击分区字段,选择分区字段和分区类型,如下图所示,并点击立即抽取开始抽数。

点击确定,开始抽取

抽取完成。


访问SmartbiMPP,查看抽取的数据

test1节点:


test2节点:

Smartbimpp分片集群部署成功。

3、运维操作

3.1停止/启动/重启zookeeper

启动zookeeper

cd /opt/zookeeper-3.4.13/bin
./zkServer.sh start /opt/zookeeper-3.4.13/conf/zoo.cfg

重启zookeeper

cd /opt/zookeeper-3.4.13/bin
./zkServer.sh restart /opt/zookeeper-3.4.13/conf/zoo.cfg

停止zookeeper

cd /opt/zookeeper-3.4.13/bin
./zkServer.sh stop

3.2停止/启动/重启Smartbi MPP


#停止服务
systemctl stop clickhouse-server
#启动服务
systemctl start clickhouse-server
3重启服务
systemctl restart clickhouse-server
3开机启动
systemctl enable clickhouse-server

4、zookeeper未授权访问处理方案

4.1 设置防火墙端口访问

Zookeeper未授权访问问题,zookeeper没有像其他软件一样可以设置登陆的账号密码,我们可以通过设置防火墙规则限制zookeeper的2181端口访问,设置端口访问白名单。参考如下:

#启动防火墙

systemctl  start  firewalld

#开放MPP与zookeeper的同步集群同步端口

端口服务端口说明

8123,9000,9009

MPP

8123:HTTP通信端口

9000,9009:MPP集群内部通信端口


2181,2888,3888


zookeeper

2181:对cline端提供服务

2888:集群内机器通讯使用

3888:选举leader使用

设置端口访问白名单,仅允许MPP集群、zookeeper集群、smartbi服务器IP访问上表中的端口:

参考配置如下(10.10.204.172,10.10.204.173,10.10.204.154为MPP集群和zookeeper集群IP地址,10.10.17.80为Smartbi服务器IP,根据实际环境修改)

#以下命令在zookeeper集群服务器中添加
#zookeeper 2181端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="2181" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="2181" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="2181" accept"
#zookeeper 2888端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="2888" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="2888" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="2888" accept"
#zookeeper 3888端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="3888" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="3888" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="3888" accept"
#MPP 8123 端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="8123" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="8123" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="8123" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.17.80" port protocol="tcp" port="8123" accept"
#MPP 9000 端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="9000" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="9000" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="9000" accept"
#MPP 9009端口访问白名单
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.172" port protocol="tcp" port="9009" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.173" port protocol="tcp" port="9009" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="9009" accept"


重新载入防火墙,使配置生效

firewall-cmd --reload

查看配置结果

firewall-cmd --list-all

删除规则方法如下:

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.10.204.154" port protocol="tcp" port="2181" accept"

4.2 添加Zookeeper ACL

zookeeper下的zonde默认是所有人都可以访问。,可以通过添加zookeeper ACL访问控制,进一步提高安全性,配置参考如下:

zookeeper总体来说有5中权限crwda:
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,即:每个单词的首字符缩写)

下面介绍常用的ACL配置方式:

登陆zookeeper

cd /opt/zookeeper-3.4.13/bin
./zkCli.sh -s
addauth digest test:123456     #添加ACL认证用户,test用户名,123456是密码
ls   /    #查看zookeeper下的znode,默认有一个/zookeeper 
setAcl  /zookeeper  auth:test:123456:crwda      #对/zookeeper这个zonde添加ACL访问控制,其他zonde设置ACL方式相同,用户test,密码123456,所有权限。
getAcl /zookeeper   #查看 /zookeeper的访问权限,如下图

退出重新登陆zookeeper,访问/zookeeper会提示需要认证

cd /opt/zookeeper-3.4.13/bin
./zkCli.sh 
ls /zookeeper

addauth digest test:123456   #输入ACL认证用户
ls /zookeeper   #可正常访问

Zookeeper ACL注意事项

Zookeeper ACL仅与配置的znode有关,ACL不会递归的,例如:

zookeeper有目录:/zookeeper/quota

/zookeeper 设置ACL后,访问/zookeeper需要验证,但是访问/zookeeper/quota依旧可以直接访问,只有给/zookeeper/quota添加ACL认证,访问/zookeeper/quot时才会需要验证。

zonde的子zonde不会继承ACL,需要单独去配置每个zonde的ACL

4.3 MPP分布式集群设置ACL访问

场景一:首次部署MPP集群

在部署MPP集群时,只需要在每个MPP节点的集群配置文件添加zookeeper的ACL配置即可,参考如下:

附件:metrika.xml

当MPP集群启动时,在zookeeper内会自动给/clickhouse目录及其子目录添加ACL访问控制,ACL访问账号密码对应配置文件中设置的账号密码。

登陆zookeeper,查看/clickhouse目录权限如下图:

场景二:MPP集群已部署,新增ACL配置

修改MPP集群配置文件,需在每个MPP节点的集群配置文件添加zookeeper的ACL配置,并重启MPP。参考如下:

附件:metrika.xml

由于MPP启动后会自动在zookeeper内建立/clickhouse目录,已存在的目录无法通过MPP集群配置文件中的配置设置ACL,需要登陆zookeeper手工将/clickhouse和其子目录添加ACL认证。

cd /opt/zookeeper-3.4.13/bin
./zkCli.sh 
ls  /clickhouse

如上图所示,需要给每个目录下单独设置ACL

cd /opt/zookeeper-3.4.13/bin
./zkCli.sh 
addauth digest admin:manager     

setAcl  /clickhouse  auth:admin:manager:crwda  
setAcl  /clickhouse/task_queue  auth:admin:manager:crwda  
setAcl  /clickhouse/task_queue/ddl  auth:admin:manager:crwda  
...  #以此类推,将/clickhouse下的所有目录都添加ACL认证
getAcl /clickhouse    #可以通过getAcl 查看目录的权限
  • 无标签