页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...


目录

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关闭防火墙

临时关闭防火墙

代码块
linenumberstrue
systemctl stop firewalld

永久关闭防火墙

代码块
linenumberstrue
systemctl disable firewalld

查看防火墙状态

代码块
linenumberstrue
systemctl status firewalld

1.2.2开启防火墙

相关服务及端口对照表

服务名

开放端口

smartbi-mpp

9000,8123,9009

Zookeeper

2181

...


如果确实需要打开防火墙安装,需要给防火墙放开以下需要使用到的端口

...

开启端口:9000、8123、2181、2888、3888、9009

代码块
linenumberstrue
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=8123/tcp
firewall-cmd --permanent --add-port=2181

...

/tcp

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

代码块
linenumberstrue
firewall-cmd --reload

查看防火墙的配置信息

代码块
linenumberstrue
firewall-cmd --list-all

1.2.3关闭selinux

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

代码块
linenumberstrue
setenforce 0

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

代码块
linenumberstrue
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-

...

linenumberstrue

...

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

2.2设置系统环境

注意

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

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

代码块
linenumberstrue
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

...

2、添加hosts文件解析 :

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

代码块
linenumberstrue
192.168.99.104 test1
192.168.99.105 test2

2.3 安装Java环境

注意

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

 安装包解压到/opt目录

代码块
linenumberstrue
tar -zxvf jdk8.0.202-linux_x64.tar.gz -C /opt

配置java环境变量

...

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

代码块
linenumberstrue

...

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

②使配置生效

代码块
linenumberstrue
source ~/

...

.bash_profile

③查看java版本信息

代码块
linenumberstrue
java -version

2.4

...

安装zookeeper

...

test1主机安装

...

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

代码块
linenumberstrue
tar -zxvf zookeeper-3.4.13.tar.gz -C /opt

...

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

代码块
linenumberstrue
cd /opt/zookeeper-3.4.13/
mkdir data
mkdir log

...

③修改zookeeper配置文件

代码块
linenumberstrue

...

mkdir {data,log}
cd /opt/zookeeper-3.4.13/conf/

移动重命名配置文件

代码块
linenumberstrue

...

mv zoo_sample.cfg zoo.cfg

...

修改配置文件,

代码块
linenumberstrue
vi zoo.cfg

...

参考配置如下:

代码块
languagebash
linenumberstrue
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

...

Image Removed
Image Removed
⑤复制zookeeper到其他集群机器test2

...

2.5启动zookeeper

1、启动zookeeper

代码块
languagebash
linenumberstrue

...

cd /

...

opt/zookeeper-3.4.13/bin

...

⑥执行以下命令创建myid文件,并写入ID,集群机器myid不可相同。

...

linenumberstrue

...

./zkServer.sh start /opt/zookeeper-3.4.13/

...

集群机器test2操作:
#执行以下命令创建myid文件,并写入ID,集群机器myid不可相同。

代码块
linenumberstrue
echo 2 > /data/Smartbi-MPP-Colony/zookeeper-3.4.13/data/myid

⑦启动zookeeper集群

...

conf/zoo.cfg

2、查看zookeeper状态

代码块
languagebash
linenumberstrue
cd /

...

opt/zookeeper-3.4.13/bin

...


...

Image Removed
查看状态

...

linenumberstrue
./zkServer.sh status 

...

Image Removed
#其中有一个节点是leader,有一个节点是follower,证明zookeeper集群是部署成功。
⑧测试zookeeper集群

#连接lader节点,创建节点数据

代码块
linenumberstrue
./zkCli.sh -server test2:2181 
create /zk-cluster-test cluster-data 

Image Removed
#连接follower节点查看创建的节点数据

代码块
linenumberstrue
./zkCli.sh -server test1:2181 
get /zk-cluster-test

Image Removed
Zookeeper集群测试成功。

2.5安装配置SmartbiMPP

...

/opt/zookeeper-3.4.13/conf/zoo.cfg

2.6安装配置SmartbiMPP

注意

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

1、安装SmartbiMPP

...

代码块
linenumberstrue
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 <新的日志目录>  


Image Modified

...

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

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

  1. 修改数据目录

...

Smartbi Mpp数据存储目录

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

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

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

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

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

...

7、设置用户密码

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

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

代码块
linenumberstrue
echo -n "manager" | sha256sum | tr -d '-'

Image Modified
设置密码
Image Modified

...

8、启动smartbimpp

代码块
linenumberstrue
systemctl start clickhouse-server 

2.

...

7集群部署

...

1、2个节点全部按照上面的指导部署单节点成功后,开始配置部署集群。
以test1节点为例

...

(所有节点均需操作):
添加集群配置文件

代码块
linenumberstrue
vi /etc/metrika.xml

参考附件:

metrika.xml

...

注意
titlemetrika.xml文件须知

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

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

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

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

代码块
linenumberstrue
chown  clickhouse.clickhouse /etc/metrika.xml


2、重启SmartbiMPP

代码块
linenumberstrue
systemctl restart clickhouse-server

登录SmartbiMpp查看集群

代码块
linenumbers

...

true

...

#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;

...

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


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

...

代码块
linenumberstrue
create database if not exists smartbimpp;
show databases;

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

...

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

创建分片表:

...

代码块
linenumberstrue
CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(smartbi, smartbimpp, ontime_local, rand()); 

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

代码块
linenumberstrue
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);

查询插入的数据:

代码块
linenumberstrue
select count(1) from ontime_all; #查看总行数

...


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

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

...

2.

...

8测试SmartbiMPP

1、配置高速缓存库,需要在连接字符串最后面添加

...

&clusterName=smartbi 参数,如下图所示。

...

Image Added 
2、抽数测试
以新建自助数据集为例
Image Modified
选择一个表(需要带时间字段),刷新并保存数据集
Image Modified
Image Modified
Image Modified
如下图,点击确定保存新的数据集
Image Modified
再次点击分区字段,选择分区字段和分区类型,如下图所示,并点击立即抽取开始抽数。
Image Modified
点击确定,开始抽取
Image Modified
抽取完成。
Image Modified

...


访问SmartbiMPP,查看抽取的数据

test1节点:
Image Modified
Image Modified
test2节点:
Image Modified
Smartbimpp分片集群部署成功。

...

4、运维操作

...

3、运维操作

3.1停止/启动/重启zookeeper

启动zookeeper

代码块
languagebash
linenumberstrue
cd /opt/zookeeper-3.4.13/bin
./zkServer.sh start /opt/zookeeper-3.4.13/conf/zoo.cfg

重启zookeeper

代码块
languagebash
linenumberstrue
cd /opt/zookeeper-3.4.13/bin
./zkServer.sh restart /opt/zookeeper-3.4.13/conf/zoo.cfg

停止zookeeper

代码块
languagebash
linenumberstrue
cd /opt/zookeeper-3.4.13/bin
./zkServer.sh stop

3.2停止/启动/重启Smartbi MPP


代码块
linenumbers

...

true
#停止服务
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端口访问,设置端口访问白名单。参考如下:

#启动防火墙

代码块
languagebash
linenumberstrue
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,根据实际环境修改)

代码块
languagebash
linenumberstrue
#以下命令在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"


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

代码块
languagebash
linenumberstrue
firewall-cmd --reload

查看配置结果

代码块
languagebash
linenumberstrue
firewall-cmd --list-all

删除规则方法如下:

代码块
languagebash
linenumberstrue
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

代码块
languagebash
linenumberstrue
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的访问权限,如下图

Image Added

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

代码块
languagebash
linenumberstrue
cd /opt/zookeeper-3.4.13/bin
./zkCli.sh 
ls /zookeeper

Image Added

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


注意
titleZookeeper 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

Image Added

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

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

Image Added



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

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

附件:metrika.xml

Image Added

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

代码块
languagebash
linenumberstrue
cd /opt/zookeeper-3.4.13/bin
./zkCli.sh 
ls  /clickhouse

Image Added

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

代码块
languagebash
linenumberstrue
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 查看目录的权限