antecedentes
Los servicios SaaS se enfrentarán a la seguridad de los datos, el cumplimiento y otros problemas en el futuro. El negocio de la empresa necesita acumular un conjunto de capacidades de implementación de privatización para ayudar al negocio a mejorar la competitividad de su industria. Para mejorar las capacidades del sistema de la plataforma, necesitamos acumular un conjunto de sistemas de datos para ayudar a analizar el efecto de las operaciones y mejorar las capacidades operativas. Sin embargo, en el proceso de desarrollo real, si un sistema de big data se implementa directamente, será una sobrecarga de servidor relativamente grande para los usuarios. Con este fin, elegimos una solución de compromiso para mejorar nuestras capacidades de análisis de datos.
búsqueda elástica vs casa de clics
ClickHouse es un sistema de gestión de bases de datos distribuidas en columnas de alto rendimiento. Probamos ClickHouse y descubrimos que tiene las siguientes ventajas:
ClickHouse tiene un gran rendimiento de escritura. El volumen de escritura de registros de un solo servidor oscila entre 50 MB y 200 MB/s, y la cantidad de registros escritos por segundo supera los 60 W, que es más de 5 veces mayor que la de ES. La escritura rechazada más común en ES conduce a la pérdida de datos, retrasos en la escritura y otros problemas, que no son fáciles de ocurrir en ClickHouse.
La velocidad de consulta es rápida. Se afirma oficialmente que los datos están en el caché de página, y la velocidad de consulta de un solo servidor es de aproximadamente 2-30 GB/s; sin el caché de página, la velocidad de consulta depende de la velocidad de lectura del disco y la tasa de compresión de los datos. Después de las pruebas, la velocidad de consulta de ClickHouse es entre 5 y 30 veces más rápida que la de ES.
ClickHouse cuesta menos que el servidor ES. Por un lado, la relación de compresión de datos de ClickHouse es más alta que la de ES, y el espacio en disco ocupado por los mismos datos es solo 1/3 a 1/30 del de ES, lo que ahorra espacio en disco y reduce efectivamente la E/S del disco. , que también es más eficiente para consultas de ClickHouse. Una de las razones es que, por otro lado, ClickHouse ocupa menos memoria y consume menos recursos de CPU que ES. Estimamos que el procesamiento de registros con ClickHouse puede reducir los costos del servidor a la mitad.
Funciones de soporte\Proyectos de código abierto | ElasticSearch | ClickHouse |
---|---|---|
Preguntar | Java | c++ |
tipo de almacenamiento | almacenamiento de documento | base de datos columnar |
Soporte distribuido | Se admiten tanto la fragmentación como las réplicas. | Se admiten tanto la fragmentación como las réplicas. |
Extensibilidad | alto | Bajo |
velocidad de escritura | lento | rápido |
Uso de CPU/memoria | alto | Bajo |
Ocupación de almacenamiento (importación de datos de registro 54G) | Alto 94G (174%) | Bajo 23G (42,6%) |
Velocidad de consulta de coincidencia exacta | en general | rápido |
Velocidad de consulta de coincidencia aproximada | rápido | lento |
gestión de autoridad | apoyo | apoyo |
Dificultad de consulta | Bajo | alto |
soporte de visualización | alto | Bajo |
Casos de uso | un monton de | Ctrip |
dificultad de mantenimiento | Bajo | alto |
análisis de costos
Nota: en ausencia de cualquier descuento, basado en el análisis de aliyun
costo del producto | estándar | costo | ilustrar | Coste total |
---|---|---|---|---|
grupo de cuidadores del zoológico | 2 core 4g computación compartida n4 50G SSD disco en la nube | 222/mes | 3 alta disponibilidad | 666/mes |
grupo kafka | 4 núcleos 8g estándar compartido s650G SSD disco en la nube 300G disco de datos | 590/mes | 3 alta disponibilidad | 1770/mes |
implementación de latidos de archivos | Las aplicaciones relacionadas con la ubicación conjunta generarán una cierta cantidad de sobrecarga de memoria y disco, lo que tendrá un cierto impacto en la disponibilidad de las aplicaciones. | |||
casa de clics | 16-core 32g computación compartida n450G SSD disco en la nube 1000G disco de datos | 2652/mes | 2 alta disponibilidad | 5304/mes |
Coste total | 7740/mes |
Despliegue del entorno
implementación del clúster zookeeper
yum install java-1.8.0-openjdk-devel.x86_64
/etc/profile 配置环境变量
更新系统时间
yum install ntpdate
ntpdate asia.pool.ntp.org
mkdir zookeeper
mkdir ./zookeeper/data
mkdir ./zookeeper/logs
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zvxf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/zookeeper
export ZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.1-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf
新建配置文件
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/data
dataLogDir=/usr/zookeeper/logs
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
在每台服务器上执行,给zookeeper创建myid
echo "1" > /usr/zookeeper/data/myid
echo "2" > /usr/zookeeper/data/myid
echo "3" > /usr/zookeeper/data/myid
进入ZooKeeper bin目录
cd $ZOOKEEPER_HOME/bin
sh zkServer.sh start
Implementación de clústeres de Kafka
mkdir -p /usr/kafka
chmod 777 -R /usr/kafka
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgz
tar -zvxf kafka_2.12-3.2.0.tgz -C /usr/kafka
不同的broker Id 设置不一样,比如 1,2,3
broker.id=1
listeners=PLAINTEXT://ip:9092
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dir=/usr/kafka/logs
num.partitions=5
num.recovery.threads.per.data.dir=3
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zookeeper.connection.timeout.ms=30000
group.initial.rebalance.delay.ms=0
后台常驻进程启动kafka
nohup /usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-start.sh /usr/kafka/kafka_2.12-3.2.0/config/server.properties >/usr/kafka/logs/kafka.log >&1 &
/usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-stop.sh
$KAFKA_HOME/bin/kafka-topics.sh --list --bootstrap-server ip:9092
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server ip:9092 --topic test --from-beginning
$KAFKA_HOME/bin/kafka-topics.sh --create --bootstrap-server ip:9092 --replication-factor 2 --partitions 3 --topic xxx_data
Implementación de FileBeat
sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
Create a file with a .repo extension (for example, elastic.repo) in your /etc/yum.repos.d/ directory and add the following lines:
在/etc/yum.repos.d/ 目录下创建elastic.repo
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
yum install filebeat
systemctl enable filebeat
chkconfig --add filebeat
Descripción del archivo de configuración de FileBeat, hoyo 1 (es necesario configurar keys_under_root: verdadero). Si no configura los campos de mensaje de kafka de la siguiente manera:
文件目录: /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /root/logs/xxx/inner/*.log
json:
如果不设置该索性,所有的数据都存储在message里面,这样设置以后数据会平铺。
keys_under_root: true
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
topic: 'xxx_data_clickhouse'
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
processors:
剔除filebeat 无效的字段数据
- drop_fields:
fields: ["input", "agent", "ecs", "log", "metadata", "timestamp"]
ignore_missing: false
nohup ./filebeat -e -c /etc/filebeat/filebeat.yml > /user/filebeat/filebeat.log &
输出到filebeat.log文件中,方便排查
despliegue de clickhouse
检查当前CPU是否支持SSE 4.2,如果不支持,需要通过源代码编译构建
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
返回 "SSE 4.2 supported" 表示支持,返回 "SSE 4.2 not supported" 表示不支持
创建数据保存目录,将它创建到大容量磁盘挂载的路径
mkdir -p /data/clickhouse
修改/etc/hosts文件,添加clickhouse节点
举例:
10.190.85.92 bigdata-clickhouse-01
10.190.85.93 bigdata-clickhouse-02
服务器性能参数设置:
cpu频率调节,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节,性能最好
echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
内存调节,不要禁用 overcommit
echo 0 | tee /proc/sys/vm/overcommit_memory
始终禁用透明大页(transparent huge pages)。 它会干扰内存分配器,从而导致显着的性能下降
echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled
首先,需要添加官方存储库:
yum install yum-utils
rpm --import <https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG>
yum-config-manager --add-repo <https://repo.clickhouse.tech/rpm/stable/x86_64>
查看clickhouse可安装的版本:
yum list | grep clickhouse
运行安装命令:
yum -y install clickhouse-server clickhouse-client
修改/etc/clickhouse-server/config.xml配置文件,修改日志级别为information,默认是trace
<level>information</level>
执行日志所在目录:
正常日志
/var/log/clickhouse-server/clickhouse-server.log
异常错误日志
/var/log/clickhouse-server/clickhouse-server.err.log
查看安装的clickhouse版本:
clickhouse-server --version
clickhouse-client --password
sudo clickhouse stop
sudo clickhouse tart
sudo clickhouse start
Resumir
Todo el proceso de implementación ha pasado por muchos obstáculos, especialmente la configuración de parámetros de filebeat yml. La configuración de clickhouse muestra que actualizaré otro artículo para sincronizar los fosos que pisé en el proceso. Hace mucho tiempo que no actualizo mi blog y, a menudo, veo la pregunta de qué hacer después de que el blog cumpla 35 años. Para ser honesto, yo mismo no he pensado en qué hacer en el futuro. El núcleo es el aprendizaje y la producción continuos. Continúe construyendo su propio foso, ya sean expertos técnicos, expertos en negocios, arquitectura, administración, etc. Personalmente, sugiero que si puede continuar escribiendo código, debe luchar en primera línea, y la administración está completamente ligada a la empresa. A menos que sea una gran fábrica conocida, esta es otra mirada. Si la empresa para la que trabajo carece de una gran influencia en la industria, siento que puedo luchar en primera línea y elegir un nuevo trabajo en el futuro. Más consideración es la influencia de la industria, el sentido comercial y las capacidades de la arquitectura técnica. Ahora tengo 35 años y afronto el día a día con tranquilidad.