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
修改部分:

<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>中增加:

        <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
添加以下内容:

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):

<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连接每个库,分别执行:

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', '');

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

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集群内机器关系):
这种配置是啥意思

<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:

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

<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:

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

<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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值