ClickHouse多实例部署

ClickHouse多实例部署,第1张

ClickHouse多实例部署 ClickHouse多实例部署

文章借鉴http://fuxkdb.com/2020/05/02/2020-05-02-ClickHouse多实例部署/
感谢大佬!
生产环境并不建议多实例部署, ClickHouse一个查询可以用到多个CPU, 本例只适用于测试环境

集群部署关系如下:

逻辑结构图如下:

编辑三台主机/etc/hosts添加如下内容:

172.16.120.10 centos-1
172.16.120.11 centos-2
172.16.120.12 centos-3
依赖组件安装 JDK 下载openjdk
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz
tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz -C /usr/local/
做软链
ln -s /usr/local/jdk8u242-b08 /usr/local/java
配置环境变量
#vi ~/.bashrc
 
export JAVA_HOME=/usr/local/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
ZooKeeper

3.6.0有bug

所以改用稳定版本3.4.14

下载安装包
wget https://downloads.apache.org/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/
做软链
ln -s /usr/local/zookeeper-3.4.14 /usr/local/zookeeper
配置环境变量
#vi ~/.bashrc
 
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
修改配置文件
cd /usr/local/zookeeper/conf
 
 
#参考官方
#https://clickhouse.tech/docs/en/operations/tips/#zookeeper
#vim zoo.cfg
 
 
tickTime=2000
initLimit=30000
syncLimit=10
maxClientCnxns=2000
maxSessionTimeout=60000000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
preAllocSize=131072
snapCount=3000000
leaderServes=yes
clientPort=2181
 
 
 
集群配置部分三个节点分别为:
# centos-1
server.1=0.0.0.0:2888:3888
server.2=172.16.120.11:2888:3888
server.3=172.16.120.12:2888:3888
  
  
# centos-2
server.1=172.16.120.10:2888:3888
server.2=0.0.0.0:2888:3888
server.3=172.16.120.12:2888:3888
  
  
# centos-3
server.1=172.16.120.10:2888:3888
server.2=172.16.120.11:2888:3888
server.3=0.0.0.0:2888:3888
创建目录
mkdir -p /data/zookeeper/{data,logs}
mkdir -p /usr/local/zookeeper/logs
myid
# centos-1
echo "1">/data/zookeeper/data/myid
  
# centos-2
echo "2">/data/zookeeper/data/myid
  
# centos-3
echo "3">/data/zookeeper/data/myid
配置zk日志

默认zk日志输出到一个文件,且不会自动清理,所以,一段时间后zk日志会非常大

1.zookeeper-env.sh ./conf目录下新建zookeeper-env.sh文件,修改到sudo chmod 755 zookeeper-env.sh权限
#cat conf/zookeeper-env.sh
 
#!/usr/bin/env bash
#tip:custom configurationfile,do not amend the zkEnv.sh file
#chang the log dir and output of rolling file
 
ZOO_LOG_DIR="/usr/local/zookeeper/logs"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
2.log4j.properties 修改日志的输入形式
zookeeper.root.logger=INFO, ROLLINGFILE
#zookeeper.root.logger=INFO, ConSOLE
 
 
# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=128MB
# uncomment the next line to limit number of backup files
log4j.appender.ROLLINGFILE.MaxBackupIndex=10
配置运行zk的JVM

./conf目录下新建java.env文件,修改到sudo chmod 755 java.env权限,主要用于GC log,RAM等的配置.

#!/usr/bin/env bash
#config the jvm parameter in a reasonable
#note that the shell is source in so that do not need to use export
#set java  classpath
#CLASSPATH=""
#set jvm start parameter , also can set JVMFLAGS variable
SERVER_JVMFLAGS="-Xms1024m -Xmx2048m $JVMFLAGS"
启动zookeeper服务(所有节点)
# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
验证zk
# zkServer.sh status
 
#bin/zkCli.sh -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
 
 
[zk: 127.0.0.1:2181(CONNECTED) 0]
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
 
[zk: 127.0.0.1:2181(CONNECTED) 1] create /zk_test mydata
Created /zk_test
 
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[zk_test, zookeeper]
 
[zk: 127.0.0.1:2181(CONNECTED) 3] get /zk_test
mydata
 
[zk: 127.0.0.1:2181(CONNECTED) 4] set /zk_test junk
[zk: 127.0.0.1:2181(CONNECTED) 5] get /zk_test
junk
 
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]
 
[zk: 127.0.0.1:2181(CONNECTED) 8]
ClickHouse安装 yum安装
yum install yum-utils
rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
 
 
yum install clickhouse-server clickhouse-client
RPM方式离线安装

查看clickhouse源码tag,找出最近的长期维护的版本

官网下载如下包:
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-client-21.8.12.29-2.noarch.rpm 
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-21.8.12.29-2.x86_64.rpm
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-dbg-21.8.12.29-2.x86_64.rpm
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-server-21.8.12.29-2.noarch.rpm
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-test-21.8.12.29-2.noarch.rpm
安装clickhouse
rpm -ivh /soft/clickhouse/*.rpm
创建目录
centos-1 创建目录:
mkdir -p /data/clickhouse/{node1,node4}/{data,tmp,logs}
  
centos-2 创建目录:
mkdir -p /data/clickhouse/{node2,node5}/{data,tmp,logs}
  
centos-3 创建目录:
mkdir -p /data/clickhouse/{node3,node6}/{data,tmp,logs}
创建配置文件

配置clickhouse参数文件,账户文件,分片配置文件

node1配置文件如下 config.xml


    
    
        warning
        /data/clickhouse/node1/logs/clickhouse.log
        /data/clickhouse/node1/logs/error.log
        500M
        5
    
    
    8123
    9000
    9009
    centos-1
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node1/
    /data/clickhouse/node1/tmp/
    /data/clickhouse/node1/users.xml
    /data/clickhouse/node1/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8001
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node1/metrika.xml


users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    


metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        01
        
        node1
        
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

node2配置文件如下: config.xml


    
    
        warning
        /data/clickhouse/node2/logs/clickhouse.log
        /data/clickhouse/node2/logs/error.log
        500M
        5
    
    
    8123
    9000
    9009
    centos-2
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node2/
    /data/clickhouse/node2/tmp/
    /data/clickhouse/node2/users.xml
    /data/clickhouse/node2/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8001
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node2/metrika.xml

users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    

metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        02
        
        node2
        
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

node3配置文件如下: config.xml


    
    
        warning
        /data/clickhouse/node3/logs/clickhouse.log
        /data/clickhouse/node3/logs/error.log
        500M
        5
    
    
    8123
    9000
    9009
    centos-3
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node3/
    /data/clickhouse/node3/tmp/
    /data/clickhouse/node3/users.xml
    /data/clickhouse/node3/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8001
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node3/metrika.xml

users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    

metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        03
        
        node3
        
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

node4配置文件如下: config.xml


    
    
        warning
        /data/clickhouse/node4/logs/clickhouse.log
        /data/clickhouse/node4/logs/error.log
        500M
        5
    
    
    8124
    9002
    9010
    centos-1
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node4/
    /data/clickhouse/node4/tmp/
    /data/clickhouse/node4/users.xml
    /data/clickhouse/node4/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8002
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node4/metrika.xml

users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    

metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        02
        
        node4
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

node5配置文件如下: config.xml


    
    
        warning
        /data/clickhouse/node5/logs/clickhouse.log
        /data/clickhouse/node5/logs/error.log
        500M
        5
    
    
    8124
    9002
    9010
    centos-2
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node5/
    /data/clickhouse/node5/tmp/
    /data/clickhouse/node5/users.xml
    /data/clickhouse/node5/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8002
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node5/metrika.xml

users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    

metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        03
        
        node5
        
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

node6配置文件如下: config.xml


    
    
        warning
        /data/clickhouse/node6/logs/clickhouse.log
        /data/clickhouse/node6/logs/error.log
        500M
        5
    
    
    8124
    9002
    9010
    centos-3
    
    
    0.0.0.0
    2048
    3
    64
    4294967296
    5368709120
    /data/clickhouse/node6/
    /data/clickhouse/node6/tmp/
    /data/clickhouse/node6/users.xml
    /data/clickhouse/node6/access/
    default
    
        system
        query_log
        toMonday(event_date)
        7500
    
    
        system
        query_thread_log
        toMonday(event_date)
        7500
    
    
        /metrics
        8002
        true
        true
        true
    
    default
    Asia/Shanghai
    
    
    
    
    3600
    3600
    300
    0
    
        300
        600
        2
    
    0
    0
    
        
        /clickhouse/task_queue/ddl
    
    /data/clickhouse/node6/metrika.xml

users.xml


    
        
            
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            8
            1
        
        
            8
            54975581388
            61847529062
            21474836480
            21474836480
            0
            random
            1
            1
            1
        
    
    
        
            
                3600
                0
                0
                0
                0
                0
            
        
    
    
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            1
            
                ::/0
            
            default
            default
        
        
            328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c
            
                ::/0
            
            readonly
            default
        
    

metrika.xml


    
    
        
            
            
                true
                
                    centos-1
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-3
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-2
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-1
                    9002
                    default
                    t5P9rh5M
                
            
            
            
                true
                
                    centos-3
                    9000
                    default
                    t5P9rh5M
                
                
                
                    centos-2
                    9002
                    default
                    t5P9rh5M
                
            
        
    
    
    
        
            centos-1
            2181
        
        
            centos-2
            2181
        
        
            centos-3
            2181
        
    
    
        01
        01
        
        node6
        
    
    
        ::/0
    
    
    
        
            10000000000
            0.01
            lz4
            
        
    

用户密码生成方式

密码生成方式:

https://clickhouse.tech/docs/en/operations/settings/settings_users/

shell命令行执行:

PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-' 

输出结果

t5P9rh5M(明文密码)
328afba155145b9ab4dadc378a38f830107b1c48ae64a37690b163408b47c52c(加密长密码, 即password_sha256_hex) 
修改属主
cd /data && chown -R  clickhouse.clickhouse clickhouse
进程守护

使用systemd管理

以node1为例

# vim /etc/systemd/system/clickhouse_node1.service
 
 
[Unit]
Description=ClickHouse Server (analytic DBMS for big data)
Requires=network-online.target
After=network-online.target
 
[Service]
#Type=simple
Type=forking
User=clickhouse
Group=clickhouse
Restart=always
RestartSec=30
RuntimeDirectory=clickhouse-server
#ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid
ExecStart=/usr/bin/clickhouse-server --daemon --config=/data/clickhouse/ch_9000/config.xml --pid-file=/data/clickhouse/node1/clickhouse-server.pid
#PIDFile=/data/clickhouse/node1/clickhouse-server.pid
LimitCORE=infinity
LimitNOFILE=500000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_IPC_LOCK CAP_SYS_NICE
 
[Install]
WantedBy=multi-user.target

以上面的配置作为模板创建 node1~node6 的systemd配置文件

ClickHouse服务启动
centos-1主机进行如下 *** 作:
systemctl start clickhouse_node1.service
systemctl start clickhouse_node4.service
 
 
centos-2主机进行如下 *** 作:
systemctl start clickhouse_node2.service
systemctl start clickhouse_node5.service
 
 
centos-3主机进行如下 *** 作:
systemctl start clickhouse_node3.service
systemctl start clickhouse_node6.service
 
 
验证如下端口是否被监听:
netstat -anlp|grep 9000 (clickhouse tcp端口)
netstat -anlp|grep 9002 (clickhouse tcp端口)
netstat -anlp|grep 8123    (clickhouse http端口)
netstat -anlp|grep 8124    (clickhouse http端口)
netstat -anlp|grep 9009   (clickhouse 数据交互端口)
netstat -anlp|grep 9010    (clickhouse 数据交互端口)

 
 
登陆方式:
clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="show databases"
验证集群状态
[root@vm1 ~]# clickhouse-client -u default --password t5P9rh5M --port 9000 -hcentos-1 --query="select cluster,shard_num,replica_num,host_name,port,user from system.clusters"
ch_cluster_all	1	1	centos-1	9000	default
ch_cluster_all	1	2	centos-3	9002	default
ch_cluster_all	2	1	centos-2	9000	default
ch_cluster_all	2	2	centos-1	9002	default
ch_cluster_all	3	1	centos-3	9000	default
ch_cluster_all	3	2	centos-2	9002	default
接下来再来看一下集群的分片信息(宏变量):分别在各自机器上执行下面命令:(以node1为例)
vm1 :) select * from system.macros;

SELECt *
FROM system.macros

Query id: dfe3400f-cbce-4657-9ed1-a4250b58748c

┌─macro───┬─substitution─┐
│ layer   │ 01           │
│ replica │ node1        │
│ shard   │ 01           │
└─────────┴──────────────┘

3 rows in set. Elapsed: 0.003 sec
测试集群功能是否正常 创建数据库testdb
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1
ClickHouse client version 20.3.4.10 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.3.4 revision 54433.

centos-1 :) create database testdb on cluster ch_cluster_all;

CREATE DATAbase testdb ON CLUSTER ch_cluster_all

┌─host─────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ centos-3 │ 9000 │      0 │       │                   5 │                0 │
│ centos-2 │ 9000 │      0 │       │                   4 │                0 │
│ centos-1 │ 9002 │      0 │       │                   3 │                0 │
│ centos-3 │ 9002 │      0 │       │                   2 │                0 │
│ centos-1 │ 9000 │      0 │       │                   1 │                0 │
│ centos-2 │ 9002 │      0 │       │                   0 │                0 │
└──────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

6 rows in set. Elapsed: 0.107 sec. 
创建本地表
clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-01/sbtest','node1')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"



clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-1 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-02/sbtest','node4')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"



clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-2 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-02/sbtest','node2')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"



clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-2 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-03/sbtest','node5')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"



clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-3 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-03/sbtest','node3')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"


clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-3 --query="CREATE TABLE testdb.sbtest_local
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-01/sbtest','node6')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SETTINGS index_granularity = 8192;"
创建分布式
clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"

clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-1 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"

clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-2 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"

clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-2 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"

clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-3 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"

clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-3 --query="
CREATE TABLE testdb.sbtest (
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = Distributed(ch_cluster_all,testdb, sbtest_local, rand())"
验证数据复制状态: 写入分片1组的写入节点的local表
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="insert into testdb.sbtest_local VALUES (now(), 10000, 10000)"
在分片1组local表可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="select * from testdb.sbtest_local"
2020-05-02 23:02:31     10000   10000
在分片1 副本节点local读取可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-3 --query="select * from testdb.sbtest_local"
2020-05-02 23:02:31     10000   10000
写入分片2组的写入节点的local表
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-2 --query="insert into testdb.sbtest_local VALUES (now(), 20000, 20000)"
在分片2组local表可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-2 --query="select * from testdb.sbtest_local"
2020-05-02 23:03:31     20000   20000
在分片2 副本节点local读取可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-1 --query="select * from testdb.sbtest_local"
2020-05-02 23:03:31     20000   20000
写入分片3组的写入节点的local表
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-3 --query="insert into testdb.sbtest_local VALUES (now(), 30000, 30000)"
在分片3组local表可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-3 --query="select * from testdb.sbtest_local"
2020-05-02 23:04:39     30000   30000
在分片3 副本节点local读取可见一条记录
# clickhouse-client -u default --password xxxxxx --port 9002 -hcentos-2 --query="select * from testdb.sbtest_local"
2020-05-02 23:04:39     30000   30000
Distributed表验证
# clickhouse-client -u default --password xxxxxx --port 9000 -hcentos-1 --query="select * from testdb.sbtest"
2020-05-02 23:02:31     10000   10000
2020-05-02 23:03:31     20000   20000
2020-05-02 23:04:39     30000   30000

可以看到结果是之前写入的3条记录

结论,clickhouse基本功能正常

实现类似mysql免输用户密码登录

我们都知道mysql cli可以通过在my.cnf添加如下参数实现快速登录

[client]
user=xx
password=xxx

clickhouse-client也可以

根据官方文档描述, 在client config文件中添加如下参数即可

# vim ~/.clickhouse-client/config.xml 


    username
    password
    False

分布式DDL *** 作

默认情况下,CREATE、DROp、ALTER、RENAME *** 作仅仅在当前执行该命令的server上生效。在集群环境下,可以使用ON CLUSTER语句,这样就可以在整个集群发挥作用。

分布式表只是作为一个查询引擎,本身不存储任何数据,查询时将sql发送到所有集群分片,然后进行进行处理和聚合后将结果返回给客户端,因此clickhouse限制聚合结果大小不能大于分布式表节点的内存,当然这个一般条件下都不会超过;分布式表可以所有实例都创建,也可以只在一部分实例创建,这个和业务代码中查询的示例一致,建议设置多个,当某个节点挂掉时可以查询其他节点上的表,分布式表的建表语句如下:

分布式表一般用本地表加all来表示,这里distable就是上面xml配置中的标签名称,最后的rand()表示向分布式表插入数据时,将随机插入到副本,在生产环境建议插入的时候客户端可以随机分桶插入到本地表,查询的时候走分布式表,即分布式表只读,本地复制表只写.

比如创建一张分布式表:

CREATE TABLE log_test_2_all ON CLUSTER cluster_2shards_1replicas
(
    `ts` DateTime,
    `uid` String,
    `biz` String
)
ENGINE = Distributed(cluster_2shards_1replicas,default,log_test_2_local,rand())

Distributed表引擎的定义形式如下所示:关于ClickHouse的表引擎,后续文章会做详细解释。

Distributed(cluster_name, database_name, table_name[, sharding_key])

各个参数的含义分别如下:

  • cluster_name:集群名称,与集群配置中的自定义名称相对应。
  • database_name:数据库名称
  • table_name:表名称
  • sharding_key:可选的,用于分片的key值,在数据写入的过程中,分布式表会依据分片key的规则,将数据分布到各个节点的本地表。

温馨提示:

创建分布式表是读时检查的机制,也就是说对创建分布式表和本地表的顺序并没有强制要求。

同样值得注意的是,在上面的语句中使用了ON CLUSTER分布式DDL,这意味着在集群的每个分片节点上,都会创建一张Distributed表,这样便可以从其中任意一端发起对所有分片的读、写请求。

创建完成上面的分布式表时,在每台机器上查看表,发现每台机器上都存在一张刚刚创建好的表。

接下来就需要创建本地表了,使用变量宏创建本地表:

CREATE TABLE log_test_2_local ON CLUSTER cluster_2shards_1replicas  #两个分片,一个副本
(
    `ts` DateTime,
    `uid` String,
    `biz` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/log_test_2', '{replica}')
PARTITION BY toYYYYMMDD(ts)
ORDER BY ts
SETTINGS index_granularity = 8192

ReplicatedMergeTree 参数

  • zoo_path — ZooKeeper 中该表的路径。
  • replica_name — ZooKeeper 中的该表的副本名称。

如上例所示,这些参数可以包含宏替换的占位符,即大括号的部分。它们会被替换为配置文件里 ‘macros’ 那部分配置的值。示例:


    01
    emr-header-1

ZooKeeper 中该表的路径»对每个可复制表都要是唯一的。不同分片上的表要有不同的路径。

/clickhouse/tables/ 是公共前缀,我们推荐使用这个。

{shard} 是分片标识部分。对于大多数情况来说,你只需保留 {shard} 占位符即可,它会替换展开为分片标识。

table_name 是该表在 ZooKeeper 中的名称。使其与 ClickHouse 中的表名相同比较好。 这里它被明确定义,跟 ClickHouse 表名不一样,它并不会被 RENAME 语句修改(你可以在前面添加一个数据库名称 table_name 也是 例如: db_name.table_name)。

添加一点数据

INSERT INTO log_test_2_all VALUES ('2019-06-07 20:01:01', 'a', 'show');
INSERT INTO log_test_2_all VALUES ('2019-06-07 20:01:02', 'b', 'show');
INSERT INTO log_test_2_local VALUES ('2019-06-07 20:01:03', 'a', 'click');
INSERT INTO log_test_2_local VALUES ('2019-06-08 20:01:04', 'c', 'show');
INSERT INTO log_test_2_local VALUES ('2019-06-08 20:01:05', 'c', 'click');

查看第一个副本服务器的本地表

xx :) SELECT hostName(),* FROM log_test_2_local;
SELECt
  ``hostName(),
  ``*
FROM log_test

┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.5 │ 2019-06-08 20:01:04 │ c  │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.5 │ 2019-06-07 20:01:03 │ a  │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.5 │ 2019-06-08 20:01:05 │ c  │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
3 rows in set. Elapsed: 0.002 sec.

查看第二个副本服务器的本地表

xx :) SELECt hostName(),* FROM log_test_2_local;
SELECt
  ``hostName(),
  ``*
FROM log_test

┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-07 20:01:02 │ b  │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-07 20:01:03 │ a  │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
2 rows in set. Elapsed: 0.003 sec.

查看任意服务器的分布式表

xx :) SELECt hostName(),* FROM log_test_2_all;
SELECt
  ``hostName(),
  ``*
FROM log_test

┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-08 20:01:04 │ c  │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-08 20:01:05 │ c  │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-07 20:01:01 │ a  │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-07 20:01:02 │ b  │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-07 20:01:03 │ a  │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
5 rows in set. Elapsed: 0.003 sec.

结论: 分布式表不存储数据,而是一个全局视图,展示所有本地表的数据

集群修改字段类型

ALTER TABLE log_test ON CLUSTER cluster_2shards_1replicas MODIFY COLUMN biz LowCardinality(String) ;

集群下线分区

ALTER TABLE log_test ON CLUSTER cluster_2shards_1replicas DETACH PARTITION 20190608;

集群删除表

DROp TABLE log_test ON CLUSTER cluster_2shards_1replicas;
问题
ClickHouse到底改写本地表还是分布式表???
    如果预估自己的业务数据量不大(日增不到百万行), 那么写分布式表和本地表都可以, 但要注意如果选择写本地表, 请保证每次写入数据都建立新的连接, 且每个连接写入的数据量基本相同

    如果预估自己的业务数据量大(日增百万以上, 并发插入大于10), 那么请写本地表

    建议每次插入50W行左右数据, 最多不可超过100W行. 总之CH不像MySQL要小事务. 比如1000W行数据, MySQL建议一次插入1W左右, 使用小事务, 执行1000次. CH建议20次,每次50W. 这是MergeTree引擎原理决定的, 频繁少量插入会导致data part过多, 合并不过来.

    再有, AP不像TP, TP为了避免建立新连接产生的损耗影响性能, 通常会使用长连接, 连接池等技术做优化. 但AP业务不需要, 因为AP的属性就不会有高并发, 小SQL.

2 │ b │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-07 20:01:03 │ a │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
2 rows in set. Elapsed: 0.003 sec.

查看任意服务器的分布式表

xx  SELECT hostName(),* FROM log_test_2_all;
SELECt
hostName(),*
FROM log_test

┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-08 20:01:04 │ c │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-08 20:01:05 │ c │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-07 20:01:01 │ a │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz──┐
│ 192.168.4.3 │ 2019-06-07 20:01:02 │ b │ show │
└─────────────────────────────────┴─────────────────────┴─────┴──────┘
┌─hostName()──────────────────────┬──────────────────ts─┬─uid─┬─biz───┐
│ 192.168.4.3 │ 2019-06-07 20:01:03 │ a │ click │
└─────────────────────────────────┴─────────────────────┴─────┴───────┘
5 rows in set. Elapsed: 0.003 sec.

结论: 分布式表不存储数据,而是一个全局视图,展示所有本地表的数据

集群修改字段类型

ALTER TABLE log_test ON CLUSTER cluster_2shards_1replicas MODIFY COLUMN biz LowCardinality(String) ;

集群下线分区

ALTER TABLE log_test ON CLUSTER cluster_2shards_1replicas DETACH PARTITION 20190608;

集群删除表

DROP TABLE log_test ON CLUSTER cluster_2shards_1replicas;

## 问题

ClickHouse到底改写本地表还是分布式表???
如果预估自己的业务数据量不大(日增不到百万行), 那么写分布式表和本地表都可以, 但要注意如果选择写本地表, 请保证每次写入数据都建立新的连接, 且每个连接写入的数据量基本相同

如果预估自己的业务数据量大(日增百万以上, 并发插入大于10), 那么请写本地表

建议每次插入50W行左右数据, 最多不可超过100W行. 总之CH不像MySQL要小事务. 比如1000W行数据, MySQL建议一次插入1W左右, 使用小事务, 执行1000次. CH建议20次,每次50W. 这是MergeTree引擎原理决定的, 频繁少量插入会导致data part过多, 合并不过来.

再有, AP不像TP, TP为了避免建立新连接产生的损耗影响性能, 通常会使用长连接, 连接池等技术做优化. 但AP业务不需要, 因为AP的属性就不会有高并发, 小SQL.
# 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5676195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存