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>
相关推荐
我言秋日胜春朝★2 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
饮啦冰美式33 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp33 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill34 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge37 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign1731439 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
孤客网络科技工作室3 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux