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

SmartbiMPP 高速缓存库,列式数据库管理系统,用于指标库和数据抽取功能。

SmartbiMPP支持 22.8及以上版本,低于该版本则需自行更新。更新方法可参考文档MPP更新

安装包请联系Smartbi官方支持获取。

本文档主要说明2个节点如何部署多副本集群

1. 系统环境准备

1.1 集群系统环境

集群地址:

IP

主机名

角色

10.10.35.183

10-10-35-183

keeper-1,smartbimpp

10.10.35.184

10-10-35-184

keeper-2,smartbimpp

10.10.35.18510-10-35-185

keeper-3,smartbimpp

10.10.35.18610-10-35-186smartbimpp

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

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


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

1.2 防火墙配置

所有集群内的主机均需进行防火墙配置。

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

1.2.1 关闭防火墙

临时关闭防火墙(立即生效)

systemctl stop firewalld

永久关闭防火墙(重启后生效)

systemctl disable firewalld

查看防火墙状态

systemctl status firewalld

1.2.2 开启防火墙

相关服务及端口对照表

服务名

开放端口

smartbimpp

9000,8123,9009

keeper

9181,9444


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

firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --zone=public --permanent --add-port=8123/tcp
firewall-cmd --zone=public --permanent --add-port=9009/tcp
firewall-cmd --zone=public --permanent --add-port=9181/tcp
firewall-cmd --zone=public --permanent --add-port=9444/tcp

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

firewall-cmd --reload

查看防火墙的配置信息

firewall-cmd --list-all

1.3 设置系统环境

所有集群内的主机均需设置系统环境

1.3.1 关闭selinux

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

setenforce 0

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

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

温馨提示

建议关闭服务器虚拟内存,避免查询期间使用虚拟内存导致查询变慢和查询异常。

swapoff -a    #临时关闭

1.3.2 取消打开文件限制

在 /etc/security/limits.conf 文件末尾加入以下内容:

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

1.3.3 配置ip和主机名的映射 

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

10.10.35.162 10-10-35-162
10.10.35.163 10-10-35-163
10.10.35.164 10-10-35-164


2. 开始安装

2.1 安装介质

Centos 7.x/Redhat7.x

软件

安装包


SmartbiMPP


clickhouse-common-static-22.8.9.24.x86_64.rpm

clickhouse-server-22.8.9.24.x86_64.rpm

clickhouse-client-22.8.9.24.x86_64.rpm

libicu-50.2-3.el7.x86_64.rpm

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

2.2 安装配置SmartbiMPP

1、所有集群内的主机均需安装smartbimpp

2、本章节所有操作都需要在所有的节点进行配置

2.2.1 安装SmartbiMPP

若安装过程中提示缺少相关依赖,则需先安装依赖包

例如:rpm -ivh libicu-50.2-3.el7.x86_64.rpm


cd /data
rpm -ivh clickhouse-common-static-22.8.9.24.x86_64.rpm
rpm -ivh clickhouse-server-22.8.9.24.x86_64.rpm      #安装此rpm时,会提示是否设置默认数据库用户密码,不设置则直接回车,设置则输入密码后回车
rpm -ivh clickhouse-client-22.8.9.24.x86_64.rpm

2.2.2 SmartbiMPP的配置文件路径

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


2.2.3 配置日志存放路径

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

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

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



2.2.4 端口配置

修改的配置文件/etc/clickhouse-server/config.xml,

8123是JDBC驱动的连接端口。

9000是clickhouse-client的连接端口。

9009是用于集群之间数据交换

PS:一般不建议修改端口配置

2.2.5 数据存储目录配置

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

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

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


2.2.6 开启远程访问权限

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

2.2.7 设置smartbimpp内存大小

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

(可选)查询语句大小限制,默认的max_query_size最大是256 KiB,如果查询语句比较大,可以配置此项,下图配置为500M,可自行调整,但不超过mpp最大内存


2.2.8 设置用户密码

如果安装rpm时已经配置了用户密码,可以跳过此步骤

修改的配置文件/etc/clickhouse-server/users.xml

  • 方法一:设置明文密码

  • 方法二:设置加密密码(sha256sum加密)
echo -n "manager" | sha256sum | tr -d '-'

设置密码

3 配置SmartbiMPP集群

四个节点全部按照上面的指导部署单节点成功后,开始配置部署集群。

4个节点的smartbimpp,需要配置两个集群,一个是2分片2副本的集群,一个是1分片4副本集群。

部署架构图:

2分片2副本集群:2分片是指数据分成2份,每份各占50%。2副本是指2个分片,各有一个备份的副本,防止smartbimpp宕机后无法继续使用。抽取时,大宽表使用2分片2副本的集群。

1、在服务器1(node1)配置分片1(shard1),服务器2上配置服务器1(node1)的分片(shard1)的副本(replica1)。

2、在服务器3(node3)配置分片2(shard2),服务器4上配置服务器3(node3)的分片(shard2)的副本(replica2)。


1分片4副本集群:1分片是指数据全部保存在一个节点。4副本是指分片的数据,具有4个备份(即每个节点都有一份完整的数据)。抽取时,小表使用1分片4副本的集群。

在服务器1(node1)配置分片1(shard1),服务器2上配置服务器1(node1)的分片(shard1)的副本(replica1)

3、在node1,node2,node3节点配置keeper集群(如果服务器资源充足,可以把keeper集群单独的服务器部署)。


具体操作如下:

配置分片集群和副本集群:
在服务器1,服务器2,服务器3,服务器4 的smartbiMPP节点,按以下要求进行配置

修改的配置文件/etc/clickhouse-server/config.xml文件

vi /etc/clickhouse-server/config.xml

找到<remote_servers>标签,在标签下面增加集群配置。

如果smartbiMPP有四个节点,需要配置2个集群类型。

1、配置2分片2副本集群。

2、配置1分片4副本集群。

参考配置如下:

<!-- 集群名称 2分片2副本 -->
<smartbi_cluster_2S_2R>
	<!-- 分片1 -->
    <shard>
        <internal_replication>true</internal_replication>
		<!-- 副本1 -->
        <replica>
			<!-- 副本1对应主机地址,端口 -->
            <host>10-10-35-183</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password>        
        </replica>
		<!-- 副本2 -->
        <replica>
			<!-- 副本2对应主机地址,端口 -->
            <host>10-10-35-184</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password> 
        <!-- 副本n 参考副本1~2配置即可 -->
        </replica>
    </shard>

    <!-- 分片2 -->
    <shard>
        <internal_replication>true</internal_replication>
		<!-- 副本1 -->
        <replica>
			<!-- 副本1对应主机地址,端口 -->
            <host>10-10-35-185</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password>        
        </replica>
		<!-- 副本2 -->
        <replica>
			<!-- 副本2对应主机地址,端口 -->
            <host>10-10-35-186</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password> 
        </replica>
    </shard>
</smartbi_cluster_2S_2R>

<!-- 集群名称1分片4副本 -->
<smartbi_cluster_1S_4R>
	<!-- 分片1 -->
    <shard>
        <internal_replication>true</internal_replication>
		<!-- 副本1 -->
        <replica>
			<!-- 副本1对应主机地址,端口 -->
            <host>10-10-35-183</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password>        
        </replica>
		<!-- 副本2 -->
        <replica>
			<!-- 副本2对应主机地址,端口 -->
            <host>10-10-35-184</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password> 
        </replica>
        <!-- 副本3 -->
        <replica>
			<!-- 副本3对应主机地址,端口 -->
            <host>10-10-35-185</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password> 
        </replica>
        <!-- 副本4 -->
        <replica>
			<!-- 副本4对应主机地址,端口 -->
            <host>10-10-35-186</host>
            <port>9000</port>
			<!-- 集群分片节点的用户名和密码 -->
			<user>default</user>    
            <password>manager</password> 
        </replica>
    </shard>
</smartbi_cluster_1S_4R>

1、如果集群没有密码,可以不配置user和password标签。生产环境建议配置账户密码,保证数据安全。

2、password标签仅支持明文密码。


配置keeper集群信息

在服务器1,服务器2,服务器3的smartbiMPP节点,按以下要求进行配置

找到<zookeeper>标签,放开zookeeper集群的注释,参考以下说明进行配置。

<!-- keeper配置标签起始点 -->
<zookeeper>
		<!-- keeper节点1配置 -->
        <node>
            <host>10-10-35-183</host>
            <port>9181</port>
        </node>
		<!-- keeper节点3配置 -->
        <node>
            <host>10-10-35-184</host>
            <port>9181</port>
        </node>
		<!-- keeper节点3配置 -->
        <node>
            <host>10-10-35-185</host>
            <port>9181</port>
        </node>
</zookeeper>

1、keeper是clickhouse研发的集群数据同步工具,具体功能作用类似zookeeper。

2、由于keeper和zookeeper一样,使用选举方式指定主节点(leader),所以keeper集群也和zookeeper一样,要求配置奇数个节点,最少3个节点。

3、抽取数据或查询数据时,keeper会有比较大的磁盘io压力,建议keeper的存储目录单独挂载一个硬盘,最好是固态硬盘。

服务器1的配置

配置keeper节点

修改集群配置文件

vi /etc/clickhouse-server/config.xml

keeper服务是集成在clickhouse的进程服务中的,但是需要单独配置开启,具体方式如下:

<!-- keeper_server配置标签,表示开启本节点的keeper服务 -->
<keeper_server>
	<!-- keeper服务的端口 -->
    <tcp_port>9181</tcp_port>
	<!-- keeper服务的server_id,一般第一个节点配置1,第二个节点配置2,以此类推 -->
    <server_id>1</server_id>
	<!-- keeper服务的日志存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
	<!-- keeper服务的快照存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
		
	<!-- keeper服务的其他参数信息,保持默认即可 -->
    <coordination_settings>
        <operation_timeout_ms>10000</operation_timeout_ms>
        <session_timeout_ms>30000</session_timeout_ms>
        <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
		<!-- keeper服务第一个节点配置信息 -->
        <server>
            <id>1</id>
            <hostname>10-10-35-183</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第二个节点配置信息 -->
        <server>
            <id>2</id>
            <hostname>10-10-35-184</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第三个节点配置信息 -->
        <server>
            <id>3</id>
            <hostname>10-10-35-185</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>

配置smartbiMPP集群的宏变量

找到<macros>标签,并且放开注释。具体配置参考以下说明。

需要在<macros>中配置2个集群(1分片4副本,2分片2副本)对应的分片及副本名称。

节点1:以下内容只在节点1配置
<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>01</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-01-01</smartbi_cluster_2S_2R_replica>
    
    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-01</smartbi_cluster_1S_4R_replica>
</macros>



节点2:以下内容只在节点2配置
<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>01</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-01-02</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-02</smartbi_cluster_1S_4R_replica>
</macros>

节点3:以下内容只在节点3配置
<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>02</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-02-01</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-03</smartbi_cluster_1S_4R_replica>
</macros>

节点4:以下内容只在节点4配置
<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>02</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-02-02</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-04</smartbi_cluster_1S_4R_replica>
</macros>

1、macros宏变量的参数变量命名规范:

集群分片名称:集群名称_shard

集群副本名称:集群名称_replica

集群名称可以参考上面的<remote_servers>标签里面配置的集群名称。

例如:

smartbi_cluster_2S_2R_shard对应的是smartbi_cluster_2S_2R集群的分片名称

smartbi_cluster_2S_2R_replica对应的是smartbi_cluster_2S_2R集群的副本名称


服务器2

配置keeper节点

修改集群配置文件

vi /etc/clickhouse-server/config.xml

keeper服务是集成在clickhouse的进程服务中的,但是需要单独配置开启,具体方式如下:

<!-- keeper_server配置标签,表示开启本节点的keeper服务 -->
<keeper_server>
	<!-- keeper服务的端口 -->
    <tcp_port>9181</tcp_port>
	<!-- keeper服务的server_id,一般第一个节点配置1,第二个节点配置2,以此类推 -->
    <server_id>2</server_id>
	<!-- keeper服务的日志存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
	<!-- keeper服务的快照存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
		
	<!-- keeper服务的其他参数信息,保持默认即可 -->
    <coordination_settings>
        <operation_timeout_ms>10000</operation_timeout_ms>
        <session_timeout_ms>30000</session_timeout_ms>
        <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
		<!-- keeper服务第一个节点配置信息 -->
        <server>
            <id>1</id>
            <hostname>10-10-35-183</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第二个节点配置信息 -->
        <server>
            <id>2</id>
            <hostname>10-10-35-184</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第三个节点配置信息 -->
        <server>
            <id>3</id>
            <hostname>10-10-35-185</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>

配置smartbiMPP集群的宏变量

找到<macros>标签,并且放开注释。具体配置参考以下说明。

需要在<macros>中配置2个集群(1分片4副本,2分片2副本)对应的分片及副本名称。

<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>01</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-01-02</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-02</smartbi_cluster_1S_4R_replica>
</macros>

1、macros宏变量的参数变量命名规范:

集群分片名称:集群名称_shard

集群副本名称:集群名称_replica

集群名称可以参考上面的<remote_servers>标签里面配置的集群名称。

例如:

smartbi_cluster_1S_4R_shard对应的是smartbi_cluster_1S_4R集群的分片名称

smartbi_cluster_1S_4R_replica对应的是smartbi_cluster_1S_4R集群的副本名称



服务器3

配置keeper节点

修改集群配置文件

vi /etc/clickhouse-server/config.xml

keeper服务是集成在clickhouse的进程服务中的,但是需要单独配置开启,具体方式如下:

<!-- keeper_server配置标签,表示开启本节点的keeper服务 -->
<keeper_server>
	<!-- keeper服务的端口 -->
    <tcp_port>9181</tcp_port>
	<!-- keeper服务的server_id,一般第一个节点配置1,第二个节点配置2,以此类推 -->
    <server_id>3</server_id>
	<!-- keeper服务的日志存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
	<!-- keeper服务的快照存储路径,可以自行指定,此目录需要配置clickhouse用户的读写权限。 -->
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
		
	<!-- keeper服务的其他参数信息,保持默认即可 -->
    <coordination_settings>
        <operation_timeout_ms>10000</operation_timeout_ms>
        <session_timeout_ms>30000</session_timeout_ms>
        <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
		<!-- keeper服务第一个节点配置信息 -->
        <server>
            <id>1</id>
            <hostname>10-10-35-183</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第二个节点配置信息 -->
        <server>
            <id>2</id>
            <hostname>10-10-35-184</hostname>
            <port>9444</port>
        </server>
		<!-- keeper服务第三个节点配置信息 -->
        <server>
            <id>3</id>
            <hostname>10-10-35-185</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>

配置smartbiMPP集群的宏变量

找到<macros>标签,并且放开注释。具体配置参考以下说明。

需要在<macros>中配置2个集群(1分片4副本,2分片2副本)对应的分片及副本名称。

<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>02</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-02-01</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-03</smartbi_cluster_1S_4R_replica>
</macros>

1、macros宏变量的参数变量命名规范:

集群分片名称:集群名称_shard

集群副本名称:集群名称_replica

集群名称可以参考上面的<remote_servers>标签里面配置的集群名称。

例如:

smartbi_cluster_1S_4R_shard对应的是smartbi_cluster_1S_4R集群的分片名称

smartbi_cluster_1S_4R_replica对应的是smartbi_cluster_1S_4R集群的副本名称


服务器4:

第4个节点,不需要配置keeper。

配置smartbiMPP集群的宏变量

找到<macros>标签,并且放开注释。具体配置参考以下说明。

需要在<macros>中配置2个集群(1分片4副本,2分片2副本)对应的分片及副本名称。

<macros>
	<!-- smartbi_cluster_2S_2R集群的分片名称 -->
	<smartbi_cluster_2S_2R_shard>02</smartbi_cluster_2S_2R_shard>
	<!-- smartbi_cluster_2S_2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-02-01,第四个节点配置ch-02-02, -->
    <smartbi_cluster_2S_2R_replica>ch-02-01</smartbi_cluster_2S_2R_replica>

    <!-- smartbi_cluster_1S_4R集群的分片名称 -->
    <smartbi_cluster_1S_4R_shard>01</smartbi_cluster_1S_4R_shard>
    <!-- smartbi_cluster_1S_4R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,第三个节点配置ch-01-03,第四个节点配置ch-01-04, -->
    <smartbi_cluster_1S_4R_replica>ch-01-03</smartbi_cluster_1S_4R_replica>
</macros>

1、macros宏变量的参数变量命名规范:

集群分片名称:集群名称_shard

集群副本名称:集群名称_replica

集群名称可以参考上面的<remote_servers>标签里面配置的集群名称。

例如:

smartbi_cluster_1S_4R_shard对应的是smartbi_cluster_1S_4R集群的分片名称

smartbi_cluster_1S_4R_replica对应的是smartbi_cluster_1S_4R集群的副本名称



配置多副本集群参数

修改集群配置文件

vi /etc/clickhouse-server/users.xml

keeper服务是集成在clickhouse的进程服务中的,但是需要单独配置开启,具体方式如下:

<!--默认值为0,表示不启用原子写入;设置为与smartbi_replica集群中的副本数相等-->
<insert_quorum>2</insert_quorum>

<!--默认值为600000毫秒(10分钟);改为30分钟以防止写入和同步副本超时-->
<insert_quorum_timeout>1800000</insert_quorum_timeout>

insert_quorum:副本原子写入数,需要配置和副本数量一致。

insert_quorum_timeout:副本同步超时时间,默认10分钟,改为30分钟

配置参数应该配置在users.xml的<profiles><default>里面,可以参考以下截图说明

2、重启SmartbiMPP

在所有节点,重启smartbiMPP

clickhouse restart 

登录SmartbiMpp查看集群

# 第一个节点:
clickhouse-client --host 10-10-35-162 --port 9000 --database default --user default --password manaer
# 第二个节点:
clickhouse-client --host 10-10-35-163 --port 9000 --database default --user default --password manager
# 查询集群状态信息
select * from system.clusters;

任意节点查询

可以看到smartbi_cluster_1S_4R和smartbi_cluster_2S_2R就是我们定义的集群名称

其中smartbi_cluster_2S_2R共有2个分片,2个副本。smartbi_cluster_1S_4R共有1个分片,4个副本



5、插入数据验证集群

任意节点创建数据库(测试验证1分片4副本集群)

create database if not exists smartbitest_1S_4R ON CLUSTER smartbi_cluster_1S_4R;

所有节点分别查看数据库,都有新创建的数据库smartbitest_1S_4R 

show databases;

查看每个节点定义的宏变量

select * from system.macros;

服务器1:

服务器2:



服务器3:

服务器4:



6、测试集群
任意节点创建本地表

use smartbitest_1S_4R;
create table db_1S_4R_local ON CLUSTER smartbi_cluster_1S_4R (ID Int8, Name String, BirthDate Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{smartbi_cluster_1S_4R_shard}/db_1S_4R_local','{smartbi_cluster_1S_4R_replica}') PARTITION BY toYYYYMMDD(BirthDate) ORDER BY (Name, BirthDate) SETTINGS index_granularity = 8192;


创建完后可以看到两个节点都有刚刚创建的表


在任意节点插入5条数据:

insert into db_1S_4R_local (ID,Name,BirthDate)values(1,'zhangsan','2001-10-12');
insert into db_1S_4R_local (ID,Name,BirthDate)values(2,'lisi','2002-11-13');
insert into db_1S_4R_local (ID,Name,BirthDate)values(3,'wangwu','2003-10-11');
insert into db_1S_4R_local (ID,Name,BirthDate)values(4,'zhaoliu','2004-09-02');
insert into db_1S_4R_local (ID,Name,BirthDate)values(5,'tianqi','2005-08-22');

查询插入的数据:

#每个节点的行数
select count(1) from smartbitest_1S_4R.db_1S_4R_local; 

每个节点查询到“db_1S_4R_local”的总行数都是相同的,服务器1,2,3,4都有完整数据,达到数据的备份和高可用要求。

任意一个mpp节点宕机,另一个节点能正常查询数据。

服务器1:

服务器2:

服务器3:

服务器4:


测试验证2分片2副本集群

任意节点创建数据库(测试验证2分片2副本集群)

create database if not exists smartbitest_2S_2R ON CLUSTER smartbi_cluster_2S_2R;

所有节点分别查看数据库,都有新创建的数据库smartbitest_1S_4R 

show databases;

查看每个节点定义的宏变量

select * from system.macros;

服务器1:

服务器2:



服务器3:


服务器4:


6、测试集群
任意节点创建表

use smartbitest_2S_2R;
## 创建多副本表
create table db_2S_2R_local ON CLUSTER smartbi_cluster_2S_2R (ID Int8, Name String, BirthDate Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{smartbi_cluster_2S_2R_shard}/db_2S_2R_local','{smartbi_cluster_2S_2R_replica}') PARTITION BY toYYYYMMDD(BirthDate) ORDER BY (Name, BirthDate) SETTINGS index_granularity = 8192;

## 创建分布式表
CREATE TABLE db_2S_2R_all ON CLUSTER smartbi_cluster_2S_2R (ID Int8, Name String, BirthDate Date) ENGINE = Distributed(smartbi_cluster_2S_2R, smartbitest_2S_2R, db_2S_2R_local, rand());

创建副本表

创建分布式表


创建完后可以看到所有节点都有刚刚创建的两个表


在任意节点插入5条数据(往all表导入数据):

insert into smartbitest_2S_2R.db_2S_2R_all (ID,Name,BirthDate)values(1,'zhangsan','2001-10-12');
insert into smartbitest_2S_2R.db_2S_2R_all (ID,Name,BirthDate)values(2,'lisi','2002-11-13');
insert into smartbitest_2S_2R.db_2S_2R_all (ID,Name,BirthDate)values(3,'wangwu','2003-10-11');
insert into smartbitest_2S_2R.db_2S_2R_all (ID,Name,BirthDate)values(4,'zhaoliu','2004-09-02');
insert into smartbitest_2S_2R.db_2S_2R_all (ID,Name,BirthDate)values(5,'tianqi','2005-08-22');

查询插入的数据:

#每个节点的行数
# 查询全量表
select count(1) from smartbitest_2S_2R.db_2S_2R_all; 

# 查询本地表
select count(1) from smartbitest_2S_2R.db_2S_2R_local;

1、在任意节点查询全量表都是完整的数据。

2、由于是2分片2副本集群,服务器1,服务器2互为副本,所以在服务器1,服务器2的数据是一样的。

3、由于是2分片2副本集群,服务器3和服务器4互为副本,所以服务器3,服务器4的数据是一样的。

4、由于是2分片2副本集群,【服务器1,服务器2】 跟【服务器3, 服务器4】做了分片,所以服务器1+服务器3的总行数等于全量表的总行数。

每个节点查询到“db_2S_2R_all”的总行数都是相同的,服务器中各分片数据也都有副本,可以实现数据的备份和高可用要求。

任意一个mpp节点宕机,其他节点能正常查询数据。

服务器1:

全量表有5行数据。

本地表有4行数据

服务器2:

全量表有5行数据。


本地表有4行数据


服务器3:

全量表有5行数据。

本地表有1行数据

服务器4:

全量表有5行数据。

本地表有1行数据

1、任意节点中,查询全量表都是全部数据。

2、本地表的数据分布不是绝对的55开,可能有一台数据量多一点,另一台数据量少一点。当中行数比较大时,各个分片的数据基本平衡。

3、节点1的本地表跟节点2的本地表的是互为副本(备份),所以数据是一样的。

4、节点3的本地表跟节点4的本地表的是互为副本(备份),所以数据是一样的。

5、节点1或节点2的本地表行数+节点3或节点4的本地表行数等于全量表的总行数。

2.8 测试SmartbiMPP

2.8.1. 配置高速缓存库

数据连接 > 高速缓存库 ,进入高速缓存库的配置项,在连接字符串最后面添加参数 "&clusterName=smartbi_cluster_2S_2R&clusterReplicaName=smartbi_cluster_1S_4R" ,如下图所示。

3. 运维操作

3.1 停止/启动/重启Smartbi MPP

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

3.2 Smartbi MPP高可用设置

多副本集群默认宕机节点后,无法正常查询,和建表,如果需要实现宕机1个节点也能正常使用,可以参考以下方法进行配置

1、1分片2副本集群为例,修改集群配置文件(每个MPP节点都要调整)

vi /etc/clickhouse-server/users.xml

找到以下配置修改<insert_quorum选项至为1,表示只要有一个副本表写入成功,即数据写入完成

<!--默认值为0,表示不启用原子写入;设置为与smartbi_replica集群中的副本数减1,即2副本设置为1,3副本设置为2,以此类推-->
<insert_quorum>1</insert_quorum>

2、新增配置项,允许1个节点宕机后,仍然允许执行ddl等建表语句。

默认MPP多副本集群在执行ddl语句时,会向所有节点都发送执行语句,如果有节点宕机时,无法连接返回超时错误(默认180s)

vi /etc/clickhouse-server/users.xml

添加以下配置

<!--null_status_on_timeout 即使节点宕机;连接超时,但是不返回错误,而是返回null信息-->
<distributed_ddl_output_mode>null_status_on_timeout</distributed_ddl_output_mode>

<!--ddl语句执行超时时间,默认180s,可以自定义-->
<distributed_ddl_task_timeout>60</distributed_ddl_task_timeout>

保存并重启所有MPP节点即可,当集群有1个节点宕机时,不影响高速缓存库查询和抽取。

MPP多副本集群宕机一个节点能,虽然仍然能建表、查询、插入数据等操作,但是速度会变慢(ddl语句时依旧会等待180s超时时间,可以配置),建议尽快的恢复宕机节点,节点恢复后会通过keeper自动同步数据。

另外,MPP作为高速缓存库使用,而不是业务库,当MPP数据异常时,建议是清理掉数据,并重新抽取。

  

  • 无标签