Clickhouse 生产集群部署(Centos 环境)

news2024/9/9 1:13:33

文章目录

  • 机器环境配置
  • 安装 JDK 8
  • 安装 zookeeper
  • Clickhouse 集群安装
    • rpm 包离线安装
    • 修改全局配置
    • zookeeper配置
    • Shard和Replica设置
    • image.png添加macros配置
    • 启动 clickhouse
      • 启动 10.82.46.135 clickhouse server
      • 启动 10.82.46.163 clickhouse server
      • 启动 10.82.46.218 clickhouse server
  • 验证
    • 创建集群数据库
    • 创建表并写入数据
    • 验证集群高可用

机器环境配置

三台 centos 机器, 部署 1分片3副本 clickhouse 集群

10.82.46.135
10.82.46.163
10.82.46.218

每一台都要配置

1. 关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

setenforce 0

2. 关闭防火墙
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

systemctl mask firewalld

systemctl stop firewalld

yum remove firewalld

3. 配置系统打开文件数限制
vi  /etc/security/limits.conf #文件句柄数量的配置

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

vi /etc/security/limits.d/20-nproc.conf

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

安装 JDK 8

每一台都要安装 JDK

yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

echo $JAVA_HOME
echo $CLASSPATH
echo $PATH

安装 zookeeper

zookeeper默认使用2181端口,集群模式还会用到2888、3888端口,建议zookeeper部署在内网环境中,服务器上关闭防火墙,分别在三台服务器上操作。

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/
cd /usr/local/apache-zookeeper-3.7.1-bin/
cp conf/zoo_sample.cfg conf/zoo.cfg

mkdir -p /data/zookeeper

vim conf/zoo.cfg

# 默认端口 8080 可能被占用
admin.serverPort=8888
# zookeeper 数据存储地址
dataDir=/data/zookeeper
# zookeeper 集群地址
server.1=10.82.46.135:2888:3888
server.2=10.82.46.163:2888:3888
server.3=10.82.46.218:2888:3888

# 三台机 id
touch /data/zookeeper/myid
echo 1 > /data/zookeeper/myid
echo 2 > /data/zookeeper/myid
echo 3 > /data/zookeeper/myid

export ZK_HOME=/usr/local/apache-zookeeper-3.7.1-bin

# 启动
./bin/zkServer.sh start

# 查看日志
tail -f logs/zookeeper-root-server-iov-bigdata-autodrive-prod01.out

# 停止
./bin/zkServer.sh stop

# 查看状态
./bin/zkServer.sh status

Clickhouse 集群安装

rpm 包离线安装

1. 安装依赖包
yum install -y libtool *unixODBC*

2. 分别下载client,static,static-dbg,keeper-dbg和server五个安装包,五个包的版本要一致,这里以23.3.2.37版本为例,把下载的五个包放到/usr/local/src 目录下。
wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-23.3.2.37.x86_64.rpm

wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-23.3.2.37.x86_64.rpm

wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-23.3.2.37.x86_64.rpm

3. 执行安装,如果说我们的机器上有旧版本的 clickhouse,
   该命令会将旧版本升级为我们当前安装的版本,期间会为我们创建一个 default 用户,我们需要输入default 密码
rpm -Uvh --replacepkgs clickhouse-common-static-23.3.2.37.x86_64.rpm clickhouse-client-23.3.2.37.x86_64.rpm clickhouse-server-23.3.2.37.x86_64.rpm

目录说明

  • /etc/clickhouse-server:服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml等
  • /etc/clickhouse-client:客户端配置,包括conf.d文件夹和config.xml文件
  • /var/lib/clickhouse:默认的数据存储目录,建议修改路径到大容量磁盘
  • /var/log/clickhouse-server:默认保存日志的目录,建议修改路径到大容量磁盘

新建存储目录

mkdir -p /data/clickhouse #数据存储目录

mkdir -p /data/clickhouse/log #日志存放目录

修改目录权限:

chown clickhouse:clickhouse /data/clickhouse -R

chown clickhouse:clickhouse /data/clickhouse/log -R

chmod 755 /data/clickhouse -R

chmod 755 /data/clickhouse/log -R

设置数据库密码,默认用户名是:default

cp /etc/clickhouse-server/users.xml /etc/clickhouse-server/users.xml.bak

vi /etc/clickhouse-server/users.xml

<password>123456</password>

:wq! #保存退出

修改全局配置

修改3台服务器ClickHouse配置文件 /etc/clickhouse-server/config.xml

cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak  #备份

修改全局配置信息
vi /etc/clickhouse-server/config.xml

<timezone>Asia/Shanghai</timezone> <!-- #修改时区 -->

<listen_host>::</listen_host> <!-- #开启外部访问 -->

<path>/data/clickhouse/</path> <!-- #修改数据存放路径,默认是<path>/var/lib/clickhouse</path> -->

<level>information</level>   <!-- # 默认 trace -->

<log>/data/clickhouse/log/clickhouse-server.log</log>

<errorlog>/data/clickhouse/log/clickhouse-server.err.log</errorlog>

<size>1000M</size>

<count>10</count>

<!-- <max_open_files>1048576</max_open_files> #文件句柄数量的配置 -->

<http_port>8123</http_port> <!-- #http默认端口 -->

<tcp_port>9000</tcp_port> <!-- #tcp默认端口 -->

<max_concurrent_queries>4096</max_concurrent_queries>  <!-- #限制的是活跃查询的数量,是对正在执行或排队等待执行的查询进行限制 -->

<max_connections>4096</max_connections> <!-- #限制的是客户端连接的数量,是对同时与 ClickHouse 建立的连接进行限制 -->

:wq! #保存退出

zookeeper配置

zookeeper 不一定要和ck的节点安装在同一台机器上,只要ck的节点能够访问zk即可。

<zookeeper>
    <node>
      <host>10.82.46.135</host>
      <port>2181</port>
    </node>
    <node>
      <host>10.82.46.163</host>
      <port>2181</port>
    </node>
    <node>
      <host>10.82.46.218</host>
      <port>2181</port>
    </node>
  </zookeeper>

image.png

Shard和Replica设置

这里使用 1分片3副本演示

<perftest_1shards_3replicas>   <!-- #分片名称,自定义 -->
  <shard>
    <internal_replication>true</internal_replication>  <!--#只写一个副本,其他副本通过zookeeper进行同步,保证数据一致性 -->
    <replica>
      <host>10.82.46.135</host>
      <port>9000</port>
    </replica>
    <replica>
      <host>10.82.46.163</host>
      <port>9000</port>
    </replica>
    <replica>
      <host>10.82.46.218</host>
      <port>9000</port>
    </replica>
  </shard>
</perftest_1shards_3replicas>

image.png添加macros配置

<macros>
  <!-- #分片号3个节点都一样 -->
  <shard>01</shard>   
  <!-- #副本名称,3个节点不能相同,填写各自的ip地址 -->
  <replica>10.82.46.135</replica>  
  <!-- <replica>10.82.46.163</replica> -->
  <!-- <replica>10.82.46.218</replica> -->
</macros>

启动 clickhouse

启动命令

systemctl start clickhouse-server

systemctl status clickhouse-server

systemctl stop clickhouse-server

systemctl restart clickhouse-server

systemctl enable clickhouse-server

启动 10.82.46.135 clickhouse server

image.png
进入 local 数据库控制台,查看集群(perftest_1shards_3replicas)信息,密码就是 rpm 安装的时候输入的密码

clickhouse-client --host 10.82.46.135 --port=9000

select * from system.clusters where cluster = 'perftest_1shards_3replicas';

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';

select * from system.macros;

image.png

启动 10.82.46.163 clickhouse server

image.png
进入 local 数据库控制台,查看集群(perftest_1shards_3replicas)信息,密码就是 rpm 安装的时候输入的密码

clickhouse-client --host 10.82.46.163 --port=9000

select * from system.clusters where cluster = 'perftest_1shards_3replicas';

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';

select * from system.macros;

image.png

启动 10.82.46.218 clickhouse server

进入 local 数据库控制台,查看集群(perftest_1shards_3replicas)信息,密码就是 rpm 安装的时候输入的密码

clickhouse-client --host 10.82.46.218 --port=9000

select * from system.clusters where cluster = 'perftest_1shards_3replicas';

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';

select * from system.macros;

验证

创建集群数据库

在一台机器上执行创建命令:

CREATE DATABASE db_test_01 ON CLUSTER perftest_1shards_3replicas;

集群安装正常的话,在其他两台机器上 show databases;应该也可以看到这个数据库:
image.png

创建表并写入数据

在其中一台机器上执行:

# 创建集群表
CREATE TABLE db_test_01.tb_test_01 ON CLUSTER 'perftest_1shards_3replicas'
(
  `id` Int64,
  `p` Int16
)
ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/tb_test_01', '{replica}')
PARTITION BY p
ORDER BY id;

# 写入数据
INSERT INTO db_test_01.tb_test_01 VALUES(111,111);

INSERT INTO db_test_01.tb_test_01 VALUES(222,222);

INSERT INTO db_test_01.tb_test_01 VALUES(333,333);

INSERT INTO db_test_01.tb_test_01 VALUES(444,444);

在其他节点上查看数据:

select * from db_test_01.tb_test_01;

image.png

验证集群高可用

关闭其中一个节点(10.82.46.135),模拟节点宕机,在另外的节点上写入数据:
systemctl stop clickhouse-server
在另外的节点上写入数据:

INSERT INTO db_test_01.tb_test_01 VALUES(555,555);

重新启动节点(10.82.46.135),查看数据表,发现数据已经同步过来,验证成功:

systemctl start clickhouse-server

clickhouse-client --host 10.82.46.135 --port=9000

select * from db_test_01.tb_test_01;

image.png
删库跑路

drop database db_test_01 on cluster perftest_1shards_3replicas;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的类型注解和静态类型检查使用详解

概要 Python作为一种动态类型语言,其灵活性和易用性使其广受欢迎。然而,动态类型也带来了一些问题,如代码可读性差和运行时错误等。为了提高代码质量和可维护性,Python从3.5版本开始引入了类型注解(Type Hints),并且借助第三方工具可以实现静态类型检查。本文将详细介绍…

熊猫乳品再创新高:超高温灭菌稀奶油,驱动餐饮品质升级

随着餐饮行业的蓬勃发展&#xff0c;乳制品在餐饮端的应用日益广泛且需求多样化。中华老字号品牌企业熊猫乳品&#xff0c;在近期推出了专为餐饮定制的高品质产品-熊猫乳品超高温灭菌稀奶油&#xff0c;凭借其卓越性能&#xff0c;在多项测试中脱颖而出&#xff0c;成为餐饮制作…

Docker入门指南:基础命令、操作容器与镜像管理,附存储、网络及Compose应用

Docker命令 下载镜像 命令命令示例docker search 镜像名检索镜像docker search nginxdocker pull 镜像名下载镜像docker pull nginxdocker images / docker image ls查看镜像列表/docker rmi 镜像名/IMAGE ID删除指定镜像docker rmi nginx / docker rmi e784f4560448 镜像名&…

【计算机网络】TCP和UDP的封装以及案例

TCP和UDP的封装以及案例 背景知识TCP实现UDP实现封装Network用NetWork再次实现TCP和UDP小知识点 背景知识 TCP&#xff1a;传输控制协议&#xff08;Transmission Control Protocol&#xff09; UDP&#xff1a;用户数据报协议 &#xff08;User Datagram Protocol&#xff09…

二叉树--堆(上卷)

二叉树–堆&#xff08;上卷&#xff09; 树 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽…

重新定义高性能轻薄本!华硕灵耀16 Air评测:锐龙AI 9 HX 370当今最优秀移动处理器...

一、前言&#xff1a;制程工艺不变 IPC性能暴涨20%的Zen 5架构 这十年来AMD的CPU给我们带来了一次又一次的惊喜&#xff01; 今天上市AI PC所搭载的锐龙AI 300系列处理器&#xff0c;与上代的锐龙8000系列移动处理器一样&#xff0c;都是采用了台积电4nm先进工艺。 但如标题所言…

什么是杀猪盘?

GPT-4o (OpenAI) "杀猪盘"是一种常见的网络诈骗形式&#xff0c;也被称为“爱情投资诈骗”或“婚恋诈骗”。这种骗局通常有以下几个关键步骤&#xff1a; 1. **接触和交流**&#xff1a;诈骗者在交友平台或社交媒体上创建虚假的个人资料&#xff0c;吸引受害者&…

Sentinel 核心概念和工作流程详解

前言&#xff1a; 上一篇文章中&#xff0c;我们对 Sentinel 有了基本认知&#xff0c;知道其是 Alibaba 开源的一个服务稳定性组件&#xff0c;我们从 Sentinel 控制台认识了 Sentinel 的流控、降级、热点、授权规则&#xff0c;本篇我们将从核心概念和工作流程方面继续分析 …

词的向量化和文本向量化

词的向量化和文本向量化 向量化one-hot编码提前准备词表不提前准备词表one-hot缺点 词向量简介词向量的定义和目标word embedding和word vector的区别onehot编码与词向量关系构建 训练方式1&#xff08;基于语言模型&#xff09;训练方式2&#xff08;基于窗口&#xff09;CBOW…

兴业法拍网周报|7月25日起,四大商业银行下调人民币存款利率

黄金地段&#xff1a;圣世一品潜藏团结湖公园对面&#xff0c;居身CBD复合都会核心区&#xff0c;咫尺央视新址&#xff0c;紧邻京广中心&#xff0c;毗邻国贸、嘉里中心、银泰中心、财富中心。 居住舒适&#xff1a;社区是2010年建成的新商品房社区&#xff0c;建筑风格现代简…

数据安全系统的定义与重要性

数据安全系统是指为数据处理系统建立和采用的技术和管理的安全保护机制&#xff0c;旨在保护计算机硬件、软件和数据不因偶然和恶意的原因遭到破坏、更改和泄露。数据安全系统在现代信息化社会中扮演着至关重要的角色&#xff0c;它确保了数据的完整性、可用性和保密性。以下是…

ShardingSphere实战(1)- 分库分表基础知识

一、为什么要分库分表 分库分表是一种数据库优化策略&#xff0c;主要用于解决大型应用或高并发场景下数据库性能瓶颈的问题。具体来说&#xff0c;分库分表可以带来以下好处&#xff1a; 提高性能&#xff1a; 减少单个数据库实例的负载&#xff0c;避免单点性能瓶颈。当数据…

【Linux从青铜到王者】tcp协议2

滑动窗口 滑动窗口是什么 上篇提到如果两端发送数据如果是一发一收那就是串行&#xff0c;效率很低&#xff0c;所以可以一次发送多个报文&#xff0c;一次也可以接受多个报文&#xff0c;可以大大的提高性能(其实是将多个段的等待时间重叠在一起了&#xff09; 那么是怎么发…

Golang | Leetcode Golang题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; func lengthOfLIS(nums []int) int {if len(nums)<1{return len(nums)}dp : make([]int,len(nums))for i:0;i<len(nums);i{dp[i]1}res : 1for i:1;i<len(nums);i{for j:0;j<i;j{if nums[i] > nums[j]{dp[i] max(dp[i],dp[j…

Java 沙漏图案(Hour-glass Pattern)

给定正整数 n&#xff0c;以沙漏形式打印数字模式。示例&#xff1a; 输入&#xff1a;rows_no 7 输出&#xff1a; 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6…

物联网平台简介与选型

前言 什么是物联网&#xff1f; 简单解释&#xff1a;把你感兴趣的事物连接到网络。 阿里云定义&#xff1a;物联网&#xff08;Internet of Things&#xff0c;简称 IoT&#xff09;是指通过互联网连接和通信的物理设备和对象的网络。它是一个由传感器、软件和通信设备组成的…

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA

解纠缠也对应于属性编辑&#xff0c;比如人脸的属性编辑&#xff0c;将人脸变微笑、变衰老&#xff0c;其中每一个属性变化也对应了一种有意义的latent direction 。想要应用这种direction可以分为两种方式&#xff1a;有监督的linear-probe&#xff08;线性探针&#xff09;和…

Logback 日志打印导致程序崩溃的实战分析

在软件开发和运维中&#xff0c;日志记录是必不可少的一环&#xff0c;帮我们追踪程序的行为&#xff0c;定位问题所在。然而&#xff0c;有时日志本身却可能成为问题的根源。本文将通过一个真实的案例来探讨 Logback 日志系统中的一个常见问题&#xff0c;当并发量大&#xff…

Vue.js常见指令

一、v-text与v-html v-text更新html元素的innerText v-html更新html元素的innerHtml 如果需要更新部分内容需要使用{{ }} 双括号差值表达式 案例&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>VUE指令 …

python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法

问题 升级新版pip 之后,不论是本地,还是使用anaconda环境,都有可能在用pip下载的时候出现错误: ModuleNotFoundError: No module named pip._internal&#xff0c;我的电脑中存在好几个版本的Python。 解决办法&#xff1a; python -m ensurepip python -m pip install --upgr…