IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> clickhouse 集群搭建步骤 -> 正文阅读

[系统运维]clickhouse 集群搭建步骤

参考官方文档及一些网上文章整理的搭建步骤,能建起来但未实际用于过生产环境,请谨慎用于生产环境。

一、 操作系统设置

 编号需求项操作环境需求细节内容说明
分配主机1操作系统要求ch01,ch02,ch03linux版本:CentOS 7

如果使用VMWare,则关闭vmware的overcommit
update版本选择为最新版本的上一个版本,如最新版本为CentOS 7.3,则安装选择CentOS 7.2。

clickhouse只放在专用的clickhouse数据库主机上,不与类型数据库或应用软件混用,生产环境也不建议与zookeeper服务器混用。
2文件系统要求ch01,ch02,ch03建议为EXT41. Ext4 是最可靠的选择,设置选项noatime
2. 应避免使用 XFS,它工作得很好,但有一些关于性能较低的报告
3. 大多数其他文件系统也应该可以正常工作
4. 不要使用压缩文件系统,ClickHouse 可以自行压缩并且效果更好
5. 不推荐使用加密文件系统,在ClickHouse 中使用内置加密更好

https://clickhouse.com/docs/en/operations/tips/
3CPU要求ch01,ch02,ch031. 使用支持SSE4.2指令集的x86_64架构的CPU
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported

2. 建议使用 睿频加速 和 超线程 技术
ClickHouse在具有大量计算核、时钟频率稍低的平台上比计算核少、时钟频率高的平台上效率更高。例如,ClickHouse在16核 2.6GHz的CPU上运行速度高于8核 3.6GHz的CPU。

https://clickhouse.com/docs/zh/operations/requirements/
4内存要求ch01,ch02,ch03建议32G以上1. 如果内存少于16 GB,可能会遇到各种内存异常,因为默认设置与此内存不匹配。
2. 对于少量数据(压缩后小于200 GB),最好使用与数据量一样多的内存。
3. 对于大量数据及在处理交互式查询时,应该使用合理的内存(128G或更多)。

https://clickhouse.com/docs/en/operations/tips/
5SWAP要求ch01,ch02,ch03生产环境禁用swap filehttps://clickhouse.com/docs/en/operations/requirements/
6建卷要求ch01,ch02,ch031. 单独挂载数据卷:/data
2. clickhouse软件要求至少2G可用空间,数据空间根据实际确定
3. 建议使用 SSD,如果没有,7200转SATA硬盘也可以
https://clickhouse.com/docs/zh/operations/requirements/
https://clickhouse.com/docs/en/operations/tips/
7关闭文件系统/分区的atime选项ch01,ch02,ch03cat /etc/fstab,看到对应的分区是noatime ,nodiratimevi /etc/fstab
# 改为
/dev/vg-data/lv-data /data xfs defaults,noatime,nodiratime 0 0

重启后生效

https://clickhouse.com/docs/en/operations/tips/
8关闭透明大页ch01,ch02,ch03cat /sys/kernel/mm/transparent_hugepage/enabled
应该看到[never]

如果这个文件不存在,则检查
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

如果2个文件都不存在,那么就是在系统内核中移除了THP。
设置方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#永久追加never到以上文件中
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local
9禁用SELinuxch01,ch02,ch03当前生效: setenforce 0
重启后生效:
vi /etc/selinux/config
SELINUX=disabled
 
10设置/etc/hostsch01,ch02,ch03加入各clickhouse与zookeeper节点信息

vi /etc/hosts

192.168.13.81??? ch01
192.168.13.82??? ch02
192.168.13.83??? ch03
192.168.13.100??? zk01
192.168.13.119??? zk02
192.168.13.120??? zk03
 
11NTP时间同步ch01,ch02,ch03crontab -e
* * * * * /usr/sbin/ntpdate 192.168.0.11
 
12调整limit设置ch01,ch02,ch03vi /etc/security/limits.conf

clickhouse soft nproc 2047
clickhouse hard nproc 16384
clickhouse soft nofile 1024
clickhouse hard nofile 65536
 
防火墙实施12网络防火墙要求ch01,ch02,ch03clickhouse间双向开通8123,9000端口 
zookeeper到clickhouse单向开通8123,9000端口 
clickhouse到zookeeper单向开通2181端口 
13本地防火墙要求ch01,ch02,ch03关闭并禁用本地防火墙
systemctl stop firewalld
systemctl disable firewalld
 
网络规划14IP要求ch01,ch02,ch03各zookeeper与clickhouse服务器尽量在相同网段 
网络要求如果可能的话,请使用10G或更高级别的网络。https://clickhouse.com/docs/zh/operations/requirements/

二、?软件安装

编号需求项操作环境需求细节内容说明
1下载rpm包ch01,ch02,ch03下载以下4个rpm包,并上传至服务器目录

clickhouse-client-21.8.14.5-2.noarch.rpm??????
clickhouse-common-static-21.8.14.5-2.x86_64.rpm
clickhouse-server-21.8.14.5-2.noarch.rpm??????
clickhouse-server-common-19.4.0-2.noarch.rpm??
https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
2安装rpm包ch01,ch02,ch03rpm -ivh clickhouse*

期间会要求输入default用户密码
Enter password for default user:
应该看到输出 ClickHouse has been successfully installed.
3创建clickhouse目录ch01,ch02,ch03mkdir -p /data/prd/clickhouse/21.8.14/ch9000/log
mkdir -p /data/prd/clickhouse/21.8.14/ch9000/data
mkdir -p /data/prd/clickhouse/21.8.14/ch9000/tmp

chown -R clickhouse.clickhouse /data
mkdir -p /data/<prd>/clickhouse/<db_version_3_digit>/ch<port>/data
4修改配置文件ch01,ch02,ch03vi /etc/clickhouse-server/config.xml

# 修改以下参数
<level>warning</level>
<log>/data/prd/clickhouse/21.8.14/ch9000/log/clickhouse-server.log</log>
<errorlog>/data/prd/clickhouse/21.8.14/ch9000/log/clickhouse-server.err.log</errorlog>

<!-- Path to data directory, with trailing slash. -->
<path>/data/prd/clickhouse/21.8.14/ch9000/data/</path>

<!-- Path to temporary data for processing hard queries. -->
<tmp_path>/data/prd/clickhouse/21.8.14/ch9000/tmp/</tmp_path>

<listen_host>::</listen_host>

<interserver_http_host>IBG-ClickHouse-DB-CWP01</interserver_http_host>
<level>:日志等级
<log>:clickhouse日志文件路径
<errorlog>:错误日志文件路径
<path>:数据文件路径
<tmp_path>:tmp文件路径
<listen_host>:允许外部机器连接
<interserver_http_host>:其他主机通过什么名字访问该主机,不设置默认为hostname -f命令的执行结果
5启动并enable
clickhouse服务
ch01,ch02,ch03systemctl start clickhouse-server
systemctl enable clickhouse-server
 
6连接测试ch01,ch02,ch03clickhouse-client --password至此单节点clickhouse创建完成

三、?zookeeper创建

 编号需求项操作环境需求细节内容说明
安装java环境1下载java安装包zk01,zk02,zk03可以从Oracle官网或GitHub下载
https://www.oracle.com/java/technologies/downloads
https://github.com/AdoptOpenJDK/openjdk8-binaries/releases
使用java 1.8版本,若操作系统已有则跳过
2解压及软链接zk01,zk02,zk03tar -zxvf jdk-8u311-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_311 /usr/local/java
3设置java环境变量zk01,zk02,zk03vim /etc/profile
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

source /etc/profile
4查看版本zk01,zk02,zk03java -version
安装zookeeper1设置/etc/hostszk01,zk02,zk03加入各zookeeper节点信息

vi /etc/hosts


192.168.13.100??? zk01
192.168.13.119??? zk02
192.168.13.120??? zk03
 
2下载zookeeper安装包zk01,zk02,zk03https://zookeeper.apache.org/releases.html使用3.5.9版本
3创建目录zk01,zk02,zk03mkdir -p? /data/app/deploy
mkdir -p? /data/app/data/zookeeper/data
mkdir -p /data/app/data/zookeeper/logs
 
4解压及软链接zk01,zk02,zk03cd /data/app/deploy
tar -zxf apache-zookeeper-3.5.9-bin.tar.gz
ln -snf apache-zookeeper-3.5.9-bin zookeeper
 
5配置环境变量zk01,zk02,zk03vim /etc/profile
export ZOOKEEPER_HOME=/data/app/deploy/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile
 
配置zookeeper1添加配置文件zk01,zk02,zk03
cd /data/app/deploy/zookeeper/conf
vi zoo.cfg

注意添加zookeeper集群信息
server.1=
192.168.13.100:2888:3888
server.2=
192.168.13.119:2888:3888
server.3=
192.168.13.120:2888:3888
https://clickhouse.com/docs/en/operations/tips/
2配置myidzk01,zk02,zk03echo 1 > /data/app/data/zookeeper/data/myid? # 节点1
echo 2 > /data/app/data/zookeeper/data/myid? # 节点2
echo 3 > /data/app/data/zookeeper/data/myid? # 节点3
各节点myid必须不同
3配置zookeeper日志zk01,zk02,zk03
vi 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=/data/app/logs/zookeeper
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

chmod 755 zookeeper-env.sh
 
4修改日志输入形式zk01,zk02,zk03vi 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日志输出到一个文件,且不会自动清理,一段时间后zk日志会非常大
5配置运行zookeeper的JVMzk01,zk02,zk03vi java.env

#!/usr/bin/env bash
?
#config the jvm parameter in a reasonable,note that shell be source so that do not need to use export
#set classpath,here do not set
#export CLASSPATH=""
#set jvm start parameter , also can set JVMFLAGS variable
SERVER_JVMFLAGS="-Xmx1G -Xms1G -Djute.maxbuffer=8388608 \
??? -verbose:gc -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps \
??? -Xloggc:/data/app/logs/zookeeper/zookeeper-gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=16 -XX:GCLogFileSize=16M
??? -XX:MaxGCPauseMillis=50"

chmod 755 java.env
 
6启动zookeeper服务zk01,zk02,zk03./bin/zkServer.sh start 
7配置为系统服务zk01,zk02,zk03vi /usr/lib/systemd/system/zookeeper.service

[Unit]
Description=Zookeeper Service unit Configuration
After=network.target
?
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
ExecStart=/data/app/deploy/zookeeper/bin/zkServer.sh start
ExecStop=/data/app/deploy/zookeeper/bin/zkServer.sh stop
PIDFile=/data/app/deploy/zookeeper/zookeeper_server.pid
KillMode=none
User=dji
Group=dji
Restart=on-failure
[Install]
WantedBy=multi-user.target
 
8启动并enable服务zk01,zk02,zk03systemctl start zookeeper
systemctl enable zookeeper
 

五、?集群配置

需求项操作环境需求细节内容说明
配置集群信息ch01,ch02,ch03??? <remote_servers>
??????? <!-- Test only shard config for testing distributed storage -->
??????? <ads_cluster>
? ??????????<shard>
??????????????? <!-- 数据自动同步 -->
??? ????????????<internal_replication>true</internal_replication>
??????????????? <replica>
??????????????????? <host>ch01</host>
??????????????????? <port>9000</port>

??????????????? </replica>
??????????????? <replica>

??????????????????? <host>ch02</host>
??????????????????? <port>9000</port>

??????????????? </replica>
??????????????? <replica>

??????????????????? <host>ch03</host>
??????????????????? <port>9000</port>

??????????????? </replica>
??????????? </shard>
??????? </ads_cluster>
??? </remote_servers>
<ads_cluster>:集群名,根据实际自行修改
<shard>:分片配置,有几个分片放几对标签,1对标签等于不分片
<replica>:副本配置,有几个副本放几对标签,1对标签等于没有副本
<internal_replication>:是否只将数据写入其中一个副本。默认为false,表示写入所有副本,在复制表的情况下可能会导致重复和不一致,所以要改为true
配置zookeeper信息ch01,ch02,ch03??? <zookeeper>
??????? <node>
??????????? <host>zk01</host>
??????????? <port>2181</port>
??????? </node>
??????? <node>
??????????? <host>zk02</host>
??????????? <port>2181</port>
??????? </node>
??????? <node>
??????????? <host>zk03</host>
??????????? <port>2181</port>
??????? </node>

??? </zookeeper>
有几个zookeeper节点配几个
复制表的参数替换ch01,ch02,ch03??? <macros incl="macros" optional="true" />
??? <macros>

??????? <shard>01</shard>
??????? <replica>replica01</replica>

??? </macros>
用于创建带副本、分片参数信息的表
如有分片和复制,各节点需要对应修改标签中的值
建库测试任意ch节点create database hydb on cluster ads_cluster;CREATE DATABASE hydb ON CLUSTER ads_cluster

Query id: f74e9584-30f6-4657-9562-cc8ba8200675

┌─host────────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ch01 │ 9000 │????? 0 │?????? │?????????????????? 2 │??????????????? 0 │
│ ch02 │ 9000 │????? 0 │?????? │?????????????????? 1 │??????????????? 0 │
│ ch03 │ 9000 │????? 0 │?????? │?????????????????? 0 │??????????????? 0 │
└─────────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

3 rows in set. Elapsed: 0.126 sec.
建表测试(不带参数)ch01,ch02,ch03CREATE TABLE hydb.hytest(EventDate DateTime,CounterID UInt32,UserID UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/hytest','replica01')PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID))SETTINGS index_granularity = 8192;

CREATE TABLE hydb.hytest(EventDate DateTime,CounterID UInt32,UserID UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/hytest','replica02')PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID))SETTINGS index_granularity = 8192;

CREATE TABLE hydb.hytest(EventDate DateTime,CounterID UInt32,UserID UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/hytest','replica03')PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID))SETTINGS index_granularity = 8192;
 
插入与查询任意ch节点insert into hydb.hytest VALUES (now(), 10000, 10000);

select * from hydb.hytest;
每个节点均可执行insert,且插入的数据应该在所有节点都能看到
建表测试(带参数)任意ch节点CREATE TABLE hydb.events_local ON CLUSTER ads_cluster (ts_date Date,user_id Int64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events_local','{replica}') PARTITION BY ts_date ORDER BY (ts_date);CREATE TABLE hydb.events_local ON CLUSTER ads_cluster
(
??? `ts_date` Date,
??? `user_id` Int64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events_local', '{replica}')
PARTITION BY ts_date
ORDER BY ts_date

Query id: 6a06df3a-2b9a-4e2e-b473-614c6d858fd4

┌─host────────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ch01 │ 9000 │????? 0 │?????? │?????????????????? 2 │??????????????? 0 │
│ ch02 │ 9000 │????? 0 │?????? │?????????????????? 1 │??????????????? 0 │
│ ch03 │ 9000 │????? 0 │?????? │?????????????????? 0 │??????????????? 0 │
└─────────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

3 rows in set. Elapsed: 0.114 sec.?
插入与查询任意ch节点insert into hydb.hytest VALUES (now(), 10000, 10000);

select * from hydb.hytest;
每个节点均可执行insert,且插入的数据应该在所有节点都能看到

七、?新建用户

需求项命名规则权限操作目录备注
DBA用户default所有权限vi user.xml
# 修改
<access_management>1</access_management>
启用RBAC权限控制,可通过SQL执行创建/删除用户、角色及授权等操作
业务读写用户业务名_rw业务DB所有权限(待定)CREATE USER ads_rw@'%' IDENTIFIED BY 'xxxxx' ON CLUSTER ads_cluster;
GRANT all ON ads_db.* TO ads_rw ON CLUSTER ads_cluster;
业务只读用户业务名_r业务DB只读权限CREATE USER ads_r@'%' IDENTIFIED BY 'xxxxx' ON CLUSTER ads_cluster;
GRANT SELECT ON ads_db.* TO ads_r ON CLUSTER ads_cluster;

八、?主要参数设置

序号参数参数说明默认值建议值备注
0config.xml(前面已提及的参数不再重复解释)
1max_connections最大连接数40964096参考阿里云ClickHouse设置
2max_server_memory_usageClickHouse 最大可用内存0(Auto) 默认大小=内存大小 * max_server_memory_usage_to_ram_ratio

如果设置值大于计算值,会被减少至计算值
3max_server_memory_usage_to_ram_ratioClickHouse可用内存占总内存的比例0.9 设为0表示可用所有服务器内存
4max_concurrent_queries同时可处理的MergeTree相关表最大请求数1001000表示不限制,参考阿里云ClickHouse设置
5max_concurrent_insert_queries同时处理的最大INSERT数000表示不限制
6max_concurrent_select_queries同时处理的最大SELECT数000表示不限制
7max_concurrent_queries_for_user每个用户同时可处理的MergeTree相关表最大请求数000表示不限制
8max_table_size_to_drop如果MergeTree表的大小超过max_table_size_to_drop(以字节为单位),则无法使用 DROP 将其删除50GB00表示不限制
9max_partition_size_to_drop如果MergeTree分区的大小超过max_partition_size_to_drop(以字节为单位),则无法使用DROP将其删除50GB00表示不限制
10query_log结合log_queries=1,记录执行的语句log_queries=0 审计需求,注意日志大小及性能影响。一般建成带TTL属性的表,自动清理数据
12keep_alive_timeoutClickHouse在关闭连接之前等待传入请求的秒数3300参考阿里云ClickHouse设置
      
参考:
config.xml??? https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/
user.xml?????? https://clickhouse.com/docs/en/operations/settings/settings-profiles/
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:35:20  更:2022-03-06 13:35:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:48:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码