从0开始搭建ClickHouse高可用集群

虚拟机网络设置

设置网络,连接外网

  1. 进入要修改网络相关的配置文件目录
cd /etc/sysconfig/network-scripts/
  1. ls目录找到ifcfg-eth**文件

网络设置目录

  1. vi ifcfg-ens33设置ONBOOT=yes:wq保存并退出

ONBOOT=yes

service network restart` #(重启网路服务)

ClickHouse配置

安装

参考ClickHouse官方文档,RPM安装包

添加官方存储库,需要确认选y

sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64

运行安装命令,需要确认选y

sudo yum install clickhouse-server clickhouse-client

启动

如果没有service,可以运行如下命令在后台启动服务:

sudo /etc/init.d/clickhouse-server start

如果提示:Init script is already running则使用下面命令启动

systemctl start clickhouse-server.service

日志文件将输出在/var/log/clickhouse-server/文件夹。

如果服务器没有启动,检查/etc/clickhouse-server/config.xml中的配置。

您也可以手动从控制台启动服务器:

clickhouse-server --config-file=/etc/clickhouse-server/config.xml

在这种情况下,日志将被打印到控制台,这在开发过程中很方便。

如果配置文件在当前目录中,则不需要指定——config-file参数。默认情况下,它的路径为./config.xml

ClickHouse支持访限制设置。它们位于users.xml文件(与config.xml同级目录)。
默认情况下,允许default用户从任何地方访问,不需要密码。可查看user/default/networks

启动服务后,您可以使用命令行客户端连接到它:

clickhouse-client

默认情况下,使用default用户并不携带密码连接到localhost:9000。还可以使用--host参数连接到指定服务器。

终端必须使用UTF-8编码。

局域网内访问

开启ck外部访问配置

 cd /etc/clickhouse-server/
 vim config.xml  # 放开<listen_host>::</listen_host>注释
 systemctl restart clickhouse-server.service # 重启服务
 

查看防火墙所有开放的端口

firewall-cmd --zone=public --list-ports

防火墙端口操作

firewall-cmd --query-port=8123/tcp  #查询指定端口是否已开 yes表示开启;no表示未开启。

firewall-cmd --zone=public --add-port=8123/tcp --permanent   # 开放8123端口

firewall-cmd --zone=public --remove-port=8123/tcp --permanent  #关闭8123端口

firewall-cmd --reload   # 重新加载配置

netstat -anp  #查询已开放的端口 

关闭防火墙

如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估

systemctl stop firewalld.service

查看防火墙状态

firewall-cmd --state

查看监听的端口

netstat -lnpt

安装zookeeper

采用wget方式安装

  1. yum方式安装wget
yum -y install wget
  1. 创建/opt 文件夹:
mkdir -p /apps
  1. 进入到 /opt 目录中:
cd /apps
  1. 下载 zookeeper-3.4.9.tar.gz:
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
  1. 解压缩 zookeeper-3.4.9.tar.gz:
tar -zxvf zookeeper-3.4.9.tar.gz
  1. 进入到 /usr/local/services/zookeeper/zookeeper-3.4.9/conf 目录中:
cd zookeeper-3.4.9/conf/
  1. 复制 zoo_sample.cfg 文件的并命名为为 zoo.cfg:
cp zoo_sample.cfg zoo.cfg
  1. 编辑zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir= /apps/zookeeper-3.4.9/data/zookeeper
dataLogDir= /apps/zookeeper-3.4.9/log/zookeeper
clientPort=2182
autopurge.purgeInterval=0
globalOutstandingLimit=200
server.1=10.10.7.143:2888:3888
server.2=10.10.7.193:2888:3888
server.3=10.10.7.152:2888:3888
  1. 创建相关目录
mkdir -p /apps/zookeeper-3.4.9/data/zookeeper
mkdir -p /apps/zookeeper-3.4.9/log/zookeeper
  1. 设置myid
vim /apps/zookeeper-3.4.9/data/zookeeper/myid # 三个节点各配置为1/2/3
  1. 进入zookeeper的bin目录,启动zookeeper服务,每个节点都需要启动
./zkServer.sh start
./zkServer.sh status # 查看节点状态

ClickHouse高可用集群方案

简单说一下ck表引擎,共有十几个,这里推荐3个

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

查看更改主机名

hostnamectl set-hostname XXX #更改主机名为 XXX

hostname #查看主机名

集群配置

安装成功后,在/etc/clickhouse-server/ 目录下生成配置文件config.xml及user.xml、自定义配置目录config.d及users.d,推荐在config.d及users.d下新建配置文件,然后在config.xml及user.xml中引入config.d及users.d下的配置文件。

  1. 编辑config.xml
vim /etc/clickhouse-server/config.xml

<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from> <!--添加该参数-->
  1. 配置集群节点

简单介绍一下配置关键字,可以参考ClickHouse官网

每个服务器需要指定 hostport,和可选的 userpasswordsecurecompression 的参数:

  • host – 远程服务器地址。可以域名、IPv4或IPv6。如果指定域名,则服务在启动时发起一个 DNS 请求,并且请求结果会在服务器运行期间一直被记录。如果 DNS 请求失败,则服务不会启动。如果你修改了 DNS 记录,则需要重启服务。
  • port – 消息传递的 TCP 端口(「tcp_port」配置通常设为 9000)。不要跟 http_port 混淆。
  • user – 用于连接远程服务器的用户名。默认值:default。该用户必须有权限访问该远程服务器。访问权限配置在 users.xml 文件中。更多信息,请查看«访问权限»部分。
  • password – 用于连接远程服务器的密码。默认值:空字符串。
  • secure – 是否使用ssl进行连接,设为true时,通常也应该设置 port = 9440。服务器也要监听 <tcp_port_secure>9440</tcp_port_secure> 并有正确的证书。
  • compression – 是否使用数据压缩。默认值:true。

数据分片配置:

  • internal_replicationtrue写操作只选一个正常的副本写入数据。如果分布式表的子表是复制表(*ReplicaMergeTree),请使用此方案。换句话说,这其实是把数据的复制工作交给实际需要写入数据的表本身而不是分布式表;false(默认值)写操作会将数据写入所有副本。实质上,这意味着要分布式表本身来复制数据。这种方式不如使用复制表的好,因为不会检查副本的一致性,并且随着时间的推移,副本数据可能会有些不一样。

  • 分片是指包含数据不同部分的服务器(要读取所有数据,必须访问所有分片)。

  • 副本是存储复制数据的服务器(要读取所有数据,访问任一副本上的数据即可)。

/etc/clickhouse-server/config.d目录创建metrika.xml

/etc/clickhouse-server/config.d/metrika.xml
<yandex>
<!--ck集群节点-->
<remote_servers>
    <test_ck_cluster>
        <!--分片1-->
        <shard>
            <weight>1</weight>
            <internal_replication>false</internal_replication>
            <replica>
                <host>10.10.7.143</host>
                <port>9000</port>
                <user>default</user>
                <password></password>
               <compression>true</compression>
            </replica>
            <replica>
                <host>10.10.7.193</host>
                <port>9000</port>
                <user>default</user>
                <password></password>
                <compression>true</compression>
            </replica>
        </shard>
        <!--分片2-->
        <shard>
            <weight>1</weight>
            <internal_replication>false</internal_replication>
            <replica>
                <host>10.10.7.152</host>
                <port>9000</port>
                <user>default</user>
                <password></password>
                <compression>true</compression>
            </replica>
            <replica>
                <host>10.10.7.101</host>
                <port>9000</port>
                <user>default</user>
                <password></password>
                <compression>true</compression>
            </replica>
        </shard>
    </test_ck_cluster>
</remote_servers>

<!--zookeeper相关配置-->
<zookeeper>
    <node index="1">
        <host>10.10.7.143</host>
        <port>2181</port>
    </node>
    <node index="2">
        <host>10.10.7.193</host>
        <port>2181</port>
    </node>
    <node index="3">
        <host>10.10.7.152</host>
        <port>2181</port>
    </node>
</zookeeper>

<macros>
    <replica>10.10.7.152</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> <!--压缩算法lz4压缩比zstd快, 更占磁盘-->
    </case>
</clickhouse_compression>
</yandex>

上述配置中三个节点中不同的地方在于:

<macros>
  <replica>10.10.7.XXX</replica>
</macros>

配置完成重启服务。

集群配置验证

select * from system.clusters;

集群信息

可视化工具

官网地址,笔者使用DBeaver,大家可自行选择。

参考连接:

https://clickhouse.tech/docs/en/getting-started/tutorial/

https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/

疑问点:

  1. internal_replicationtrue*ReplicaMergeTree每个分片下面的副本数据不能复制?

    答:端口 9009 用于复制。防火墙需要开启9009

    端口复制

后续学习点:

  1. 分布式表分片方案目前使用rand(),后续学习了解其它分片方案。链接

原创文章,作者:胸毛飘逸,如若转载,请注明出处:https://www.miaoshou.cc/179366.html

(0)
上一篇 2021年8月28日 08:19
下一篇 2021年8月28日 08:19

相关推荐