clickhouse集群搭建(1)

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。可以用于PB级大数据实时分析,特点呢,就是快,比sparksql 和 impala还要快很多,同样也支持利用sql进行分析,相对于hadoop生态的那套,安装和学习成本要低很多

clickhouse中文文档
https://clickhouse.tech/docs/zh/
参考博客
https://www.jianshu.com/p/20639fdfdc99
https://www.jianshu.com/p/ae45e0aa2b52

  1. 创建clickhouse用户 (root用户执行)
useradd clickhouse -d /home/clickhouse
passwd clickhouse

1.png

2.上传安装包 (clickhouse用户执行)rz


2.png
  1. 添加sudo 权限(root用户执行)
    chmod u+w /etc/sudoers
    vim /etc/sudoers
    添加一行,保存并退出


    3.png

    chmod u-w /etc/sudoers

  2. 安装(clickhouse用户执行)
    cd /home/clickhouse
    sudo rpm –ivh *

4.png

5.启动服务
sudo service clickhouse-server start

6.clickhouse-client 命令直接连接执行 selet 1 验证

7.配置文件所在目录

6.png

8.users.xml 创建用户

8.png
  1. clickhouse-client连接参数
--host, -h -– 服务端的 host 名称, 默认是 ‘localhost’。 您可以选择使用 host 名称或者 IPv4 或 IPv6 地址。
--port – 连接的端口,默认值: 9000。注意 HTTP 接口以及 TCP 原生接口是使用不同端口的。
--user, -u – 用户名。 默认值: default。
--password – 密码。 默认值: 空字符串。
--query, -q – 非交互模式下的查询语句.
--database, -d – 默认当前操作的数据库. 默认值: 服务端默认的配置 (默认是 default)。
--multiline, -m – 如果指定,允许多行语句查询(Enter 仅代表换行,不代表查询语句完结)。
--multiquery, -n – 如果指定, 允许处理用逗号分隔的多个查询,只在非交互模式下生效。
--format, -f – 使用指定的默认格式输出结果。
--vertical, -E – 如果指定,默认情况下使用垂直格式输出结果。这与 ‘–format=Vertical’ 相同。在这种格式中,每个值都在单独的行上打印,这种方式对显示宽表很有帮助。
--time, -t – 如果指定,非交互模式下会打印查询执行的时间到 ‘stderr’ 中。
--stacktrace – 如果指定,如果出现异常,会打印堆栈跟踪信息。
--config-file – 配置文件的名称

10.创建数据库(命令行执行)

create database tclydcdb ENGINE = Ordinary;

11.表结构同步

第一步创建Mysql到CLickhouse的映射表插入1条数据,这里可以随表

CREATE TABLE Orders ENGINE = MergeTree ORDER BY OrderID AS SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 1;

第二步查询创建的表结构复制下来
show create table Orders;
第三步删除表
drop table Orders;
第四步将第二步复制的表结构里的Decimal字段类型进行变更然后执行即可
第五步插入数据

insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd');

=======================================
=====>单机完成,开始集群搭建 两机一备(无备份)=======================================

12.在两台机器的/etc/hosts 文件中添加域名映射(Ip 主机名 域名)

9.png

13.配置

/etc/clickhouse-server/config.xml

<?xml version="1.0"?>
<yandex>
   <!-- 日志 -->
   <logger>
       <level>trace</level>
       <log>/var/lib/clickhouse/log/server.log</log>
       <errorlog>/var/lib/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>tv1-xxxx-java-01.ab.elong.com</interserver_http_host>

   <!-- 监听IP -->
   <listen_host>0.0.0.0</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>10737418240</mark_cache_size>

   <!-- 存储路径 -->
   <path>/var/lib/clickhouse/</path>
   <tmp_path>/var/lib/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>

   <!-- 控制大表的删除 -->
   <max_table_size_to_drop>0</max_table_size_to_drop>

   <include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>

/etc/clickhouse-server/metrika.xml

<yandex>

<!-- 集群配置 -->
<clickhouse_remote_servers>
    <ck_cluster>

        <!-- 数据分片1  -->
        <shard>
            <internal_replication>false</internal_replication>
            <replica>
                <host>tv1-xxxx-java-01.ab.elong.com</host>
                <port>9000</port>
                <user>xxxx</user>
                <password>xxxx</password>
            </replica>
        </shard>
        <!-- 数据分片2  -->

        <shard>
            <internal_replication>false</internal_replication>
            <replica>
                <host>tv1-xxxx-java-02.ab.elong.com</host>
                <port>9000</port>
                <user>xxxx</user>
                <password>xxxx</password>
            </replica>
        </shard>

    </ck_cluster>
</clickhouse_remote_servers>

<!—宏配置,相当于环境变量(这里先不用) -->
<!--<macros>
    <replica>ck1</replica>
</macros>-->
<networks>
   <ip>::/0</ip>
</networks>


<!-- 数据压缩算法  -->
<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>

14.将目录下的这三个配置sz下载下来,传到第二台机器上

10.png

15.clickhouse-client命令行select * from system.clusters ;查看集群

11.png

16.集群搭建成功
中间有一个小细节,配置好集群之后,再启动,报UNKNOWN
然后进/var/lib/clickhouse目录下发现少了log文件夹
用clickhouse用户创建即可

17.建分布式表,利用前面的步骤在每台机器上建好表之后,就可以建分布式表了

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

CREATE TABLE orders_all AS orders ENGINE = Distributed(ck_cluster,tclydcdb, orders, rand())

18.验证
ck01插入5条数据

insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 5 ;

ck02插入5条数据

insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 5,10;

ck01执行查询


13.png
14.png

查分布式表得到全量数据,查本地orders表只得到了在本机的5条。

到此为止,一个简单的集群就搭建完成。但是,在生产环境的话,如果某一台机器挂掉了,整个集群就不可用了,某一个硬盘坏掉了,部分数据就没了。呵呵

下期,就是高可用集群的搭建(两机两备);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354