clickhouse模拟主从部署(1分片2副本使用单独分片配置文件metrika.xml)

环境
OS:Centos 7
clickhouse:24.8.11.5
拓扑结构:3分片单副本
节点ip 角色
192.168.1.102 副本1
192.168.1.105 副本2, zookeeper

 

1.安装zookeeper(单机)

或是参考如下安装部署连接:
https://www.cnblogs.com/hxlasky/p/18683624

 

1.准备安装介质
介质下载地址:
https://packages.clickhouse.com/rpm/stable/
或是
https://packagecloud.io/Altinity/clickhouse

我这里下载的是如下三个包
clickhouse-client-24.8.11.5.x86_64.rpm
clickhouse-common-static-24.8.11.5.x86_64.rpm
clickhouse-server-24.8.11.5.x86_64.rpm

[root@node1 soft]# mkdir /soft/clickhouse
[root@node1 soft]# cd /soft/clickhouse

wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-24.8.11.5.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-24.8.11.5.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-24.8.11.5.x86_64.rpm

2.安装

[root@localhost clickhouse]#rpm -ivh clickhouse-common-static-24.8.11.5.x86_64.rpm
[root@localhost clickhouse]#rpm -ivh clickhouse-client-24.8.11.5.x86_64.rpm
[root@localhost clickhouse]#rpm -ivh clickhouse-server-24.8.11.5.x86_64.rpm

3.修改数据目录和日志目录
创建数据目录和日志目录
[root@localhost ~]# mkdir -p /home/middle/clickhouse/data
[root@localhost ~]# mkdir -p /home/middle/clickhouse/log
[root@localhost ~]# chown -R clickhouse:clickhouse /home/middle/clickhouse/

复制代码
修改数据目录
vi /etc/clickhouse-server/config.xml
原来的
    <!-- Path to data directory, with trailing slash. -->
    <path>/var/lib/clickhouse/</path>
修改为
    <!-- Path to data directory, with trailing slash. -->
    <path>/home/middle/clickhouse/data/</path>
复制代码

 

复制代码
修改日志目录
原来的:
        <level>trace</level>
        <log>/var/log/clickhouse-server/clickhouse-server.log</log>
        <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
修改为:
        <level>trace</level>
        <log>/home/middle/clickhouse/log/clickhouse-server.log</log>
        <errorlog>/home/middle/clickhouse/log/clickhouse-server.err.log</errorlog>
复制代码

 

4.配置远程登录
[root@localhost clickhouse]#vi /etc/clickhouse-server/config.xml
把下面2行注释去掉,之前是注释的,现在要开启

原来的:
    <!-- Default values - try listen localhost on IPv4 and IPv6. -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->

 

修改为:
    <!-- Default values - try listen localhost on IPv4 and IPv6. -->
    
    <listen_host>::1</listen_host>
<listen_host>0.0.0.0</listen_host>

 

5.修改允许删除掉任何表和表分区,将如下两行去掉注释,使其生效

[root@localhost clickhouse]#vi /etc/clickhouse-server/config.xml

原来的:
    <!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
    <!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->
修改为:
    <max_table_size_to_drop>0</max_table_size_to_drop> 
    <max_partition_size_to_drop>0</max_partition_size_to_drop>

 

6.拷贝配置文件到另外的实例
scp /etc/clickhouse-server/config.xml root@192.168.1.105:/etc/clickhouse-server/

 

7.启动clickhouse-server
每个节点都尝试启动
centos 7需要使用systemctl启动
systemctl status clickhouse-server.service
systemctl start clickhouse-server.service
systemctl stop clickhouse-server.service

clickhouse默认使用的是9000端口,注意避免端口冲突:
<tcp_port>9000</tcp_port>

 

8尝试登录
每个节点都尝试登录,目前是免密登录的
clickhouse-client --host localhost

 

##########################集群部署##################################
1.修改config.xml配置文件
注释掉默认分片配置(直接修改default栏目段)

先做备份
[root@master clickhouse-client]# cd /etc/clickhouse-server
[root@master clickhouse-server]# ls
config.d config.xml users.d users.xml
[root@master clickhouse-server]# cp config.xml bak20250121_config.xml

找到配置文件的<remote_servers>栏目,修改default里面的配置
注释掉原有的<shard>段落,或是直接删除掉

 


目的是我们自定义默认分片,创建表的时候直接使用on cluster default

 

2.拷贝配置文件到另外机器
scp /etc/clickhouse-server/config.xml root@192.168.1.105:/etc/clickhouse-server/

 

3.修改配置项interserver_http_host(好像不设置也可以)

复制代码
vi /etc/clickhouse-server/config.xml

192.168.1.102节点
<interserver_http_host>192.168.1.102</interserver_http_host>

192.168.1.105节点
<interserver_http_host>192.168.1.105</interserver_http_host>
复制代码

 

4.准备集群配置文件(/etc/clickhouse-server/config.d/metrika.xml)

复制代码
<yandex>
    <remote_servers>
        <default>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>192.168.1.102</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>192.168.1.105</host>
                    <port>9000</port>
                </replica>                
            </shard>
        </default>
    </remote_servers>
   
    <zookeeper>
        <node index="1">
            <host>192.168.1.105</host>
            <port>2181</port>
        </node>
    </zookeeper>
    <macros>
        <shard>01</shard> 
        <replica>192.168.1.102</replica>
    </macros>
    <networks>
        <ip>::/0</ip>
    </networks>
    <clickhouse_compression>
        <case>
            <min_part_size>10000000000</min_part_size>
            <min_part_size_ratio>0.01</min_part_size_ratio>
            <method>lz4</method>
        </case>
    </clickhouse_compression>
</yandex>
复制代码

 

说明:
A.红色部分根据分片实际情况修改
B.我这里分片名称定义为default 当然也可以自己取其他的名称
C.该文件拷贝到另外只修改对应的ip地址,<shard>01</shard>保持不变,因为只有一个分片

 

5.配置文件拷贝到另外的节点

scp /etc/clickhouse-server/config.d/metrika.xml root@192.168.1.105:/etc/clickhouse-server/config.d/

该配置文件拷贝过去后需要进行修<macros></macros>

分片1:
    <macros>
        <shard>01</shard>
        <replica>192.168.1.102</replica>
    </macros>

 

分片2:
    <macros>
        <shard>01</shard> 
        <replica>192.168.1.105</replica>
    </macros>

 

因为只有一个分片,所以 <shard></shard>段落保持不变

 

6.修改文件权限为clickhouse
chown -R clickhouse:clickhouse /etc/clickhouse-server/config.d

 

7.重启动每个节点

systemctl restart clickhouse-server.service

 

8.验证
查询集群信息
[root@master clickhouse-server]# clickhouse-client --host 192.168.1.102 --port=9000

select cluster,shard_num,shard_weight,internal_replication,replica_num,host_name,host_address,port,is_local from system.clusters;

 

创建数据库
节点1创建数据库
CREATE DATABASE db_test ON CLUSTER default;

 

这里需要加上ON CLUSTER default,这样每个分片都执行创建库,否则只在本地分片上创建而已

创建副本引擎表(ReplicatedMergeTree)并写入数据

复制代码
clickhouse-client --host 192.168.1.102 --port=9000 -m

use db_test;


CREATE TABLE tb_rep_test ON CLUSTER default
(
   id Int32,
   name String,
   timestamp DateTime DEFAULT now(),
   day date DEFAULT now()
)
engine = ReplicatedMergeTree( '/clickhouse/tables/replicated/tb_rep_test', '{replica}')
partition by day
order by id
settings index_granularity = 8192;

insert into tb_rep_test(id,name) values(1,'name1');
insert into tb_rep_test(id,name) values(2,'name2');
insert into tb_rep_test(id,name) values(3,'name3');
insert into tb_rep_test(id,name) values(4,'name4');
insert into tb_rep_test(id,name) values(5,'name5');
insert into tb_rep_test(id,name) values(6,'name6');
insert into tb_rep_test(id,name) values(7,'name7');
insert into tb_rep_test(id,name) values(8,'name8');
insert into tb_rep_test(id,name) values(9,'name9');
insert into tb_rep_test(id,name) values(10,'name10');
复制代码

 

节点1查看查看数据

 

节点2查看数据
clickhouse-client --host 192.168.1.105 --port=9000 -m

 

说明:
不同的库,如出现相同的表名称,需要确保如下的路径不能一样

engine = ReplicatedMergeTree( '/clickhouse/tables/replicated/tb_rep_test', '{replica}')

可以在表名路径前面加上库名,如下

复制代码
CREATE TABLE tb_rep_test01 ON CLUSTER default
(
    `id` Int32,
    `name` String,
    `timestamp` DateTime DEFAULT now(),
    `day` date DEFAULT now()
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/db_hxl_tb_rep_test01', '{replica}')
PARTITION BY day
ORDER BY id
SETTINGS index_granularity = 8192
复制代码

 

9.设置default账号的密码

生产加密密码,我这里明文密码是 clickhouse123 对其加密后生成的串如下:
[root@master clickhouse-server]# echo -n clickhouse123 | openssl dgst -sha256
(stdin)= 2cca9d8714615f4132390a3db9296d39ec051b3faff87be7ea5f7fe0e2de14c9

修改配置文件
vi /etc/clickhouse-server/users.xml

<users><default></default></users>
加入如下项(红色部分):
<password_sha256_hex>2cca9d8714615f4132390a3db9296d39ec051b3faff87be7ea5f7fe0e2de14c9</password_sha256_hex>

同时注释掉原有的<password> 段落,如下:

 

同时确保access_management设置为1,旧版本默认是0的

 

把该节点的users.xml文件拷贝到其他各节点

scp /etc/clickhouse-server/users.xml root@192.168.1.105:/etc/clickhouse-server/

每个节点重启动:
systemctl restart clickhouse-server.service

这个时候就需要密码登录了
clickhouse-client --host 192.168.1.102 --port=9000 --password=clickhouse123
clickhouse-client --host 192.168.1.105 --port=9000 --password=clickhouse123

 

10.重启集群
systemctl restart clickhouse-server.service

 

11.模拟节点故障

写入数据
我们这里上2个副本,我们模拟停掉一个副本
停掉192.168.1.105
systemctl stop clickhouse-server.service

另外一个节点可以正常登录
[root@master clickhouse]# clickhouse-client --host 192.168.1.102 --port=9000 --password=clickhouse123

写入数据
insert into tb_rep_test01(id,name) values(11,'name11');
insert into tb_rep_test01(id,name) values(12,'name12');
insert into tb_rep_test01(id,name) values(13,'name13');
insert into tb_rep_test01(id,name) values(14,'name14');
insert into tb_rep_test01(id,name) values(15,'name15');

启动刚才停掉的实例
[root@node1 clickhouse-server]# systemctl start clickhouse-server.service

登录查看数据
clickhouse-client --host 192.168.1.105 --port=9000 --password=clickhouse123

数据同步过来了

 

加字段

会话会一直请求对方机器

 

[root@master clickhouse]# systemctl start clickhouse-server.service
死掉的机器启动后发现新增的字段会同步过来了

 

 

posted @   slnngk  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2024-01-24 db2安装部署
2019-01-24 es安装elasticsearch-sql插件
2019-01-24 elastichd安装部署
2019-01-24 获取从库Seconds_Behind_Master监控主从同步
2019-01-24 采用xtrabackup部署主从同步
点击右上角即可分享
微信分享提示