服务器准备
3分片3副本
10.2.0.151分片 + 153的副本
10.2.0.152分片 + 151的副本
10.2.0.153分片 + 152的副本
ps:
这个比较适用于服务器既当分片又当副本的情况~
如果服务器够多,分片副本都是单独服务器就别这样费劲了~
下载clickhouse安装包
cd /usr/local/clickhouse
wget https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/stable/x86_64/clickhouse-client-22.2.2.1-2.noarch.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/stable/x86_64/clickhouse-common-static-22.2.2.1-2.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/stable/x86_64/clickhouse-server-22.2.2.1-2.noarch.rpm
# 安装
rpm -ivh clickhouse-common-static-22.2.2.1-2.x86_64.rpm clickhouse-client-22.2.2.1-2.noarch.rpm clickhouse-server-22.2.2.1-2.noarch.rpm
在所有服务器进行上述操作
修改密码
cd /etc/clickhouse-server/
vi users.xml
<password>xxxxxx</password>
下边remote_servers里的password
修改配置文件
cd /etc/clickhouse-server/
# copy一份,另一台的副本集也在这启动
cp config.xml config2.xml
# 先改config.xml
vi config.xml
# 更改监听让所有正常ip可连接
<listen_host>0.0.0.0</listen_host>
# 日志,端口文件用默认的,这里不做操作
# 更改 interserver_http_host 如果是hostname不用修改,如果是ip一点要修改,改成对应服务器ip就行
<interserver_http_host>10.2.0.151</interserver_http_host>
# 配置 remote_server port和tcp_port对应
# enic_cluster 这个自己命名就行,建库建表需要用到
<remote_servers>
<enic_cluster>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.151</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.152</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.152</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.153</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.153</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.151</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
</enic_cluster>
</remote_servers>
# 配置zookeeper
<zookeeper>
<node index="1">
<host>ip1</host>
<port>2181</port>
</node>
<node index="2">
<host>ip2</host>
<port>2181</port>
</node>
<node index="3">
<host>ip3</host>
<port>2181</port>
</node>
</zookeeper>
# 配置macros
<macros>
<shard>01</shard>
<replica>01-1</replica>
</macros>
# 再改config2.xml
vi config2.xml
# 更改监听让所有正常ip可连接
<listen_host>0.0.0.0</listen_host>
# 更改端口
<http_port>8124</http_port>
<tcp_port>9001</tcp_port>
<mysql_port>9010</mysql_port>
<postgresql_port>9011</postgresql_port>
<interserver_http_port>9012</interserver_http_port>
# 更改日志文件
<log>/var/log/clickhouse-server2/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server2/clickhouse-server.err.log</errorlog>
<path>/var/lib/clickhouse2/</path>
<tmp_path>/var/lib/clickhouse2/tmp/</tmp_path>
<user_files_path>/var/lib/clickhouse2/user_files/</user_files_path>
# 更改 interserver_http_host 如果是hostname不用修改,如果是ip一点要修改,改成对应服务器ip就行
<interserver_http_host>10.2.0.151</interserver_http_host>
# 配置 remote_server
# enic_cluster 这个自己命名就行,建库建表需要用到
<remote_servers>
<enic_cluster>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.151</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.152</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.152</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.153</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>10.2.0.153</host>
<port>9000</port>
<user>default</user>
<password>default</password>
</replica>
<replica>
<host>10.2.0.151</host>
<port>9001</port>
<user>default</user>
<password>default</password>
</replica>
</shard>
</enic_cluster>
</remote_servers>
# 配置zookeeper
<zookeeper>
<node index="1">
<host>ip1</host>
<port>2181</port>
</node>
<node index="2">
<host>ip2</host>
<port>2181</port>
</node>
<node index="3">
<host>ip3</host>
<port>2181</port>
</node>
</zookeeper>
# 配置macros
<macros>
<shard>03</shard>
<replica>03-2</replica>
</macros>
注意点
1.创建文件夹,副本集要用到,如果服务器多,那就不需要了。。
mkdir /var/lib/clickhouse2
mkdir /var/log/clickhouse-server2
chown -R clickhouse:clickhouse /var/lib/clickhouse2
chown -R clickhouse:clickhouse /var/log/clickhouse-server2
2.更改interserver_http_host,用ip需要改
3.更改macros
4.更改端口,日志路径
启动clickhouse服务
# 启动
sudo -u clickhouse clickhouse-server --config-file=/etc/clickhouse-server/config.xml &
sudo -u clickhouse clickhouse-server --config-file=/etc/clickhouse-server/config2.xml &
# 停止
用ps -ef|grep clickhouse
kill -9
用dbeaver连接测试
SELECT * FROM system.clusters WHERE cluster = 'enic_cluster'
测试
# 创建工作空间
CREATE DATABASE test_database ON CLUSTER enic_cluster;
# 创建副本表
create table test_database.test_table on cluster enic_cluster(
`id` Int64 COMMENT '主键',
...
`dt` String COMMENT '日期'
)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test','{replica}')
PARTITION BY dt
ORDER BY id
SETTINGS index_granularity = 8192;
# 创建分布式表
CREATE TABLE test_database.test_table_all ON CLUSTER enic_cluster engine = Distributed(enic_cluster, test_database, test_table ,rand());
查询,新增直接在分布式表操作就可以了~