Una colección de scripts de gestión de clústeres para servicios de componentes de uso común en el desarrollo de big data.

Scripts relacionados con el entorno de big data

descripción del modo de ejecución bash

El modo de ejecución de bash se puede dividir en login shell(nombre de usuario, inicio de sesión con contraseña) e non-login shell(inicio de sesión SSH).

Estado de carga de ambos métodos de inicio de sesión:

1. El shell de inicio de sesión se cargará cuando se inicie:/etc/profile,~/.bash_profile,~/.bashrc

2. El shell sin inicio de sesión se cargará cuando se inicie:~/.bashrc

Nota: ~/.bashrcDe hecho, se cargará /etc/bashrcy /etc/bashrccargará nuevamente./etc/profile.d/*.sh

Nota de inicio de sesión SSH:

Al realizar SSH a otros nodos, se utiliza el modo . El archivo de configuración non-login shellno se carga de forma predeterminada , lo que provocará que la información de la variable de entorno se desconfigure y no se encuentren algunos comandos./etc/profile

Crear directorio de script de shell

Cree /root/shellun directorio para almacenar scripts de shell

Configure el directorio del script de Shell en /etc/bashrcel archivo y utilícelo como una variable de entorno para que el script de Shell recién creado se pueda usar en cualquier lugar.

# My Shell
export PATH=$PATH:/root/shell

Configurar hosts

Configure el archivo de hosts de cada nodo y establezca la asignación entre la IP y el nombre del nodo.

vim /etc/hosts

172.29.234.1 node01
172.29.234.2 node02
172.29.234.3 node03
172.29.234.4 node04
172.29.234.5 node05

Script de configuración automática SSH

Ejecute el script para configurar automáticamente el inicio de sesión sin contraseña para cada nodo.

vim ssh_config.sh

#! /bin/bash
function sshPasswordLogin() {
    
    
    # 检测expect服务是否存在,不存在则使用yum安装expect
    expectIsExists=$(rpm -qa | grep expect)
    if [ -z "$expectIsExists" ]; then
        yum -y install expect
    fi
    
    # 密钥对不存在则创建密钥
    if [ ! -f /root/.ssh/id_rsa.pub ]; then
        ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
    fi
    
    # 服务器列表
    # servers=("IP地址1 用户名1 密码1" "IP地址2 用户名2 密码2" "IP地址3 用户名3 密码3")
    servers=("node01 root 123456" "node02 root 123456" "node03 root 123456" "node04 root 123456" "node05 root 123456")
    
    for server in "${servers[@]}"; do
        hostname=$(echo "$server" | cut -d " " -f1)
        username=$(echo "$server" | cut -d " " -f2)
        password=$(echo "$server" | cut -d " " -f3)
        
        echo "Configuring password login on $hostname..."
        
        expect <<EOF
            spawn ssh-copy-id "$username@$hostname"
            expect {
                "yes/no" {
                    send "yes\n"
                    exp_continue
                }
                "password" {
                    send "$password\n"
                    exp_continue
                }
                eof
            }
EOF
    done
}
sshPasswordLogin

Cambiar permisos de ejecución

chmod +x ssh_config.sh

Ejecute el script ssh_config.sh en cada nodo y luego configure automáticamente las contraseñas SSH para iniciar sesión entre sí.

[root@node01 ~]# ./ssh_config.sh
[root@node02 ~]# ./ssh_config.sh
[root@node03 ~]# ./ssh_config.sh
[root@node04 ~]# ./ssh_config.sh
[root@node05 ~]# ./ssh_config.sh

Herramienta de sincronización y copia de archivos rsync

rsync es una potente herramienta de replicación y sincronización de archivos que puede realizar transferencias y copias de seguridad de archivos entre servidores locales o remotos.

Instalar ejecutando el siguiente comando

# CentOS/RHEL
yum install rsync

# Ubuntu/Debian 
apt-get install rsync

Uso básico

1. Copia de archivo local:

Copie los archivos en el directorio de origen al directorio de destino

rsync /path/to/source/file /path/to/destination/

2. Copie el directorio local:

Utilice el parámetro -a para copiar recursivamente el directorio y el parámetro -v para mostrar el proceso de copia detallado.

rsync -av /path/to/source/directory/ /path/to/destination/directory/

3. Sincronización de archivos locales:

Utilice el parámetro --delete para mantener sincronizados los directorios de origen y de destino y eliminar archivos en el directorio de destino que no existen en el directorio de origen.

rsync -av --delete /path/to/source/directory/ /path/to/destination/directory/

4. Copia remota de archivos:

Copie archivos locales al servidor remoto a través de una conexión SSH. El parámetro -z indica el uso de compresión para acelerar las transferencias.

rsync -avz -e "ssh" /path/to/local/file user@remote:/path/to/destination/

5. Copia del directorio remoto:

rsync -avz -e "ssh" /path/to/local/directory/ user@remote:/path/to/destination/directory/

Pasos de sincronización de archivos

Transfiera el archivo especificado a cada nodo host especificado. Antes de transferir, verifique si el archivo existe, luego cree el directorio correspondiente y use rsync para transferir.

Este script realizará un bucle y copiará archivos en el directorio especificado en el nodo actual a la misma ruta en otros nodos.

vim sync.sh

#! /bin/bash
# 检查是否提供了足够的命令行参数
if [ $# -lt 1 ]; then
	echo Not Enough Arguement!
	exit
fi


# 遍历集群所有机器
for host in node01 node02 node03 node04 node05; do
	echo ==================== $host ====================
	# 遍历所有目录,挨个发送
	for file in $@; do
		# 检查文件是否存在
		if [ -e $file ]; then
			#  获取父目录
			pdir=$(
				cd -P $(dirname $file)
				pwd
			)
			# 获取当前文件的名称
			fname=$(basename $file)
			# 在远程主机执行创建目录的命令
			ssh $host "mkdir -p $pdir"
			# 将文件传输到远程主机的相应目录
			rsync -av $pdir/$fname $host:$pdir
		else
			echo $file does not exists!
		fi
	done
done

Cambiar permisos de ejecución

chmod +x sync.sh

Utilice scripts de sincronización de archivos para distribuir y sincronizar la información de configuración de los hosts.

[root@node01 ~]# sync.sh /etc/hosts

Script de ejecución de comandos

Recorra una lista de nombres de servidores y ejecute el comando especificado en cada servidor

#! /bin/bash
for i in node01 node02 node03 node04 node05
do
	echo --------- $i ----------
	ssh $i "$*"
done

Cambiar permisos de ejecución

chmod  +x call.sh

Ejemplo de uso

call.sh jps

Utilice el comando para ejecutar el script y ejecutar el comando especificado en cada nodo

[root@node01 ~]# call.sh jps

Simplificación del bucle de nodos

Definir un archivo de hosts

node01
node02
node03
node04
node05

Tome el script de ejecución de comando simplificado como ejemplo:

#!/bin/bash
for host in `cat /root/hosts` ;
do
	# tput命令,用于设置终端输出的文本颜色为绿色
    tput setaf 2
         echo ======== $host ========
    # 将终端输出的文本颜色重置为默认颜色     
    tput setaf 7
        ssh $host "$@"
done

Scripts relacionados con componentes de big data

Secuencia de comandos del clúster Hadoop

vim hadoop.sh

#!/bin/bash
# Hadoop安装目录
HADOOP_HOME="/usr/local/program/hadoop"
# namenode分配节点
NAMENODE="node01"
COMMAND=""

if [ $# -lt 1 ]; then
    echo "请输入命令参数 start 或 stop"
    exit
fi

case $1 in
    "start")
        echo "=================== 启动 Hadoop 集群 ==================="
        echo "--------------- 启动 HDFS ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/start-dfs.sh"
        echo "--------------- 启动 YARN ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/start-yarn.sh"
        ;;
    "stop")
        echo "=================== 关闭 Hadoop 集群 ==================="
        echo "--------------- 关闭 YARN ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/stop-yarn.sh"
        echo "--------------- 关闭 HDFS ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/stop-dfs.sh"
        ;;
    *)
        echo "无效参数: $1"
        echo "请输入: start 或 stop"
        exit 1
        ;;
esac

Iniciar y detener Hadoop

hadoop.sh start

hadoop.sh stop

Script del clúster Zookeeper

vim zk.sh

#!/bin/bash
case $1 in
"start")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 启动----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh start"
	done
	;;
"stop")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 停止----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh stop"
	done
	;;
"status")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 状态----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh status"
	done
	;;
*)
	echo "无效的命令"
	;;
esac

Modificar los permisos de ejecución de scripts

chmod +x zk.sh

Iniciar y detener Zookeeper

zk.sh start

zk.sh stop

Script de clúster Kafaka

vim kafaka.sh

#!/bin/bash

if [ $# -eq 0 ]; then
  echo "请输入命令参数 start 或 stop"
  exit 1
fi

KAFKA_HOME="/usr/local/program/kafka"

case $1 in
"start")
  for node in "node01" "node02" "node03"; do
    echo "----------------------kafka $node 启动----------------------"
    ssh $node "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties"
    # 通过$?获取上一个命令的执行状态。如果执行状态不为 0,则表示启动或停止失败
    if [ $? -ne 0 ]; then
      echo "启动 $node 失败"
    fi
  done
  ;;
"stop")
  for node in "node01" "node02" "node03"; do
    echo "----------------------kafka $node 停止----------------------"
    ssh $node "$KAFKA_HOME/bin/kafka-server-stop.sh"
    if [ $? -ne 0 ]; then
      echo "停止 $node 失败"
    fi
  done
  ;;
*)
  echo "无效参数: $1"
  echo "请输入: start 或 stop"
  exit 1
  ;;
esac

Modificar los permisos de ejecución de scripts

chmod +x kafaka.sh

Iniciar y detener Kafaka

kafaka.sh start

kafaka.sh stop

Guión de grupo de canales

Crear vim flume.shscripts de inicio y detención del clúster

#!/bin/bash
# flume执行节点
REMOTE_HOST="node01"
# flume-ng位置
FLUME_EXECUTABLE="/usr/local/program/flume/bin/flume-ng"
# flume配置目录
FLUME_CONF_DIR="/usr/local/program/flume/conf/"
# flume配置文件
FLUME_CONF_FILE="/usr/local/program/flume/job/file_to_kafka.conf"
# 执行进程名称
PROCESS_NAME="file_to_kafka"

case $1 in
"start")
    echo " ---------------启动flume采集--------------"
    ssh "$REMOTE_HOST" "nohup $FLUME_EXECUTABLE agent -n a1 -c \"$FLUME_CONF_DIR\" -f \"$FLUME_CONF_FILE\" >/dev/null 2>&1 &"
    ;;

"stop")
    echo " ---------------停止flume采集--------------"
    ssh "$REMOTE_HOST" "ps -ef | grep $PROCESS_NAME | grep -v grep |awk  '{print \$2}' | xargs -n1 kill -9 "
    ;;

*)
    echo "无效参数: $1"
    echo "请输入: start 或 stop"
    exit 1
    ;;
esac

Modificar los permisos de ejecución de scripts

chmod +x flume.sh

Iniciar y detener Flume

flume.sh start

flume.sh stop

Supongo que te gusta

Origin blog.csdn.net/qq_38628046/article/details/131712832
Recomendado
Clasificación