当前位置: 首页 > news >正文

网站建设中间件收费/新乡seo优化

网站建设中间件收费,新乡seo优化,备案期间 网站,网站怎么做电脑系统下载文件一、VMware上集群部署ClickHouse (一)网络设置 1. 通过修改文件设置网络参数 (1)CentOS 在CENTOS上的网络安全工具(十六)容器特色的Linux操作_lhyzws的博客-CSDN博客中我们提到过可以使用更改配置文件的方式…

        一、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]: <info>  [1671719955.9362] device (ens160): state change: ip-config -> ip-check (reason 'none',>
12月 22 09:39:15 pig NetworkManager[6365]: <info>  [1671719955.9365] policy: set 'ens160' (ens160) as default for IPv4 routing and DNS
12月 22 09:39:15 pig NetworkManager[6365]: <info>  [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 [-- ([+|-]<setting>.<property> <value>)+]COMMON_OPTIONS:type <type>ifname <interface name> | "*"[con-name <connection name>][autoconnect yes|no][save yes|no][master <master (ifname, or connection UUID or name)>][slave-type <master connection type>]TYPE_SPECIFIC_OPTIONS:ethernet:     [mac <MAC address>][cloned-mac <cloned MAC address>][mtu <MTU>]wifi:         ssid <SSID>[mac <MAC address>][cloned-mac <cloned MAC address>][mtu <MTU>][mode infrastructure|ap|adhoc]

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

        (1)ifconfig

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

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

[root@pig1 ~]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
……
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
……
[root@pig1 ~]# ifconfig -a
ens160: flags=4098<BROADCAST,MULTICAST>  mtu 1500
……
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
……
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  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<UP,BROADCAST,RUNNING,MULTICAST>  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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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}由配置文件中的<macros>标识进行定义,指定复制表及其副本的存储路径和名称等信息。所以,一方面,它是可以由我们自行指定的;另一方面,我们指定它必须遵守约定,即不同的分片,不同的副本,不能取一样的名称。

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

<macros><layer>05</layer><shard>02</shard><replica>example05-02-1</replica>
</macros>

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

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

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

        2. ClickHouse的配置文件

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

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

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

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

        pig00节点的配置文件如下:

<clickhouse><!--允许从主机网络或其他容器进行远程连接--><listen_host>::</listen_host><listen_host>0.0.0.0</listen_host><listen_try>1</listen_try><!--记录日志--><logger><console>1</console></logger><!--ZooKeeper集群配置--><zookeeper><node><host>192.168.119.10</host><port>2181</port></node><node><host>192.168.119.11</host><port>2181</port></node><node><host>192.168.119.12</host><port>2181</port></node><node><host>192.168.119.13</host><port>2181</port></node></zookeeper><!--clickhouse集群设置--><remote_servers><!--集群名称,创建分布式表时需要使用--><pig_cluster><!--分片1--><shard><replica><host>192.168.119.10</host><port>9000</port></replica><!--分片1的副本1--><replica><host>192.168.119.11</host><port>9000</port></replica></shard><!--分片2--><shard><replica><host>192.168.119.12</host><port>9000</port></replica><!--分片2的副本1--><replica><host>192.168.119.13</host><port>9000</port></replica></shard></pig_cluster></remote_servers><!--分片与副本标识宏定义,创建复制表时需要使用--><!--192.168.119.10:第1分片的第0副本,即原数据--><macros><shard>01</shard><replica>pig_cluster-01-0</replica></macros>
</clickhouse>

        配置完成后,将其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

        待续……

相关文章:

CENTO OS上的网络安全工具(十九)ClickHouse集群部署

一、VMware上集群部署ClickHouse &#xff08;一&#xff09;网络设置 1. 通过修改文件设置网络参数 &#xff08;1&#xff09;CentOS 在CENTOS上的网络安全工具&#xff08;十六&#xff09;容器特色的Linux操作_lhyzws的博客-CSDN博客中我们提到过可以使用更改配置文件的方式…...

tesseract -图像识别

下载链接&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/如下选择最新的版本&#xff0c;这里我选择tesseract-ocr-w64-setup-5.3.0.20221222.exe有如下python模块操作tesseractpyocr 国内源&#xff1a;pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ py…...

JavaScript Math 算数对象

文章目录JavaScript Math 算数对象Math 对象Math 对象属性Math 对象方法算数值算数方法JavaScript Math 算数对象 Math&#xff08;算数&#xff09;对象的作用是&#xff1a;执行常见的算数任务。 Math 对象 Math&#xff08;算数&#xff09;对象的作用是&#xff1a;执行普…...

一体机HDATA节点添加和删除

瀚高数据库 目录 文档用途 详细信息 文档用途 一体机可在线添加、删除数据库集群节点。 详细信息 一体机可在线添加、删除数据库集群节点。具体操作步骤如下 一、节点添加 集群可以在其他机器上通过配置hghac.yaml文件&#xff0c;将新节点加入集群。 集群操作 1&#xf…...

关于 interface{} 会有啥注意事项?上

学习 golang &#xff0c;对于 interface{} 接口类型&#xff0c;我们一定绕不过&#xff0c;咱们一起来看看 使用 interface{} 的时候&#xff0c;都有哪些注意事项吧 interface {} 可以用于模拟多态 xdm 咱们写一个简单的例子&#xff0c;就举动物的例子 写一个 Animal 的…...

Matlab中旧版modem.qammod与新版不兼容

最近&#xff0c;因为课题需要&#xff0c;在研究通信。在网上下了一个2015年左右的代码&#xff0c;其中用的是matlab旧版中的modem.qammod函数&#xff0c;但是旧版中的函数已经被删除了&#xff0c;&#xff08;这里必须得吐槽一下&#xff0c;直接该函数内部运行机制就行呀…...

通达信指标公式颜色代码的四种写法(COLOR/RGB)

通达信指标公式颜色代码有四种写法&#xff0c;分别为COLOR颜色的英文、COLOR十六进制、RGBX十六进制、RGB(R,G,B)。标题有点尴尬&#xff0c;让我想到孔乙己“茴”字的四种写法&#xff0c;哈哈。 一、COLOR颜色的英文 “COLOR颜色的英文”这种写法比较简单&#xff0c;函数库…...

小程序面试题收集(持续更新中...)

小程序面试题收集 1.请谈谈微信小程序主要目录和文件的作用 project.config.json&#xff1a;项目配置文件&#xff0c;用的最多的就是配置是否开启https校验App.js&#xff1a;设置一些全局的基础数据等App.json&#xff1a;底部tab&#xff0c;标题栏和路由等设置App.wxss&…...

最深情的告白——郁金香(Python实现)

目录 1 最深情的告白 2 即兴赞之 2.1 李小白言郁金香 2.2 郁金香般的姑娘 2.3 荷兰的郁金香 3 Python代码实现 3.1 郁金香的芬芳 3.2 我俩绚丽多姿的风景 1 最深情的告白 曾经以为&#xff0c;她爱玫瑰&#xff0c;然后我画了好几种&#xff1a; 花仙子——玫瑰&a…...

代码随想录算法训练营第六天|242.有效的字母异位词 、349. 两个数组的交集 、 202. 快乐数、1. 两数之和

当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法。哈希法是牺牲了空间换取了时间&#xff0c;要使用额外的数组&#xff0c;set或者是map来存放数据&#xff0c;才能实现快速的查找。当我们要使用集合来解决哈希问题的时候&#xff0c;优先使用…...

【STL】模拟实现list

目录 1、list介绍 所要实现类及其成员函数接口总览 2、结点类的模拟实现 基本框架 构造函数 3、迭代器类的模拟实现 迭代器类存在的意义 3.1、正向迭代器 基本框架 默认成员函数 构造函数 运算符重载 --运算符重载 !运算符重载 运算符重载 *运算符重载 …...

Spring Cloud Alibaba全家桶(五)——微服务组件Nacos配置中心

前言 本文小新为大家带来 微服务组件Nacos配置中心 相关知识&#xff0c;具体内容包括Nacos Config快速开始指引&#xff0c;搭建nacos-config服务&#xff0c;Config相关配置&#xff0c;配置的优先级&#xff0c;RefreshScope注解等进行详尽介绍~ 不积跬步&#xff0c;无以至…...

【微信小程序】-- 页面事件 - 下拉刷新(二十五)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

springboot启动过程加载数据笔记(springboot3)

SpringApplication AbstractApplicationContext PostProcessorRegistrationDelegate ConfigurationClassPostProcessor ConfigurationClassParser 一堆循环和调用 ComponentScanAnnotationParser扫描 processConfigurationClass.doProcessConfigurationClass(configClass, so…...

中文代码86

PK 嘚釦 docProps/PK 嘚釦諿A眎 { docProps/app.xml漅薾?糤?D?v拢W4揣狤"攃e9 睔貣m*:PAz韒g?项弇}R珁湧4嶱 ]I禑菦?櫮戵\U佳 珩 ]铒e礎??X(7弅锿?jl筀儸偛佣??z窊梈ZT炰攷 ?\ 銒沆?状尧绥>蕮 ?斬殕{do]?o乗YX?:??罢秗,泿)怟 …...

网络参考模型

OSI参考模型 应用层 不服务于任何其他层&#xff0c;就是位APP提供相应的服务&#xff0c;不如HTTP、域名解析DNS提供服务表示层 1.使得应用数据能够被不同的系统&#xff08;Windows\Linux&#xff09;进行识别和理解 2.数据的解码和编码、数据的加密与解密、数据的压缩和解…...

Spark Tungsten

Spark Tungsten数据结构Unsafe Row内存页管理全阶段代码生成火山迭代模型WSCG运行时动态生成Tungsten (钨丝计划) : 围绕内核引擎的改进&#xff1a; 数据结构设计全阶段代码生成&#xff08;WSCG&#xff0c;Whole Stage Code Generation&#xff09; 数据结构 Tungsten 在…...

2023年总结的web前端学习路线分享(学习导读)

如果你打开了这篇文章&#xff0c;说明你是有兴趣想了解前端的这个行业的&#xff0c;以下是博主2023年总结的一些web前端的学习分享路线&#xff0c;如果你也想从事前端或者有这方面的想法的&#xff0c;请接着往下看&#xff01; 前端发展前景 前端入门 巩固基础 前端工程…...

MyBatis学习笔记(十) —— 动态SQL

10、动态SQL MyBatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句字符串的痛点问题。 动态SQL&#xff1a; 1、if 标签&#xff1a;通过test属性中的表达式判断标签中的内容是否有效&#xff08;是否会拼接到sql中…...

剑指 Offer 55 - II. 平衡二叉树

剑指 Offer 55 - II. 平衡二叉树 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 输入一棵二叉树的根节点&#xff0c;判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1&#xff0c;那么它就是一棵平衡二叉树。 示例 1: 给定二叉树 […...

一文吃透前端低代码的 “神仙生活”

今天来说说前端低代码有多幸福&#xff1f; 低代码是啥&#xff1f;顾名思义少写代码…… 这种情况下带来的幸福有&#xff1a;代码写得少&#xff0c;bug也就越少&#xff08;所谓“少做少错”&#xff09;&#xff0c;因此开发环节的两大支柱性工作“赶需求”和“修bug”就…...

【深度学习】预训练语言模型-BERT

1.BERT简介 BERT是一种预训练语言模型&#xff08;pre-trained language model, PLM&#xff09;&#xff0c;其全称是Bidirectional Encoder Representations from Transformers。下面从语言模型和预训练开始展开对预训练语言模型BERT的介绍。 1-1 语言模型 语言模型 &#xf…...

C++类的组合

C类的组合什么是类的组合初始化参数列表使用类的组合案例分析组合构造和析构顺序问题this指针基本用法和作用什么是类的组合 类的组合就是以另一个对象为数据成员&#xff0c;这种情况称为类的组合 1.优先使用类的组合&#xff0c;而不是继承 2.组合表达式的含义 一部分关系 初…...

2.伪随机数生成器(ctr_drbg)的配置与使用

零、随机数应用 生成盐,用于基于口令的密码 生成密钥,用于加密和认证 生成一次性整数Nonce,防止重放攻击 生成初始化向量IV 构成 种子,真随机数生成器的种子来源于物理现象 内部状态,种子用来初始化内部状态 一、真随机数和伪随机数 1.区别 随机数在安全技术中通常被用于…...

CentOS7 切换图形模式和多用户命令行模式

备注&#xff1a; 主机名 hw 含义&#xff1a;hardware 缩写&#xff0c;意思是硬件&#xff08;物理机&#xff09; 文章目录1、查看源头2、查看当前系统运行模式3、设置系统运行模式为多用户命令行模式4、查看当前系统运行模式5、重启系统6、确认当前系统运行模式7、设置系统…...

在linux上用SDKMan对Java进行多版本管理

在linux上用SDKMan对Java进行多版本管理 有一个工具叫SDKMan&#xff0c;它允许我们这样做。官方网站这样描述: TIP: "SDKMan 是一个工具&#xff0c;用于在大多数基于Unix的系统上管理多个软件开发工具包的并行版本。它提供了一个方便的命令行接口(CLI)和API&#xff0c…...

JSONObject、fastJson(JsonObject)、Gson(JsonObject)区别

概述 Java中并没有内置的 JSON 解析&#xff0c;需要使用第三方类库 fastJson &#xff1a;阿里巴巴的JSON 库&#xff0c;优势在于解析速度快&#xff0c;解析效率高&#xff0c;可以轻松处理大量的 JSON 数据JackSon &#xff1a; 社区十分活跃&#xff0c;spring框架默认使…...

如何在CSDN中使用ChatGPT

本篇文章致力于帮助大家理解和使用ChatGPT&#xff08;现在CSDN改成”C知道“了&#xff09;。简介ChatGPT是OpenAI公司开发的一种大型语言模型。它是一种基于Transformer架构的深度学习模型&#xff0c;可以对语言进行建模和生成。它可以处理问答、对话生成、文本生成等多种任…...

【Spring6】| GoF之工厂模式

目录 一&#xff1a;GoF之工厂模式 1. 工厂模式的三种形态 2. 简单工厂模式 3. 工厂方法模式 4. 抽象工厂模式&#xff08;了解&#xff09; 一&#xff1a;GoF之工厂模式 &#xff08;1&#xff09;GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组…...

初识Node.js

文章目录初识Node.jsNode.js简介fs模块演示路径问题path路径模块http模块创建web服务器得基本步骤req请求对象res响应对象解决中文乱码问题模块化的基本慨念1、模块化2、Node.js中模块的分类3、Node.js中的模块作用域3.1什么是模块作用域4、向外共享模块作用域中的成员4.1modul…...