ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

clickhouse集群搭建

2021-04-01 10:01:09  阅读:202  来源: 互联网

标签:xml 配置文件 default replica 集群 clickhouse 搭建


文章目录

安装clickhouse

本次用了4台服务器搭建clickhouse集群,使用rpm安装方式在4台服务器上安装clickhouse,步骤如下:

  1. sudo yum install -y curl
  2. curl ­-s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash
  3. sudo yum install ­-y clickhouse­-server clickhouse-­client

rpm安装后,会在服务器上生成如下几个文件:
在这里插入图片描述
默认的配置文件,对我们的管理是个隐患,建议把配置文件、数据目录、临时目录、日志文件,统一放在某个地方,即:
在这里插入图片描述
修改默认的shell脚本,修改默认配置文件的位置,即上面的start_.sh 修改前的启动脚本在/etc/init.d中,复制clickhouse-server文件更改即可
在这里插入图片描述
在这里插入图片描述

修改集群配置文件

集群配置文件在/etc/clickhouse-server文件夹下

  1. 修改基本配置文件config.xml,修改如下:
<?xml version="1.0"?>

<yandex>
	<!-- 日志 -->
    <logger>
        <level>trace</level>
        <log>/opt/clickhouse/log/server.log</log>
        <errorlog>/opt/clickhouse/log/error.log</errorlog>
        <size>1000M</size>
        <count>10</count>
    </logger>
	
	<!-- 端口 -->
    <http_port>8123</http_port>
    <tcp_port>9000</tcp_port>
	<interserver_http_port>9009</interserver_http_port>

	<!-- 本机域名 -->
    <interserver_http_host>192.168.254.14</interserver_http_host>
   
	<!-- 监听ip -->
    <listen_host>::</listen_host>
  
	<!-- 最大连接数 -->
    <max_connections>64</max_connections>
    <keep_alive_timeout>3</keep_alive_timeout>

    <!-- 最大并发查询数 -->
    <max_concurrent_queries>16</max_concurrent_queries>

    <!-- 单位为B -->
    <uncompressed_cache_size>8589934592</uncompressed_cache_size>
    <mark_cache_size>5368709120</mark_cache_size>

    <!-- 存储路径 -->
    <path>/opt/clickhouse/</path>
    <tmp_path>/opt/clickhouse/tmp/</tmp_path>

    <!-- user配置 -->
    <users_config>users.xml</users_config>
    <default_profile>default</default_profile>

	<log_queries>1</log_queries>
    <default_database>default</default_database>

    <remote_servers incl="clickhouse_remote_servers" />
    
    <zookeeper incl="zookeeper-servers" optional="true" />

    <macros incl="macros" optional="true" />

    <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>


    <!-- Maximum session timeout, in seconds. Default: 3600. -->
    <max_session_timeout>3600</max_session_timeout>

    <!-- Default session timeout, in seconds. Default: 60. -->
    <default_session_timeout>60</default_session_timeout>
	
	<!-- 控制大表的删除 -->
    <max_table_size_to_drop>0</max_table_size_to_drop>

    <include_from>/opt/clickhouse/metrika.xml</include_from>
  
</yandex>

注意:需在文件里加上include_from,这个指向了clickhouse集群的配置
在这里插入图片描述

  1. 创建clickhouse集群的配置:metrika.xml
<?xml version="1.0"?>

<yandex>
	<!-- 集群配置 -->
	<clickhouse_remote_servers>
		<dgg_ck_cluster>
			
			<!-- 数据分片1  -->
			<shard>
				<weight>1</weight>
				<internal_replication>true</internal_replication>
				<replica>
					<host>slave2</host>
					<port>9000</port>
					<user>default</user>
					<password>m8yjvWQ+</password>
				</replica>
				<replica>
					<host>slave3</host>
					<port>9000</port>
					<user>default</user>
					<password>m8yjvWQ+</password>
				</replica>
			</shard>

			<!-- 数据分片2  -->
			<shard>
				<weight>1</weight>
				<internal_replication>true</internal_replication>
				<replica>
					<host>slave4</host>
					<port>9000</port>
					<user>default</user>
					<password>m8yjvWQ+</password>
				</replica>
				<replica>
					<host>slave5</host>
					<port>9000</port>
					<user>default</user>
					<password>m8yjvWQ+</password>
				</replica>
			</shard>

		</dgg_ck_cluster>
	</clickhouse_remote_servers>
	
	<macros>
          <shard>01</shard>
          <replica>01</replica>
    </macros>

	<!-- ZK  -->
	<zookeeper-servers>
	  <node index="1">
		<host>slave2</host>
		<port>2181</port>
	  </node>
	  <node index="2">
		<host>slave3</host>
		<port>2181</port>
	  </node>
	  <node index="3">
		<host>slave4</host>
		<port>2181</port>
	  </node>
	</zookeeper-servers>

	<!-- 数据压缩算法  -->
	<clickhouse_compression>
	<case>
	  <min_part_size>10000000000</min_part_size>
	  <min_part_size_ratio>0.01</min_part_size_ratio>
	  <method>lz4</method>
	</case>
	</clickhouse_compression>
</yandex>

解释如下:
dgg_ck_cluster是集群名,可以任意配置
whight是权重,代表数据有多大几率落入此分片,因为这里所有的概率都相同所以都设置为1
internal_replication表示是否将数据只写入一个副本,默认为false,在复制表的时候可能会导致重复和不一致。设置为true,表示数据只写入一个副本,其他的交给zk和集群自己复制
replica是副本,里面的user和password可以不要,如果改了default的密码就必须要加上,默认查询走的是default
shard是数据分片,可以有多个分片
macros是别名,每台服务器上都不一样,就相当于给服务器取了一个编号
zk是zookeeper的配置

  1. 修改user.xml
<?xml version="1.0"?>
<yandex>
    <!-- Profiles of settings. -->
    <profiles>
        <!-- 读写用户设置 -->
        <default>
            <max_memory_usage>10000000000</max_memory_usage>
            <use_uncompressed_cache>0</use_uncompressed_cache>
            <load_balancing>random</load_balancing>
        </default>

        <!-- 只写用户设置  -->
        <readonly>
            <max_memory_usage>10000000000</max_memory_usage>
            <use_uncompressed_cache>0</use_uncompressed_cache>
            <load_balancing>random</load_balancing>
            <readonly>1</readonly>
        </readonly>
    </profiles>

	<!-- 配额  -->
    <quotas>
        <!-- Name of quota. -->
        <default>
            <interval>
                <duration>3600</duration>
                <queries>0</queries>
                <errors>0</errors>
                <result_rows>0</result_rows>
                <read_rows>0</read_rows>
                <execution_time>0</execution_time>
            </interval>
        </default>
    </quotas>
	
    <users>
        <!-- 读写用户  -->
        <default>
            <password_sha256_hex>29c957adeb44605c0d378acc260ead6ebc08f632679d166752de99159be8da6e</password_sha256_hex>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip>
            </networks>
            <profile>default</profile>
            <quota>default</quota>
        </default>

        <!-- 只读用户,可以不添加 -->
        <ck>
            <password_sha256_hex>29c957adeb44605c0d378acc260ead6ebc08f632679d166752de99159be8da6e</password_sha256_hex>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip>
            </networks>
            <profile>readonly</profile>
            <quota>default</quota>
        </ck>
    </users>
</yandex>

注意:密码有2种,一种是明文,一种是写sha256sum的Hash值,官方不建议直接写明文密码。
如果设置明文密码,需要把上面user.xml文件的password_sha256_hex替换为password即可,中间写明文密码。如果想用密文,具体设置如下:
将改为<password_sha256_hex>,之间填加密之后的东西

如何加密?(当时看见很懵逼),操作如下:
在这里插入图片描述
具体命令:
PASSWORD= ( b a s e 64 < / d e v / u r a n d o m ∣ h e a d − c 8 ) ; e c h o " (base64 < /dev/urandom | head -c8); echo " (base64</dev/urandom∣head−c8);echo"PASSWORD"; echo -n “$PASSWORD” | sha256sum | tr -d ‘-’
只需要把下面那一长串的东西放入<password_sha256_hex>,然后重启,搞定。
登录的时候就需要使用–password EM4Zxr+C来登录了。

然后发送配置文件到每台服务器上。

启动clickhouse集群

分别在每台服务器上都启动,启动命令如下:
sh start-up.sh start
注意:可能会权限错误,更改当前目录下权限即可 chmod 777 log/data/data_old
登录clickhouse:clickhouse-client -u default --password 密码
运行命令:select * from system.clusters,出现下面的就搭建成功了
在这里插入图片描述

测试集群的可用性

ck里的引擎有十几个,这里只推荐3个:

  • MergeTree,是ck里最advanced的引擎,性能超高,单机写入可以达到50w峰值,查询性能非常快
  • ReplicatedMergeTree,基于MergeTree,同时引入zk,做了复制
  • Distributed,分布式引擎,本身不存储数据,可认为就是一个view,如果写入,会把请求丢到集群里的节点,如果查询,会帮你做查询转发再聚合返回

ReplicatedMergeTree + Distributed可以做到分布式+高可用

使用方式如下:

  1. 建立本地表,每个节点都需要建表
    CREATE TABLE ontime_replica (

    ) ENGINE = ReplicatedMergeTree(’/clickhouse/tables/ontime/{shard}’, ‘{replica}’, FlightDate, (Year, FlightDate), 8192);
    其中,{shard}和{replica}是macros配置(相当于环境变量)
    /clickhouse/tables/ontime/{shard}是zk的节点,可以在zk上去看
  2. 建立分布式表,可以所有节点都建,也可以部分节点建表:
    CREATE TABLE ontime_replica_all AS ontime_replica ENGINE = Distributed(dgg_ck_cluster, default, ontime_replica, rand())

Distributed(集群名,库,表名,rand()),rand()表示向分布式表插入数据时,将随机插入到副本。

一般来说写操作使用本地表,读操作使用all表。

ReplicatedMergeTree表也能这样建:
create table dgg_performance_aggr(

)ENGINE = ReplicatedMergeTree(’/clickhouse/tables/dgg_performance_aggr/{shard}’,
‘{replica}’) order by sign_user_id SETTINGS index_granularity = 8192

标签:xml,配置文件,default,replica,集群,clickhouse,搭建
来源: https://blog.csdn.net/anyitian/article/details/115366580

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有