非root用户一键安装clickhouse集群
官方中文文档:https://clickhouse.tech/docs/zh/
1. 环境要求
检查当前CPU是否支持SSE 4.2的命令,咱也不知道为什么,官方这样说的
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
官方安装包下载地址:https://github.com/ClickHouse/ClickHouse/releases
2. 安装脚本
安装用户名:clickhouse
home目录:/home/clickhouse
编辑安装脚本
vim install.sh
内容如下,可以根据实际情况修改脚本
#默认用户密码
PLAIN_PASSWORD=123123
HOUSE_VERSION=v21.5.6.6-stable
LATEST_VERSION=21.5.6.6
wget https://github.com//ClickHouse/ClickHouse/releases/download/$HOUSE_VERSION/clickhouse-common-static-$LATEST_VERSION.tgz
wget https://github.com//ClickHouse/ClickHouse/releases/download/$HOUSE_VERSION/clickhouse-server-$LATEST_VERSION.tgz
#解压
tar -zxvf clickhouse-common-static-$LATEST_VERSION.tgz
tar -zxvf clickhouse-server-$LATEST_VERSION.tgz
#修改配置文件路径
CONFIG_DIR=/home/clickhouse/clickhouse-server/conf
mkdir -p $CONFIG_DIR
mkdir -p /home/clickhouse/clickhouse-server/logs
cp /home/clickhouse/clickhouse-server-$LATEST_VERSION/etc/clickhouse-server/config.xml $CONFIG_DIR/config.xml
cp /home/clickhouse/clickhouse-server-$LATEST_VERSION/etc/clickhouse-server/users.xml $CONFIG_DIR/users.xml
#配置环境变量
echo "CLICK_HOUSE_HOME=/home/clickhouse/clickhouse-common-static-$LATEST_VERSION/usr/bin" >> ~/.bash_profile
echo 'export PATH=$PATH:$CLICK_HOUSE_HOME' >> ~/.bash_profile
source ~/.bash_profile
# 脚本修改配置文件路径
# sed -i 's/源字符串/新字符串/g'
SERVER_CONFIG_PATH=$CONFIG_DIR/config.xml
#修改日志存储
sed -i 's/\/var\/log\/clickhouse-server\/clickhouse-server.log/\/home\/clickhouse\/clickhouse-server\/logs\/clickhouse-server.log/g' $SERVER_CONFIG_PATH
sed -i 's/\/var\/log\/clickhouse-server\/clickhouse-server.err.log/\/home\/clickhouse\/clickhouse-server\/logs\/clickhouse-server.err.log/g' $SERVER_CONFIG_PATH
#修改数据存储
sed -i 's/\/var\/lib\/clickhouse\//\/home\/clickhouse\/data\//g' $SERVER_CONFIG_PATH
#修改ddl存储路径
sed -i 's/\/clickhouse\/task_queue\/ddl/\/home\/clickhouse\/task_queue\/ddl/g' $SERVER_CONFIG_PATH
echo "修改监听host 所有客户端都可以访问"
sed -r -i "/<listen_host>::<\/listen_host>/ s/.*/<listen_host>::<\/listen_host>/" $SERVER_CONFIG_PATH
# 修改默认用户脚本
echo 生成sha256 密码
PASSWORD=$(printf "%s" $(printf "%s" "$PLAIN_PASSWORD"|sha256sum| tr -d '-')| sed 's/ //g')
echo "设置hash密码 : $PASSWORD"
sed -r -i "/<password><\/password>/ s/.*/<password_sha256_hex>$PASSWORD<\/password_sha256_hex>/" $CONFIG_DIR/users.xml
echo "修改用户访问权限"
sed -r -i "/<access_management>1<\/access_management>/ s/.*/<access_management>1<\/access_management>/" $CONFIG_DIR/users.xml
echo "执行完成!"
执行安装脚本
sh install.sh
3. 配置说明
配置文件:clickhouse-server/conf/config.xml
详细配置说明请参考官方文档:https://clickhouse.tech/docs/zh/operations/server-configuration-parameters/settings/
4. 编写启停脚本
vim server.sh
配置请根据实际情况配置,内容如下:
#进程id地址
CH_PID_FILE=$HOME/clickhouse-server/clickhouse_server.pid
#启动的配置地址
CH_CONFIG_PATH=$HOME/clickhouse-server/conf/config.xml
#nohup 输出log 地址
CH_DAEMON_OUT=$HOME/clickhouse_server.log
case $1 in
start)
echo -n "Starting clickhouse sever ... "
if [ -f "$CH_PID_FILE" ]; then
if kill -0 `cat "$CH_PID_FILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$CH_PID_FILE"`.
exit 1
fi
fi
. ~/.bash_profile
clickhouse server -P=$CH_PID_FILE -C=$CH_CONFIG_PATH --daemon
sleep 2
pid=$(cat "${CH_PID_FILE}")
if ps -p "${pid}" > /dev/null 2>&1; then
echo STARTED
else
echo FAILED TO START Please check the logs
exit 1
fi
;;
stop)
echo -n "stopping clickhouse server ..."
if [ ! -f "$CH_PID_FILE" ]
then
echo "no clickhouse sever to stop (could not find file $CH_PID_FILE)"
else
kill $(cat "$CH_PID_FILE")
sleep 1
echo STOPPED
fi
exit 0
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
1. 执行启动
sh server.sh start
2. 执行停止
sh server.sh stop
3. 连接服务
clickhouse client --password=123123
5. 集群搭建
clickhouse集群=zookeeper集群+clickhouse集群配置
zookeeper集群搭建
1.环境准备
-
需要安装java运行环境,我这里安装的是1.8,略。
-
下载zookeeper包
wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
2. 安装zookeeper
-
解压tar包
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
-
进入
cd apache-zookeeper-3.6.3-bin/conf
-
复制配置文件
cp zoo_sample.cfg zoo.cfg
-
修改配置文件如下
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/data/zookeeper/ # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 ## Metrics Providers # # https://prometheus.io Metrics Exporter #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider #metricsProvider.httpPort=7000 #metricsProvider.exportJvmInfo=true server.0=192.168.2.2:2888:3888 server.1=192.168.2.3:2888:3888 server.2=192.168.2.4:2888:3888
-
在对应机器上设置myid
#假设当前机器是server.0,需要在$dataDir目录下写一个myid文件。其他机器myid的值也是与配置对应的。 echo "0" > /data/zookeeper/myid
-
配置说明
参数名 | 说明 |
---|---|
tickTime | 默认值:3000(ms),不支持系统属性方式配置。用于配置zookeeper集群中节点之间维持心跳的时间间隔,同时,它也是zookeeper中最小的时间长度单元,很多运行时的时间间隔都是使用它的倍数来表示的。 |
initLimit | Zookeeper集群中的Leader 节点接收其他Follower节点初始化连接等待的最大时间(10*tickTime),如果Leader 节点在这段时间内还未接收到Follower节点的返回信息,则连接失败。 |
syncLimit | Zookeeper集群中的Leader 节点和其他Follower节点通信的最大等待时间(5*tickTime)。 |
dataDir | 无默认值,必须配置。服务器存储快照文件目录。默认情况下,如果没有配置dataLogDir,那么事务日志也会存储在这个目录中。建议将事务日志目录独立配置。 |
clientPort | 无默认值,必须配置,不支持系统属性方式配置。当前服务器对外提供服务端口,客户通过此端口与服务器建立连接,一般设置为2181。集群中不需要统一端口,可任意配置端口。 |
server.A=B:C:D | A:节点在集群中的唯一ID,需要与dataDir/myid文件中的内容保持一致,取值范围为1~255 B:节点的服务器IP地址。 C:集群中Follower节点与Leader 节点之间通信的端口。 D:当集群中的Follower节点宕机或出现故障时,集群进行重新选举Leader时所使用的端口。 |
3.启动
-
进入zookeeper的 bin目录依次启动上面的集群
./zkServer.sh start
-
全部启动完毕后,查看节点状态
./zkServer.sh status
clickhouse集群配置
推荐一个帮助理解的数据分片、备份文章:https://tianjinsong.blog.csdn.net/article/details/83011794
1. 创建一个metrika.xml
vim /home/clickhouse/clickhouse-server/conf/metrika.xml
内容如下:
<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers>
<!-- 集群名称dev -->
<dev>
<!-- 数据分片1 -->
<shard>
<!-- 开启表自身同步建议生产开启 -->
<internal_replication>true</internal_replication>
<!-- 副本 s1r1 -->
<replica>
<host>ck31.xxxx.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
<!-- 副本 s1r2-->
<replica>
<host>ck31.xxxx.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<internal_replication>true</internal_replication>
<!-- 副本 s2r1-->
<replica>
<host>ck32.xxxx.sina.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
<!-- 副本 s2r2-->
<replica>
<host>ck31.xxxx.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
</shard>
<!-- 数据分片3 -->
<shard>
<internal_replication>true</internal_replication>
<!-- 副本 s3r1-->
<replica>
<host>ck33.xxxxa.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
<!-- 副本 s3r2-->
<replica>
<host>ck33.xxxxa.com.cn</host>
<port>9000</port>
<user>default</user>
<password>123123</password>
</replica>
</shard>
</dev>
</clickhouse_remote_servers>
<!-- 本节点分片id+ 副本id -->
<macros>
<shard>01</shard>
<replica>01</replica>
</macros>
<!-- 监听网络(貌似重复) -->
<networks>
<ip>::/0</ip>
</networks>
<!-- ZK -->
<zookeeper-servers>
<node index="1">
<host>1.xxxx.sina.com.cn</host>
<port>2181</port>
</node>
<node index="2">
<host>2.xxxx.sina.com.cn</host>
<port>2181</port>
</node>
<node index="3">
<host>3.xxxxp.sina.com.cn</host>
<port>2181</port>
</node>
</zookeeper-servers>
<!-- 数据压缩算法 -->
<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>
2.引入merika.xml
在config.xml文件中的yandex 标签内 修改对应标签如下 没有则添加。
<!-- incl 指定配置标签 对应metrika的标签配置 -->
<!-- 集群配置 -->
<remote_servers incl="clickhouse_remote_servers" />
<!-- zookeeper配置 -->
<zookeeper incl="zookeeper-servers" optional="true" />
<!-- macros配置,复制表的参数替换,如果不使用复制表,则可以省略 -->
<macros incl="macros" optional="true" />
<!-- 压缩算法配置 -->
<compression incl="clickhouse_compression" />
<!-- 引入上面的配置文件 -->
<include_from>/home/clickhouse/clickhouse-server/conf/metrika.xml</include_from>
config.xml 如果是正确修改,那么服务会自动加载,无需重启。
6. 问题整理
- 因为8123端口被其他应用占用,我修改为<http_port>8122</http_port>,启动报错:
DB::Exception: Listen [::]:8122 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: Address family for hostname not supported
解决办法:修改config.xml文件
<listen_host>0.0.0.0</listen_host>
记录一小步,成长一大步。有问题欢迎大家在评论区讨论。