CENTO OS上的网络安全工具(十九)ClickHouse集群部署
创始人
2024-05-29 12:13:53
0

        一、VMware上集群部署ClickHouse

        (一)网络设置

        1. 通过修改文件设置网络参数

        (1)CentOS

        在CENTOS上的网络安全工具(十六)容器特色的Linux操作_lhyzws的博客-CSDN博客中我们提到过可以使用更改配置文件的方式来设置网络。在CentOS上,该配置文件位于/etc/sysconfig/network-scripts下,一般来说,一个“连接”就会有一个。比如,如果设备ens160有2个连接,则该目录下会有ifcfg-ens160和ifcfg-ens160-1两个文件。

        一般来说,需要改动这个地方一般都是为了在集群部署时设置静态IP地址,下面专门对比了手工配置IP和自动配置IP情况下的不同配置。注意BOOTPROTO,如果不用dhcp的话,取值为none,不是no,也不是static。否则系统只有在重启的时候认识,其它(见下文)时候不认识,我在这里坑好久。

手工配置的情况

自动配置的情况

[root@pig network-scripts]# cat ifcfg-ens160

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

NAME=ens160

UUID=……

DEVICE=ens160

ONBOOT=yes

IPADDR=192.168.21.11

PREFIX=24

GATEWAY=192.168.21.2

DNS1=192.168.21.2

[root@pig network-scripts]# cat ifcfg-ens160

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=dhcp

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

NAME=ens160

UUID=……

DEVICE=ens160

ONBOOT=yes

DNS1=192.168.21.2

        配置好后,重启系统,网络设置就应该更改过来了。

        (2)Ubuntu

        Ubuntu类的系统中,这个配置文件一般在/etc/network/interfaces中,一样也是改了重启。据说在Ubuntu 18.04版本以后,改用了netplan工具进行网络配置,所以可能找不到/etc/network/interfaces。那么,在/etc/netplan下的yml文件就是要更改的对象。更改完成后,执行netplan apply即可。我没装,所以没试。

        (3)重启服务使修改生效

        修改/etc/sysconfig/network-scripts下的配置文件后,直接重启服务而不是重启系统。在非图形窗口的Centos系统中,这种方法应该是比较正规的一种。在Centos8之前,应该使用systemctl restart network.service,或者是service network restart;但是在centos8以后,这个服务被NetworkManager替代,注意大小写,所以在我试验的centos-stream-8中是这样的:

[root@pig network-scripts]# systemctl restart NetworkManager.service 
[root@pig network-scripts]# systemctl status NetworkManager.service 
● NetworkManager.service - Network ManagerLoaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2022-12-22 09:39:15 EST; 9s agoDocs: man:NetworkManager(8)Main PID: 6365 (NetworkManager)Tasks: 4 (limit: 49135)Memory: 5.6MCGroup: /system.slice/NetworkManager.service└─6365 /usr/sbin/NetworkManager --no-daemon
12月 22 09:39:15 pig NetworkManager[6365]:   [1671719955.9362] device (ens160): state change: ip-config -> ip-check (reason 'none',>
12月 22 09:39:15 pig NetworkManager[6365]:   [1671719955.9365] policy: set 'ens160' (ens160) as default for IPv4 routing and DNS
12月 22 09:39:15 pig NetworkManager[6365]:   [1671719955.9525] modem-manager: ModemManager available

        (4)使用网络管理工具重启服务

        在centos8以后,配合NetworkManager服务,系统提供了nmcli(network manager client)工具帮助用户进行网络管理。centos7之前虽然没有,但是可以通过yum安装:

[root@pig network-scripts]# yum install /usr/bin/nmcli -y
上次元数据过期检查:2:45:11 前,执行于 2022年12月22日 星期四 06时58分29秒。
软件包 NetworkManager-1:1.39.0-1.el8.x86_64 已安装。
依赖关系解决。
==========================================================================================================================================软件包                                      架构                      版本                               仓库                       大小
==========================================================================================================================================
升级:NetworkManager                              x86_64                    1:1.40.4-1.el8                     baseos                    2.3 MNetworkManager-adsl                         x86_64                    1:1.40.4-1.el8                     baseos                    153 kNetworkManager-bluetooth                    x86_64                    1:1.40.4-1.el8                     baseos                    179 kNetworkManager-libnm                        x86_64                    1:1.40.4-1.el8                     baseos                    1.9 MNetworkManager-team                         x86_64                    1:1.40.4-1.el8                     baseos                    158 kNetworkManager-tui                          x86_64                    1:1.40.4-1.el8                     baseos                    353 kNetworkManager-wifi                         x86_64                    1:1.40.4-1.el8                     baseos                    199 kNetworkManager-wwan                         x86_64                    1:1.40.4-1.el8                     baseos                    185 k
事务概要
==========================================================================================================================================
升级  8 软件包
…………………………

        

        nmcli工具挺有意思,不仅可以用来查看IP地址等配置,还可以关闭/重启有线/无线网络,禁用、启用指定设备,对指定设备禁用、启用、增加网络连接。如果熟练掌握相关命令,用起来简直和windows网络适配器配置的图形交互一样方便。

        所以修改配置文件后,重置一下网络连接即可(前提是配置文件要写对,否则nmcli启动连接失败会直接把连接干掉,在连接名字都没有了的情况下,是无法up连接的。那么你只能被迫使用nmcli d connect重新连接设备,结果是新增了一个连接,/etc/sysconfig/network-scripts下会多出一个配置文件。并且,即使是删了新的配置文件,无论如何up,那个错的文件都会被系统忽略。系统会直接使用hdcp分配IP地址——我掉的就是这个坑)

[root@pig network-scripts]# nmcli c reload
[root@pig network-scripts]# nmcli c
NAME    UUID                                  TYPE      DEVICE 
ens160  d24eda1a-cd43-4de7-ba21-1641abd3d540  ethernet  ens160 
[root@pig network-scripts]# nmcli c up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/14)

        当然,也可以不改配置文件,直接使用nmcli add一个新的连接并进行配置。但是我查看了一下帮助就放弃了——字段实在是太多了:

root@pig network-scripts]# nmcli c add --help
Usage: nmcli connection add { ARGUMENTS | help }
ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([+|-]. )+]COMMON_OPTIONS:type ifname  | "*"[con-name ][autoconnect yes|no][save yes|no][master ][slave-type ]TYPE_SPECIFIC_OPTIONS:ethernet:     [mac ][cloned-mac ][mtu ]wifi:         ssid [mac ][cloned-mac ][mtu ][mode infrastructure|ap|adhoc]

        2. 通过命令设置网络参数

        (1)ifconfig

        ifconfig可能是最常用的网络配置命令了,只不过现在被ip命令替代,一些系统可能默认不提供ifconfig工具,需要手动从net-tools工具包安装。

        使用ifconfig查看所有网络接口名称

[root@pig1 ~]# ifconfig
lo: flags=73  mtu 65536
……
virbr0: flags=4099  mtu 1500
……
[root@pig1 ~]# ifconfig -a
ens160: flags=4098  mtu 1500
……
lo: flags=73  mtu 65536
……
virbr0: flags=4099  mtu 1500
……

        可以看到,使用-a参数才能看到所有接口(包括被关闭的),如果有关闭的接口,可以使用ifconfig 接口名 up命令启动

[root@pig1 ~]# ifconfig ens160 up

        使用ifconfig命令更改网络配置:

[root@pig1 ~]# ifconfig ens160 192.168.21.121 netmask 255.255.255.0 broadcast 192.168.21.255
[root@pig1 ~]# ifconfig
ens160: flags=4163  mtu 1500inet 192.168.21.121  netmask 255.255.255.0  broadcast 192.168.121.255……    ……RX packets 21  bytes 1886 (1.8 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 38  bytes 5147 (5.0 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        需要注意的一点就是,使用ifconfig更改的网络参数,并没有即刻影响ifcfg-ens160文件。如果改完后运行ifconfig ens160 down && ifconfig ens160 up,会发现网络配置又回到了文件中给出的状态。

        (2)ip

[root@pig1 ~]# ip addr change 192.168.21.121/24 dev ens160
[root@pig1 ~]# ip addr show
…… ……
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000……inet 192.168.21.21/24 brd 192.168.21.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.21.121/24 scope global secondary ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fea3:fab7/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@pig1 ~]# ip addr del 192.168.21.121/24 dev ens160
[root@pig1 ~]# ip addr show
…… ……
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000……inet 192.168.21.21/24 brd 192.168.21.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fea3:fab7/64 scope link noprefixroute valid_lft forever preferred_lft forever

        使用ip更改IP地址有点麻烦,不论是用add还是用change命令,原来的地址都会留下,还需要使用del删除一下。

        不过使用ip命令的一个好处是可以查看默认网关:

[root@pig1 ~]# ip route show
default via 192.168.21.2 dev ens160 proto static metric 100 
192.168.21.0/24 dev ens160 proto kernel scope link src 192.168.21.21 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

        最后多说一句,使用命令更改并不如直接修改配置文件来得稳妥。比如会出现网段、广播地址和掩码不匹配,网段和网关不匹配,网段和默认DNS不匹配等等情况。这些命令本身并不会帮助我们检查。所以使用命令也需要把网络相关参数依次配一遍,并不比直接更改配置文件后重启来得简单。

        如果是容器,那么最好是使用docker的run参数,在启动时就把一切都设置好。

        3. 更改hostname

        更改hostname,可以使用hostnamectl命令,也可使用nmcli命令。或者更直接点,使用hostname命令:

        如:

[root@pig ~]# hostnamectl --static  set-hostname pig1
[root@pig ~]# hostnamectlStatic hostname: pig1Icon name: computer-vmChassis: vmMachine ID: ……Boot ID: ……Virtualization: vmwareOperating System: CentOS Stream 8CPE OS Name: cpe:/o:centos:centos:8Kernel: Linux 4.18.0-373.el8.x86_64Architecture: x86-64

        又如:

[root@pig ~]# nmcli g hostname
pig
[root@pig ~]# nmcli g hostname pig1
[root@pig ~]# nmcli g hostname
pig1

        直接使用hostname命令也可以查看主机名称

[root@pig ~]# hostname
pig1
[root@pig ~]# hostname pig
[root@pig ~]# hostname
pig

        然而,实际上,hostname就存储在/etc/hostname文件中,不论在哪种操作系统,都可以通过更改该文件的内容来更改主机名,然后重启系统即可。

[root@thebigpig ~]# sed -i '1c pig1' /etc/hostname
[root@thebigpig ~]# cat /etc/hostname
pig1

        但是直接更改文件内容的办法在容器中会失效,会出现诸如“sed: cannot rename ……: Device or resource busy”的错误。据说是因为使用sed会造成文件inode发生变化(因为sed实际使用一个新的文件替换了源文件)。解决办法是使用vi/vim。

        但是,即使是更改了文件,包括使用hostname命令更改,一旦容器重新start,容器名称又会被改回去——因为容器就不是这么玩的——应该在run的时候就是用—hostnane选项指定好:

C:\Users\lhyzw>docker run -it --hostname pig --name pigu ubuntu:latest bash
root@pig:/# cat /etc/hostname
pig

        4. 更改主机名与IP映射关系

        构建集群还需要在每个节点上记录主机名与IP的映射关系,这个不论在哪个系统中,都在/etc/hosts文件中:

root@pig:/# cat /etc/hosts

127.0.0.1       localhost

::1     localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.17.0.2      pig

root@pig:/#

        将其它节点的IP地址和主机名添加到hosts文件中即可。

        (二)安装ZooKeeper

        ClickHouse依托zeekeeper进行集群节点间的并发操作协同管理。如果配置文件中没有指定zookeeper,clickhouse将无法使用复制表这一有力工具。由于zeekeeper对延迟非常敏感,所以clickhouse官方不建议将zookeeper与clickhouse在同一节点上叠加安装。当然,作为实验,我们不打算在有限的主机内开5个以上的虚拟机——所以粗放地将它们安装在了一起——请不要盲从。

        1. 安装JDK

        ZooKeeper是基于Java开发的,所以其运行需要JVM环境。

        OpenJDK我们选择11版本,安装过程不赘述:

[root@pig01 share]# yum install java-11-openjdk* -y

        2. 下载ZooKeeper

        ZooKeeper的安装需要从官方网站​  Apache ZooKeeper​下载压缩包。在网站上找到最新版本(ClickHouse要求版本不低于3.4.0)的下载链接:

         需要点进去才是真正的安装链接:

         也就是在官方推荐的http站点上,右键选择复制链接,然后在linux中wget即可:​

[root@pig01 share]# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz

        3.解压与配置

        下载完成后,可将ZooKeeper解压到指定的文件夹(一般多解压到了/usr/local/zookeeper下);根据可使用的节点,对配置文件进行对应更改/usr/local/zeekeeper/conf/zoo.cfg;最后是构建data目录和log目录,并在data目录下设置myid。

        (1) 解压到指定文件夹

[root@pig01 local]# tar zxvf ~/share/apache-zookeeper-3.8.0-bin.tar.gz -C /usr/local/
apache-zookeeper-3.8.0-bin/docs/
apache-zookeeper-3.8.0-bin/docs/images/
apache-zookeeper-3.8.0-bin/docs/skin/
apache-zookeeper-3.8.0-bin/docs/images/2pc.jpg
apache-zookeeper-3.8.0-bin/docs/images/bk-overview.jpg
apache-zookeeper-3.8.0-bin/docs/images/favicon.ico
apache-zookeeper-3.8.0-bin/docs/images/state_dia.dia
apache-zookeeper-3.8.0-bin/docs/images/state_dia.jpg
apache-zookeeper-3.8.0-bin/docs/images/zkAuditLogs.jpg
apache-zookeeper-3.8.0-bin/docs/images/zkarch.jpg
apache-zookeeper-3.8.0-bin/docs/images/zkcomponents.jpg
apache-zookeeper-3.8.0-bin/docs/images/zknamespace.jpg
……

        默认解压出来的目录会携带版本信息,为方便使用,将其名称改简单些:

[root@pig01 local]# pwd
/usr/local
[root@pig01 local]# ls
apache-zookeeper-3.8.0-bin  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@pig01 local]# mv apache-zookeeper-3.8.0-bin zookeeper
[root@pig01 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  zookeeper
[root@pig01 local]#

        (2)建立配置文件

        在zookeeper目录下得conf子目录中,有名为zoo_example.cfg的配置文件示例,将其拷贝在相同目录下,命名为zoo.cfg:

[root@pig01 conf]# cp zoo_sample.cfg zoo.cfg

        配置文件中,需要定制的内容主要为2个部分:①数据目录②节点群配置

        zoo.cfg文件内容如下,更改部分加粗显示:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 数据目录
dataDir=/usr/local/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true# 节点群
server.0=192.168.119.10:2888:3888
server.1=192.168.119.11:2888:3888
server.2=192.168.119.12:2888:3888
server.3=192.168.119.13:2888:3888

        节点群格式如上,使用server.N表示第几个节点,N取值0至255;IP地址为节点IP。后面两个冒号所跟的端口,分别为zookeeper信息交换端口和选举端口,选择默认的2888和3888即可。

        (3)设置节点标识

        设置的最后,是为配置文件中指定的数据目录生成对应的目录,并在目录文件下建立一个名为myid的文件,该文件的内容比较简单,即为配置文件节点群中server.N的N,对应其所在节点的IP地址填写即可(比如192.168.119.10节点,对应填写0):

[root@pig00 zookeeper]# mkdir data
[root@pig00 zookeeper]# cd data
[root@pig00 data]# echo '0'>myid
[root@pig00 data]# cat myid
0

        4.启动服务

        网上一些配置指南还会进一步添加zookeeper的环境变量,在~/bashrc文件中添加一下变量然后source一下,主要是为了设置zookeeper的默认执行路径。这一步其实可选,如果不介意启动服务的时候多敲几次键盘的话:)

   # ZooKeeper Envexport ZOOKEEPER_HOME=/usr/local/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin

        使用zookeeper安装目录下bin子目录中的zkServer.sh脚本,以start为参数即可启动zookeeper。每个节点上均需启动:

[root@pig00 bin]# pwd
/usr/local/zookeeper/bin
[root@pig00 bin]# ./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

        以status为参数,可以查看各个节点的服务状态,以及各节点在zookeeper“选举团”中的身份:

[root@pig00 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower[root@pig01 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower[root@pig02 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader[root@pig03 bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

        可以看到,哪个节点为Leader与启动顺序关系不大,是zookeeper根据算法确定的。其中,Leader用来负责客户端的Write类型请求;Follower用来负责客户端的Read类型请求;这里还有一种没有出现:Observer是一种特殊的Follower,也负责客户端的Read类型请求,但不参与选举。

        5. 测试

        使用与服务程序同目录下的客户端程序zkCli.sh,可以访问zookeeper服务:

[root@pig00 bin]# ./zkCli.sh
/usr/bin/java
Connecting to localhost:2181
……………………
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper 
[config, quota]
[zk: localhost:2181(CONNECTED) 2]

        6. 生产环境配置

        另外,根据clickhouse官方的配置建议,在生产环境下,需要打开zookeeper的log文件自动清除开关,以避免大量日志超出存储容量造成系统崩溃:

autopurge.snapRetainCount=3
autopurge.purgeInterval=1

        (三)部署ClickHouse集群

        部署ClickHouse集群前,最好是先理解ClickHouse的分片、副本和复制表这几个核心概念,因为配置文件中最为主要的几个参数都与之相关。

        1. 理解分片、副本和复制表

        关于分片和副本,ClickHouse实战 四、集群的副本与分片 - 知乎 (zhihu.com)这篇文章讲得还是比较透彻的,这里仅结合我们所构建的环境对应理解。

        (1)分片(Shard)

        分片是对表结构的水平分割。想象数据库中的一张大表,其记录达到上亿行。那么为了检索更快,一个直观的方式就是将表按照某一可排序键分成上下2部分,每部分用一台机器来负责。那么以后检索该表的时候,根据该键的值就可以很快确定应该哪台机器干活;又或者说如果检索与该键无关,那也可以2台机器并行开始干活,每台机器只需要检索半张表就够了。

        在我们的测试环境中,用了4个节点(pig00-pig03),我们使用pig00,pig01为一组,pig02和pig03为一组,2组来负责将整个表分为2个分片。所以pig00和pig01为shard 1,pig02和pig03为shard 2。

        (2)副本(Replica)

        ClickHouse的数据副本机制不是全局的,是以表为对象的。也就是说,不是向RAID那样,所有存储都会被强制的存储几份,而是只有使用ReplicaMergeTree的表引擎才会按照配置文件的要求制作副本,其它类型的表引擎则不使用副本。

        在我们的测试环境中,pig01为pig00的副本,pig03为pig02的副本。

        (3)复制表

        复制表是clickhouse中可以支持副本的。在clickhouse的所有表引擎中,只有合并树表引擎(MergeTree)可以支持副本。①由于clickhouse的副本是表级别的,所有服务器中可以同时存在复制表和非复制表。②副本并不依赖于分片,所以每个分片可以有它自己的独立副本。

        之所以加粗上面2句话,是因为它反应了clickhouse集群和数据组织的核心思想。

        创建复制表的典型语句如下:

CREATE TABLE table_name
(EventDate DateTime,CounterID UInt32,UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)

        其中,{layer}{shard}和{replica}由配置文件中的标识进行定义,指定复制表及其副本的存储路径和名称等信息。所以,一方面,它是可以由我们自行指定的;另一方面,我们指定它必须遵守约定,即不同的分片,不同的副本,不能取一样的名称。

        一个典型的宏定义如下所示:

0502example05-02-1

        关于layer和shard,都是分片标识符,由于clickhouse采用了两级分片机制,所以需要两个标识。但多数情况下,我们仅指定shard就可以。

        从集群部署的角度看宏定义,我们完全可以将其理解为节点的配置标识:比如该节点赔给第几分区,作为第几副本,则可以对应设置shardreplica的名称。

        关于分片、副本和复制表的概念,官方指南中有更为详细的描述,可见:数据副本 | ClickHouse Docs

        2. ClickHouse的配置文件

        如我们在基于容器的单节点clickhouse部署中看到的,ClickHouse支持多配置文件管理。主配置文件是/etc/clickhouse-server/config.xml。clickhouse会在解析完主配置文件后,递归解析目录/etc/clickouse-server/config.d下的xml格式配置文件。所有的配置文件都要求有相同的根元素,通常是

        主配置文件中的一些配置可以通过replace或remove属性被子目录下的配置文件覆盖,如果两者都未指定,则按照递归关系使用后解析的配置覆盖前面的。这也是我们在基于容器的单节点中看到的做法。

        从这个角度说,配置clickhouse,最好不要直接修改主文件。更友好的方式,是在config.d目录下建立专属的配置文件。

        按照前面的描述,除了允许远程访问相关的网络配置外,clickhouse集群最需要配置的参数主要包括:①zookeeper集群;②clickhouse集群节点的分片及副本配置;③宏定义配置。

        pig00节点的配置文件如下:

::0.0.0.011192.168.119.102181192.168.119.112181192.168.119.122181192.168.119.132181192.168.119.109000192.168.119.119000192.168.119.129000192.168.119.13900001pig_cluster-01-0

        配置完成后,将其scp到其它节点的对应config.d目录下。并对应更改宏定义中的对应分片标识和副本编号即可。

        PS:配置文件中IP也可以用主机名(比如pig00)替代。

        3. 集群启动与测试

        配置完成后,直接systemctl restart clickhouse-server.service即可。

        所有节点启动完成后,可使用客户端clickhouse-client,执行select * from system.clusters查看集群状态:

         可见我们的4个节点都按照配置文件的设置,构建了2分片1副本的集群pig_cluster。

        至于其它的集群,则是主配置文件中那些示范的配置没有被我们注释掉的结果。强迫症患者可以考虑将示例注释掉,眼不见心不烦。

        六、Docker上部署ClickHouse

        待续……

相关内容

热门资讯

营销总监简历 营销总监简历10篇  时间是箭,去来迅疾,我们很快就要开启找工作的生活,现在这个时候,写好一份简历就...
下载应届毕业生简历模板   基本资料  姓  名: 中国人才网  性  别: 男  民  族: 汉族  出生日期: 1987...
职场商务人士常用的几种说法   移居美国指南旨在用专业的知识为计划或正在移民美国的同胞们提供真实有效的移居美国的信息与服务,谢谢...
免费简历表格下载word格式 应 聘职 位个人基本信息姓 名性 别民 族出生年月籍 贯身 高毕业时间政治面貌专 业学 历毕业学校联...
个人简历社会实践经历   简历中的社会实践这一栏是简历上能真正体现自己社会阅历,自身能力的一栏。因此大家在填写的时候很小心...
职场礼貌接听电话的礼仪   接听电话礼仪:  1.听到电话响后,最好是三声之内接起,如果响声超过6下,那首先要跟对方说声对不...
职场上如何让你更有说服力   无论你是想要寻求商业伙伴,投资人,还是关系良好的代理人,说话有说服力是一项必要而强有力的技能。这...
业务跟单员求职简历 基本信息 个人头像 姓  名: 中国人才网 性  别: 女 民  族: 汉族 出生年月: 199...
女性职场必修课:女性职业套裙...   (1)面料选择  面料选择抓两个词:质地上乘、纯天然。上衣、裙子和背心等必须是同种面料。  要用...
十大失眠职业排行榜 十大失眠职业排行榜  越来越多的人开始失眠,他们就像广告里面说的:夜里睡不着,白天醒不了。有些人每天...
如何把自己培养成职场精英? 如何把自己培养成职场精英?如何把自己培养成职场精英?1、你可以有喝醉的时候,我们可以接受,但是你要明...
简述职场箴言 简述十句职场箴言  1、木秀于林,风必摧之。  要记住,树大才会招风,会被人忌妒也是因为你足够优秀。...
职场丽人生活中的危机   【职业规划的危机】  未来该做什么?我很茫然。  你热爱你的工作吗?你给你的晋升腾出了多大的空间...
毕业生深圳平均月薪3130元... 2015年毕业生深圳平均月薪3130元 哲学类最高本科生哲学类、研究生管理学类月薪最高,专科最高的是...
求职者最适合向面试官提的问题 求职者最适合向面试官提的问题  1、为什么?  比如“你们为什么选择关停零配件业务,而不是尝试将它出...
吉林选聘高校毕业生服务社区 ... 吉林选聘高校毕业生服务社区 选聘人员可享补贴 为鼓励高校毕业生到基层就业,吉林省相关部门开发适合高校...
新型消防工程人才紧缺 新型消防工程人才紧缺 消防工程,与其他行业存在千丝万缕的联系,但大多数人对此却很陌生。该专业的社会价...
职场中怎么表达对工作的期望   职场中怎么表达对工作的期望呢?和小编一起了解一下吧。  表达工作期望的句子  1.五年后你想做到...
职场技巧 职场技巧大全  职场中的挫折有大有小,在大多数情况下,挫折都是可以安然度过的。在面对挫折的时候,以正...
职场情商高的十种表现   在职场中,能力固然重要,但更重要的是情商。下面CN人才网小编为大家整理了一些关于情商高的十种表现...