页面树结构

版本比较

标识

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

...

注意

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

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

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

...

相关服务及端口对照表

服务名

开放端口

smartbimpp

9000,8123,90099000,8123,9009

keeper

91819181,9444


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

...

软件

安装包


SmartbiMPP


clickhouse-common-static-22.38.129.1924.x86_64.rpm

clickhouse-server-22.38.129.1924.x86_64.rpm

clickhouse-client-22.38.129.1924.x86_64.rpm

libicu-50.2-3.el7.x86_64.rpm

...

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

2.2.2 SmartbiMPP的配置文件路径

...

代码块
linenumberstrue
chown -R clickhouse.clickhouse <新的日志目录>  


Image Modified
2.2.4 端口配置

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

...

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

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

2.2.5 数据存储目录配置

...

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


2.2.6 开启远程访问权限

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

2.2.7 设置smartbimpp内存大小

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

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

Image Modified


2.2.8 设置用户密码

...

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

  • 方法一:设置明文密码

Image Modified

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

Image Modified

设置密码

Image Modified

3 配置SmartbiMPP集群

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

部署架构图:

Image Modified

如上图所示,需要在服务器1,服务器2上配置SmartbiMPP的1分片2副本集群。

...

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

Image Modified

如果smartbiMPP只有两个节点,建议配置1分片2副本集群。参考配置如下:

代码块
linenumberstrue
collapsetrue
<!-- 集群名称 -->
<smartbi_cluster_1S_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>
</smartbi_cluster_1S_2R>

...

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

代码块
注意
当抽取时触发keeper异常的报错,建议keeper节点的 <log_storage_path> 和 <snapshot_storage_path> 能配置在独立的硬盘,降低跟smartbimpp写数据时的磁盘io冲突。


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


注意
当抽取数据量比较大,服务器的磁盘io压力比较高时,建议keeper节点的 <log_storage_path> 和 <snapshot_storage_path> 能配置在独立的硬盘,降低跟smartbimpp写数据时的磁盘io冲突。

配置smartbiMPP集群的宏变量

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

...

代码块
linenumberstrue
collapsetrue
<macros>
	<!-- smartbi_cluster_1S_2R集群的分片名称 -->
	<smartbi_cluster_1S_2R_shard>01</smartbi_cluster_1S_2R_shard>
	<!-- smartbi_cluster_1S_2R集群的副本名称2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,以此类推 -->
    <smartbi_cluster_1S_2R_replica>ch-01-01</smartbi_cluster_1S_2R_replica>
</macros>

...

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

注意
当抽取时触发keeper异常的报错,建议keeper节点的 <log_storage_path> 和 <snapshot_storage_path> 能配置在独立的硬盘,降低跟smartbimpp写数据时的磁盘io冲突。


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

...

代码块
linenumberstrue
collapsetrue
<macros>
	<!-- smartbi_cluster_1S_2R集群的分片名称 -->
	<smartbi_cluster_1S_2R_shard>01</smartbi_cluster_1S_2R_shard>
	<!-- smartbi_cluster_1S_2R集群的副本名称2R集群的副本名称,一般第一个节点配置ch-01-01,第二个节点配置ch-01-02,以此类推 -->
    <smartbi_cluster_1S_2R_replica>ch-01-02</smartbi_cluster_1S_2R_replica>
</macros>

...

代码块
linenumberstrue
collapsetrue
<!--默认值为0,表示不启用原子写入;改为与smartbi默认值为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分钟

2、重启SmartbiMPP

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

Image Added

2、重启SmartbiMPP

在所有节点,重启smartbiMPP

代码块
linenumberstrue
clickhouse restart 

...

代码块
linenumberstrue
create database if not exists smartbitest_1S_2R ON CLUSTER smartbi_cluster_1S_2R;

Image Modified

两个节点分别查看数据库,都有新创建的数据库smartbitest_1S_2R 

...

代码块
linenumberstrue
select * from system.macros;

Image Modified

mpp-cluster-2节点

代码块
linenumberstrue
select * from system.macros;

Image Modified


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

代码块
linenumberstrue
use smartbitest_1S_2R;
create table db_1S_2R_local ON CLUSTER smartbi_cluster_1S_2R (ID Int8, Name String, BirthDate Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{smartbi_cluster_1S_2R_shard}/db_1S_2R_local','{smartbi_cluster_1S_2R_replica}') PARTITION BY toYYYYMMDD(BirthDate) ORDER BY (Name, BirthDate) SETTINGS index_granularity = 8192;



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

Image Modified


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

...

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

Image Modified

2.8 测试SmartbiMPP

...

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

Image Modified

3. 运维操作

3.

...

1 停止/启动/重启Smartbi MPP

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

3.2 Smartbi MPP高可用设置

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

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

代码块
linenumberstrue
vi /etc/clickhouse-server/users.xml

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

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


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

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

代码块
linenumberstrue
vi /etc/clickhouse-server/users.xml

添加以下配置

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

Image Added

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

注意

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

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