centos(或openEuler系统)安装clickhouse集群

192.168.9.60、192.168.9.63、192.168.9.64三台centos(或openEuler系统)安装clickhouse集群(数据分散,不是1主2备)

一、安装clickhouse集群

以下操作在每台机器上一摸一样的执行:

关闭防火墙:

防火墙状态:service firewalld status

关闭防火墙:systemctl stop firewalld && systemctl disable firewalld

下载离线安装包

https://packages.clickhouse.com/rpm/stable/?directoryListingLimit=5000&cursor=1-JTdCJTIydiUyMiUzQTElMkMlMjJzdGFydEFmdGVyJTIyJTNBJTIycnBtJTJGc3RhYmxlJTJGY2xpY2tob3VzZS1jb21tb24tc3RhdGljLTIzLjMuMTEuNS54ODZfNjQucnBtJTIyJTJDJTIydXVpZCUyMiUzQSUyMjdlNzVjM2UwNmI2ZDAxN2Q5YzA5ZmMwYTVkZWMxNzk1JTIyJTdE

安装:

sudo yum localinstall -y /usr/clickhouse/clickhouse-common-static-24.2.3.70.x86_64.rpm /usr/clickhouse/clickhouse-server-24.2.3.70.x86_64.rpm /usr/clickhouse/clickhouse-client-24.2.3.70.x86_64.rpm
验证:

clickhouse-server --version

clickhouse-client --version

修改配置文件(3台一摸一样):

vi /etc/clickhouse-server/config.xml

修改部分:

XML 复制代码
<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>192.168.9.60</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>192.168.9.63</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>192.168.9.64</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>

修改部分:

<!-- 允许监听所有网络接口 -->

<listen_host>::</listen_host>

增加用户:

修改 /etc/clickhouse-server/users.xml

<users></users>中增加:

XML 复制代码
        <root>
            <password>Sn@123456</password>
            <!-- 在这里填写明文密码 -->
            <networks>
                <ip>::/0</ip>
            </networks>
        </root>

重启:

sudo systemctl start clickhouse-server

sudo systemctl enable clickhouse-server

sudo systemctl status clickhouse-server

查看端口9000和8123是否开放:

sudo ss -nlpt

连接验证(比如在62连接60或63):

clickhouse-client --host 192.168.9.60 --port 9000 --user root --password 'Sn@123456'

clickhouse-client --host 192.168.9.63 --port 9000 --user root --password 'Sn@123456'

二、安装zookeeper集群

ZooKeeper 依赖于 Java:

sudo yum install -y java-1.8.0-openjdk

下载和解压 ZooKeeper

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz

sudo mv apache-zookeeper-3.6.3-bin /opt/zookeeper

创建一个名为 zoo.cfg 的配置文件(3台机器配置一摸一样):

sudo mkdir -p /opt/zookeeper/data

sudo vi /opt/zookeeper/conf/zoo.cfg

添加以下内容:

bash 复制代码
tickTime=2000
dataDir=/opt/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.9.60:2888:3888
server.2=192.168.9.63:2888:3888
server.3=192.168.9.64:2888:3888

重点:在每个 ZooKeeper 节点上,创建一个 myid 文件并添加相应的 ID(1、2 或 3):

例如,在 192.168.9.60 节点上:

echo "1" > /opt/zookeeper/data/myid

在 192.168.9.63 节点上:

echo "2" > /opt/zookeeper/data/myid

在 192.168.9.64 节点上:

echo "3" > /opt/zookeeper/data/myid

分别启动各自的zookeeper,建议从后往前启动

/opt/zookeeper/bin/zkServer.sh start

配置clickhouse的zookeeper:

每台修改/etc/clickhouse-server/config.xml 文件,添加以下内容(添加位置可搜索zookeeper):

XML 复制代码
<zookeeper>
    <node>
        <host>192.168.9.60</host>
        <port>2181</port>
    </node>
    <node>
        <host>192.168.9.63</host>
        <port>2181</port>
    </node>
    <node>
        <host>192.168.9.64</host>
        <port>2181</port>
    </node>
</zookeeper>

重启clickhouse

sudo systemctl restart clickhouse-server

验证:

/opt/zookeeper/bin/zkServer.sh status
查看端口2181是否开放:

sudo ss -nlpt
查看启动日志:

/opt/zookeeper/logs/zookeeper-root-server-master-01.out
(启动失败,可能是myid没建好,重建,重启每个机器)
测试连接:

/opt/zookeeper/bin/zkCli.sh -server 192.168.9.60:2181

dbveaver连接每个库,分别执行:

sql 复制代码
CREATE DATABASE res;

-- res.rm_metric_data_history definition
CREATE TABLE res.rm_metric_data_history
(

    `resid` String,

    `respara` String,

    `item_code` String,

    `value` String,

    `coltime` DateTime,

    `gentime` DateTime DEFAULT now(),

    `company_code` String
)
ENGINE = MergeTree
ORDER BY coltime
TTL coltime + toIntervalDay(180)
SETTINGS index_granularity = 8192
COMMENT '性能历史表';

INSERT INTO res.rm_metric_data_history
(resid, respara, item_code, value, coltime, gentime, company_code)
VALUES('9a82222a12d54c2a8c775147200d07b9', '-1', 'kafka.topic.net.bytes_in.rate', '1471.964798', '2024-07-12 18:13:00', '2024-07-12 18:11:50', '');
INSERT INTO res.rm_metric_data_history
(resid, respara, item_code, value, coltime, gentime, company_code)
VALUES('9a82222a12d54c2a8c775147200d07b9', '-1', 'kafka.topic.net.bytes_out.rate', '2943.929595', '2024-07-12 18:14:00', '2024-07-12 18:11:50', '');

在某机器执行创建分布式表:

sql 复制代码
CREATE TABLE res.rm_metric_data_history_distributed ON CLUSTER my_cluster
AS res.rm_metric_data_history
ENGINE = Distributed(my_cluster, res, rm_metric_data_history, rand());

仅仅在1个机器执行了,但是另外2个机器也有了这个表了。因为你使用了 ON CLUSTER 语句在 ClickHouse 中创建表。这意味着 ClickHouse 会自动在集群中的所有节点上创建该表。ON CLUSTER 语句会将 DDL 操作(如创建表、修改表、删除表等)广播到集群中所有的节点,因此你只需在一个节点上执行 DDL 操作,就会在整个集群中生效。

select * from res.rm_metric_data_history_distributed;

在63查这个表数据,能查到3个库的所有rm_metric_data_history表数据。

插入数据同理:

INSERT INTO res.rm_metric_data_history_distributed

(resid, respara, item_code, value, coltime, gentime, company_code)

VALUES('9a82222a12d54c2a8c775147200d07b9', '-1', 'mysql.performance.com_selecte', '1', '2024-07-14 18:14:00', '2024-07-13 18:14:00', 'zhejiang');

在某台机器执行插入,数据会根据主键coltime分散到3台机器的res.rm_metric_data_history表里。

备注(clickhouse集群内机器关系):

这种配置是啥意思

XML 复制代码
<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>server1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>server2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>server3</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>

Shard:是数据的水平分片,每个 shard 存储数据的一个子集。

Replica:是数据的副本,每个 shard 可以有多个副本,副本之间的数据是相同的,用于高可用性和负载均衡。

在你的配置中,将 server1 和 server2 放在同一个 shard 里,而 server3 单独放在一个 shard,意味着:

Shard 1 包含 server1 和 server2,它们是彼此的副本,存储相同的数据。

Shard 2 包含 server3,它独立存储数据。

理解这种配置的原因

高可用性:通过将多个副本放在一个 shard 里,可以确保即使一个副本失败,其他副本依然可用。

负载均衡:多个副本可以分担读请求的负载,提高查询性能。

常见的配置模式

每个 Shard 多个 Replica:

适用于需要高可用性和负载均衡的场景。

例如:

XML 复制代码
<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>server1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>server2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>server3</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>server4</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>

每个 Shard 一个 Replica:

适用于数据分布要求明确,不需要副本的场景。

例如:

XML 复制代码
<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>server1</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>server2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>server3</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>
相关推荐
爱瑞瑞23 分钟前
🐧深入浅出的认识 Linux 指令
linux·shell
ajassi200037 分钟前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
小李飞刀李寻欢1 小时前
使用kubeadm部署Kubernetes(k8s)集群的步骤
linux·服务器·ubuntu·kubernetes·k8s
运维成长记1 小时前
阿里云实践创建实例步骤
linux·运维·服务器·阿里云·云计算
THe CHallEnge of THe BrAve1 小时前
Linux检验库是否安装成功
linux·运维·服务器
算家计算2 小时前
告别复杂文档解析噩梦!MonkeyOCR 本地部署教程:支持公式/表格多元素结构化
linux·人工智能·开源
曹勖之3 小时前
ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
xml·linux·服务器·ros2
企鹅侠客4 小时前
ttyd:安全地通过网络共享您的 Linux 终端
linux·运维·ttyd
饭碗、碗碗香4 小时前
【开发常用命令】:服务器与本地之间的数据传输
linux·运维·服务器·笔记·学习
MonkeyBananas5 小时前
在Ubuntu中使用Apache2部署项目
linux·运维·ubuntu