Ansible批量安装clickhouse集群(shell脚本方式),八.安装clickh


准备工作

下载安装包:
java:
jdk-8u333-linux-aarch64.tar.gz
下载链接:
https://www.oracle.com/java/technologies/downloads/#java8
zookeeper:
zookeeper-3.4.13.tar.gz
下载链接:
https://zookeeper.apache.org/releases.html#download
http://archive.apache.org/dist/zookeeper/
clickhouse:
clickhouse-common-static-22.7.3.5-arm64.tgz
clickhouse-common-static-dbg-22.7.3.5-arm64.tgz
clickhouse-server-22.7.3.5-arm64.tgz
clickhouse-client-22.7.3.5-arm64.tgz
下载链接:
https://packages.clickhouse.com/tgz/stable/

ansible配置文件:
hosts_40_1:

[hosts_40]
***.***.***.*** shard_id=1 myid=1
***.***.***.*** shard_id=2 myid=2
***.***.***.*** shard_id=3 myid=3
***.***.***.*** shard_id=4 myid=4
***.***.***.*** shard_id=5 myid=5
***.***.***.*** shard_id=6 myid=6
***.***.***.*** shard_id=7 myid=7
***.***.***.*** shard_id=8 myid=8
***.***.***.*** shard_id=9 myid=9
***.***.***.*** shard_id=10 myid=10
[hosts_40:vars]
ansible_ssh_user=xxx
ansible_ssh_pass='***'
ansible_sudo_pass='***'

一.磁盘挂载

1.创建/data目录

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls /data"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls /data"

2.格式化磁盘

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkfs.xfs -f /dev/sdb"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkfs.xfs -f /dev/sdb"

3.记录

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "cat  << EOF >> /etc/fstab
/dev/sdb     /data   xfs     defaults        0 0
EOF"

ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "cat  << EOF >> /etc/fstab
/dev/sdb     /data   xfs     defaults        0 0
EOF"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "cat /etc/fstab"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "cat /etc/fstab"

4.挂载

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mount -a"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mount -a"

5.查看磁盘挂载是否成功

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "df -h"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "df -h"

二.防火墙

1.查看防火墙

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "systemctl status firewalld.service"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "systemctl status firewalld.service"

2.如果没关防火墙需要关闭防火墙

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "systemctl stop firewalld.service"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "systemctl stop firewalld.service"

三.添加hosts

1.查看ip

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "hostname -i | cut -d ' ' -f3"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "hostname -i | cut -d ' ' -f3"

2.查询hosts

get_hosts.sh脚本:

#!/bin/bash

host=`hostname`
ip=`hostname -i | cut -d ' ' -f3`
echo $ip $host
ansible -i /etc/ansible/hosts_40_1 hosts_40 -m script -a '/home/deployer/get_hosts.sh'
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m script -a '/home/deployer/get_hosts.sh'

3.整理好hosts后将hosts分发

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/home/deployer/hosts.txt dest=/home/deployer/ owner=deployer group=deployer mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/home/deployer/hosts.txt dest=/home/deployer/ owner=deployer group=deployer mode=0777"

4.检查是否分发成功

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /home/deployer"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /home/deployer"

5.将分发后的hosts添加到每台机器

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "cat /home/deployer/hosts.txt >> /etc/hosts"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "cat /home/deployer/hosts.txt >> /etc/hosts"

6.检查是否添加成功

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "cat /etc/hosts"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "cat /etc/hosts"

四.创建目录

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/clickhouse"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/clickhouse"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/clickhouse/data"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/clickhouse/data"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/clickhouse/data/tmp"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/clickhouse/data/tmp"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chmod -R 777 /data/clickhouse"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chmod -R 777 /data/clickhouse"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chown -R deployer:deployer /data/clickhouse"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chown -R deployer:deployer /data/clickhouse"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/zookeeper"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/zookeeper"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/zookeeper/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/zookeeper/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/zookeeper/data"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/zookeeper/data"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/zookeeper/log"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/zookeeper/log"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chmod -R 777 /data/zookeeper"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chmod -R 777 /data/zookeeper"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chown -R deployer:deployer /data/zookeeper"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chown -R deployer:deployer /data/zookeeper"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/java"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/java"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mkdir /data/java/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mkdir /data/java/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/java/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/java/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chmod -R 777 /data/java"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chmod -R 777 /data/java"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "chown -R deployer:deployer /data/java"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "chown -R deployer:deployer /data/java"

五.传文件

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/data/zookeeper/package/ dest=/data/zookeeper/package/ owner=deployer group=deployer mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/data/zookeeper/package/ dest=/data/zookeeper/package/ owner=deployer group=deployer mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/zookeeper/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/zookeeper/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/data/clickhouse/package/ dest=/data/clickhouse/package/ owner=deployer group=deployer mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/data/clickhouse/package/ dest=/data/clickhouse/package/ owner=deployer group=deployer mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/data/java/package/jdk-8u333-linux-aarch64.tar.gz dest=/data/java/package/jdk-8u333-linux-aarch64.tar.gz owner=deployer group=deployer mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/data/java/package/jdk-8u333-linux-aarch64.tar.gz dest=/data/java/package/jdk-8u333-linux-aarch64.tar.gz owner=deployer group=deployer mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/java/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/java/package"

六.安装java

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "tar -zxvf /data/java/package/jdk-8u333-linux-aarch64.tar.gz -C /data/java/package/"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "tar -zxvf /data/java/package/jdk-8u333-linux-aarch64.tar.gz -C /data/java/package/"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "mv /data/java/package/jdk1.8.0_333 /data/java/package/jdk1.8.0_141"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "mv /data/java/package/jdk1.8.0_333 /data/java/package/jdk1.8.0_141"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/java/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/java/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "echo 'export JAVA_HOME=/data/java/package/jdk1.8.0_141' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "echo 'export JAVA_HOME=/data/java/package/jdk1.8.0_141' >> /etc/profile"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "echo 'export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "echo 'export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar' >> /etc/profile"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$JAVA_HOME/bin' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$JAVA_HOME/bin' >> /etc/profile"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "more /etc/profile"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "more /etc/profile"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "source /etc/profile"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "source /etc/profile"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "java -version"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "java -version"

七.安装zookeeper

1.解压zookeeper

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "tar -zxvf /data/zookeeper/package/zookeeper-3.4.13.tar.gz -C /data/zookeeper/package"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "tar -zxvf /data/zookeeper/package/zookeeper-3.4.13.tar.gz -C /data/zookeeper/package"

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "ls -al /data/zookeeper/package/zookeeper-3.4.13"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "ls -al /data/zookeeper/package/zookeeper-3.4.13"

2.创建myid myid值在hosts文件中预先设置好

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "touch /data/zookeeper/data/myid"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "touch /data/zookeeper/data/myid"

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "echo -e '{{myid}}' >> /data/zookeeper/data/myid"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "echo -e '{{myid}}' >> /data/zookeeper/data/myid"

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "cat /data/zookeeper/data/myid"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "cat /data/zookeeper/data/myid"

3.修改配置文件

3.1查看2181端口是否占用

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "netstat -tunlp|grep 2181"
ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "netstat -tunlp|grep 2181"

将/data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg配置文件进行两处修改
3.2将dataDir位置修改为
/data/zookeeper/data
3.3在配置文件zoo.cfg最后添加集群信息

###############cluster###############
server.1=***.***.***.***:2888:3888
server.2=***.***.***.***:2888:3888
server.3=***.***.***.***:2888:3888
server.4=***.***.***.***:2888:3888
server.5=***.***.***.***:2888:3888
server.6=***.***.***.***:2888:3888
server.7=***.***.***.***:2888:3888
server.8=***.***.***.***:2888:3888
server.9=***.***.***.***:2888:3888

3.4将zoo.cfg配置文件分发到集群中其他机器

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m copy -a "src=/data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg dest=/data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg owner=deployer group=deployer mode=0777"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m copy -a "src=/data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg dest=/data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg owner=deployer group=deployer mode=0777"

3.5查看通过是否成功

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "tail -n 100 /data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "tail -n 100 /data/zookeeper/package/zookeeper-3.4.13/conf/zoo.cfg"

4.添加环境变量并刷新配置

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "echo 'export ZOOKEEPER=/data/zookeeper/package/zookeeper-3.4.13' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "echo 'export ZOOKEEPER=/data/zookeeper/package/zookeeper-3.4.13' >> /etc/profile"

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$ZOOKEEPER/bin' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$ZOOKEEPER/bin' >> /etc/profile"
ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$ZOOKEEPER/bin' >> /home/deployer/.bash_profile"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "echo -e 'export PATH=\$PATH:\$ZOOKEEPER/bin' >> /home/deployer/.bash_profile"

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "source /etc/profile"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "source /etc/profile"

5.启动zookeeper集群
启动

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "source /etc/profile && zkServer.sh start"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "source /etc/profile && zkServer.sh start"

停止

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "source /etc/profile && zkServer.sh stop"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "source /etc/profile && zkServer.sh stop"

查看节点状态

ansible -i /etc/ansible/hosts_40_zk1 hosts_40 -m shell -a "source /etc/profile && zkServer.sh status"
ansible -i /etc/ansible/hosts_40_zk2 hosts_40 -m shell -a "source /etc/profile && zkServer.sh status"

注意:
zookeeper相关的目录及目录下的文件都必须属于deployer,不然会出现运行失败的情况。

八.安装clickhouse

1.安装clickhouse-common-static

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-common-static-22.7.3.5-arm64.tgz -C /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-common-static-22.7.3.5-arm64.tgz -C /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-common-static-22.7.3.5/install"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-common-static-22.7.3.5/install"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-common-static-22.7.3.5/install/doinst.sh"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-common-static-22.7.3.5/install/doinst.sh"

2.安装clickhouse-common-static-dbg

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5-arm64.tgz -C /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5-arm64.tgz -C /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5/install"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5/install"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5/install/doinst.sh"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-common-static-dbg-22.7.3.5/install/doinst.sh"

3.安装clickhouse-server

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-server-22.7.3.5-arm64.tgz -C /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-server-22.7.3.5-arm64.tgz -C /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-server-22.7.3.5/install"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-server-22.7.3.5/install"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-server-22.7.3.5/install/doinst.sh"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-server-22.7.3.5/install/doinst.sh"

4.安装clickhouse-client

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-client-22.7.3.5-arm64.tgz -C /data/clickhouse/package"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "tar -zxvf /data/clickhouse/package/clickhouse-client-22.7.3.5-arm64.tgz -C /data/clickhouse/package"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-client-22.7.3.5/install"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ls -al /data/clickhouse/package/clickhouse-client-22.7.3.5/install"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-client-22.7.3.5/install/doinst.sh"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "sh /data/clickhouse/package/clickhouse-client-22.7.3.5/install/doinst.sh"

5.修改配置文件

5.1修改/etc/clickhouse-server/config.xml

<listen_host>0.0.0.0</listen_host>                     <!-- 开放监听 -->
<path>/data/clickhouse/data/</path>                    <!-- 数据目录 -->
<tmp_path>/data/clickhouse/data/tmp/</tmp_path>        <!-- 临时数据目录 -->

添加	
<remote_servers incl="clickhouse_remote_servers" />
<zookeeper incl="zookeeper-servers" optional="true" />
<macros incl="macros" optional="true" />
<compression incl="clickhouse_compression" optional="true" />

注释
<!-- <remote_servers>  -->
<!-- </remote_servers>  -->

5.2查看端口是否占用-8123、9000、9004、9005、9009

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "netstat -tunlp|grep 8123"
ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "netstat -tunlp|grep 8123"

5.3修改/etc/clickhouse-server/config.d/data-paths.xml文件

<path>/data/clickhouse/data</path>
<tmp_path>/data/clickhouse/data/tmp</tmp_path>

5.4添加/etc/metrika.xml

        其中/etc/metrika.xml中的<macros>因为每台机器不一样,因此配置如下模板,其它配置信息每台机器都一样:

    <macros>
        <shard>shard_id</shard>
        <replica>macros_ip</replica>
    </macros>

5.5修改/etc/clickhouse-server/users.xml中default用户的密码:

echo -n password | openssl dgst -sha256
生成加密的password
(stdin)= newpassword
修改/etc/clickhouse-server/users.xml
<!-- <password></password> -->
<password_sha256_hex>newpassword</password_sha256_hex>

5.6修改配置文件后统一分发:

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/etc/clickhouse-server/users.xml dest=/etc/clickhouse-server/users.xml owner=clickhouse group=clickhouse mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/etc/clickhouse-server/users.xml dest=/etc/clickhouse-server/users.xml owner=clickhouse group=clickhouse mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/etc/clickhouse-server/config.d/data-paths.xml dest=/etc/clickhouse-server/config.d/data-paths.xml owner=clickhouse group=clickhouse mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/etc/clickhouse-server/config.d/data-paths.xml dest=/etc/clickhouse-server/config.d/data-paths.xml owner=clickhouse group=clickhouse mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/etc/clickhouse-server/config.xml dest=/etc/clickhouse-server/config.xml owner=clickhouse group=clickhouse mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/etc/clickhouse-server/config.xml dest=/etc/clickhouse-server/config.xml owner=clickhouse group=clickhouse mode=0777"

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m copy -a "src=/etc/metrika.xml dest=/etc/metrika.xml owner=clickhouse group=clickhouse mode=0777"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m copy -a "src=/etc/metrika.xml dest=/etc/metrika.xml owner=clickhouse group=clickhouse mode=0777"

5.7查看ip

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "hostname -i | cut -d ' ' -f3"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "hostname -i | cut -d ' ' -f3"

5.8替换/etc/metrika.xml中<macros>的shard_id

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "sed -i 's/shard_id/{{shard_id}}/g' /etc/metrika.xml"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "sed -i 's/shard_id/{{shard_id}}/g' /etc/metrika.xml"

5.9替换/etc/metrika.xml中<macros>的macros_ip
update_file.sh脚本:

#!/bin/bash

ip=`hostname -i | cut -d ' ' -f3`
sed -i 's/macros_ip/'$ip'/g' /etc/metrika.xml
ansible -i /etc/ansible/hosts_40_1 hosts_40 -m script -a '/data/clickhouse/update_file.sh'
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m script -a '/data/clickhouse/update_file.sh'

6.启动服务

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "clickhouse start"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "clickhouse start"

7.查看进程

ansible -i /etc/ansible/hosts_40_1 hosts_40 -m shell -a "ps -ef | grep clickhouse"
ansible -i /etc/ansible/hosts_40_2 hosts_40 -m shell -a "ps -ef | grep clickhouse"

8.效果

页面查询
http://***.***.***.***:8123/play

通过系统表查询remote_servers的配置是否生效

SELECT * FROM system.clusters;

查看path是否配置正确

SELECT 
    name, 
    path, 
    formatReadableSize(free_space) AS free, 
    formatReadableSize(total_space) AS total, 
    formatReadableSize(keep_free_space) AS reserved
FROM system.disks;

测试单表:

CREATE TABLE default.test (
  id Int16,
  name String
) ENGINE = MergeTree()
ORDER BY id;

测试分布式表:

#先创建本地表
CREATE TABLE default.test_local on cluster perftest_20shards_2replicas (
  id Int16,
  name String
) ENGINE = MergeTree()
ORDER BY id;
#创建分布式表
CREATE TABLE IF NOT EXISTS default.test_distribute ON CLUSTER perftest_20shards_2replicas AS default.test_local 
ENGINE = Distributed(perftest_20shards_2replicas, default, test_local, rand());

欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

 

相关内容