1. 系统环境准备
1.1 集群系统环境
集群地址:
IP | 主机名 | 角色 |
---|---|---|
10.10.34.32 | test1 | Zookeeper,smartbi-mpp |
10.10.34.33 | test2 | smartbi-mpp |
注意 |
---|
官方预构建的二进制文件通常针对x86_64进行编译,并利用
|
安装权限要求:
安装时用root用户运行或使用具有 sudo权限的用户执行。推荐使用root用户安装
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 |
注意 | ||
---|---|---|
| ||
建议关闭服务器虚拟内存,避免查询期间使用虚拟内存导致查询变慢和查询异常。 swapoff -a #临时关闭 |
2. 开始安装
2.1 安装介质
Centos 7.x/Redhat7.x
软件 | 安装包 |
---|---|
Smartbi-MPP |
|
clickhouse-server-21.6.6.51-2.noarch.rpm | |
clickhouse-client-21.6.6.51-2.noarch.rpm | |
libicu-50.2-3.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/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
① 启动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 status /opt/zookeeper-3.4.13/conf/zoo.cfg |
2.6 安装配置SmartbiMPP
注意 |
---|
集群内的主机均需安装smartbimpp(集群主机:test1,test2) |
1、安装SmartbiMPP
注意 |
---|
若安装过程中提示缺少相关依赖,则需先安装依赖包 例如:rpm -ivh libicu-50.2-3.el7.x86_64.rpm |
代码块 | ||
---|---|---|
| ||
cd /data/Smartbi-MPP-Colony/clickhous-package/ rpm -ivh clickhouse-common-static-21.6.6.51-2.x86_64.rpm rpm -ivh clickhouse-server-21.6.6.51-2.noarch.rpm rpm -ivh clickhouse-client-21.6.6.51-2.noarch.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是用于集群之间数据交换
PS:一般不建议修改端口配置
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。根据实际情况配置内存值
(可选)查询语句大小限制,默认的max_query_size最大是256 KiB,如果查询语句比较大,可以配置此项,下图配置为500M,可自行调整,但不超过mpp最大内存
7、设置用户密码
修改的配置文件/etc/clickhouse-server/users.xml
- 方法一:设置明文密码
- 方法二:设置加密密码(sha256sum加密)
代码块 | ||
---|---|---|
| ||
echo -n "manager" | sha256sum | tr -d '-' |
设置密码
8、指定集群配置文件
修改的配置文件/etc/clickhouse-server/config.xml,搜索remote_servers,找到指定位置后添加和修改以下配置:
<!--引入metrika.xml-->
<include_from>/etc/metrika.xml</include_from>
<--引用Zookeeper配置的定义-->
<zookeeper incl="zookeeper-servers" optional="true" />
<!--clickhouse_remote_servers节点引入-->
<remote_servers incl="clickhouse_remote_servers">
具体参考下图:
9、启动smartbimpp
代码块 | ||
---|---|---|
| ||
systemctl start clickhouse-server |
2.7 集群部署
1、2个节点全部按照上面的指导部署单节点成功后,开始配置部署集群。
以test1节点为例(所有节点均需操作):
添加集群配置文件
代码块 | ||
---|---|---|
| ||
vi /etc/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 ON CLUSTER smartbi;
show databases; |
6、测试分布式集群
选择任一节点创建数据表:
代码块 | ||
---|---|---|
| ||
use smartbimpp; CREATE TABLE ontime_local ON CLUSTER smartbi (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192); |
创建分片表:
代码块 | ||
---|---|---|
| ||
CREATE TABLE ontime_all ON CLUSTER smartbi (FlightDate Date,Year UInt16) 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
2.8.1. 配置高速缓存库
数据连接 > 高速缓存库 ,进入高速缓存库的配置项,在连接字符串最后面添加参数 "&clusterName=smartbi" ,如下图所示。
2.8.2. 数据抽取测试
以新建数据模型为例, 数据准备 > 数据模型
选择导入任意一个文件(仅支持导入Excel、CSV、txt、数据分析包)
数据加载成功即表示数据抽取完成
访问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仅与配置的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 查看目录的权限 |