分类 Linux 下的文章

airflow可以通过DAG配置文件,定义一组有依赖的任务,按照依赖依次执行。

基于python的工作流管理平台,自带webUI,命令行和调度。

使用python编写子任务,有各种operater可以直接开箱即用,这里看支持的operators

系统依赖

安装更新一些依赖

sudo apt update && sudo apt upgrade

sudo apt install build-essential unzip bzip2 zlib1g-dev pkg-config libncurses5-dev libffi-dev libreadline-dev libbz2-dev libsqlite3-dev libssl-dev liblzma-dev libmysqlclient-dev libkrb5-dev unixodbc

安装pyenv

curl https://pyenv.run | bash

pyenv install 3.12.3

pyenv versions

pyenv global 3.12.3

python -V

pyenv virtualenv 3.12.3 airflow

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python get-pip.py

运行时依赖

requirements.txt

apache-airflow==2.9.0
airflow-clickhouse-plugin==1.4.0
apache-airflow-providers-apache-flink==1.5.1
apache-airflow-providers-apache-hdfs==4.6.0
apache-airflow-providers-apache-hive==8.2.1
apache-airflow-providers-apache-kafka==1.6.1
apache-airflow-providers-apache-spark==4.11.3
apache-airflow-providers-elasticsearch==5.5.3
apache-airflow-providers-grpc==3.6.0
apache-airflow-providers-redis==3.8.0
apache-airflow-providers-postgres==5.14.0
apache-airflow-providers-influxdb==2.7.1
apache-airflow-providers-jdbc==4.5.3
apache-airflow-providers-microsoft-azure==11.1.0
apache-airflow-providers-mysql==5.7.4
apache-airflow-providers-mongo==4.2.2
apache-airflow-providers-neo4j==3.7.0
apache-airflow-providers-odbc==4.8.1
apache-airflow-providers-trino==5.9.0
apache-airflow-providers-ssh==3.14.0
apache-airflow-providers-amazon==9.1.0
apache-airflow-providers-cncf-kubernetes==10.0.1
apache-airflow-providers-http==4.13.3

安装依赖

pip install -r requirements.txt
# 指标
pip install apache-airflow[statsd]
pip install apache-airflow[celery]

运行

export AIRFLOW_HOME=~/airflow

# 第一次需要初始化数据库
airflow db init

# -D 后台运行
airflow webserver --port 9988

# 创建管理员用户
airflow users create -e admin@abc.com -f my -l admin -r Admin -u admin -p Pa55w0rd

# 创建后的管理员账户密码
# admin
# Pa55w0rd

# -D 后台运行
airflow scheduler -D

# -D 后台运行
airflow triggerer -D

# 需要在 airflow.cfg 配置文件中,把 standalone_dag_processor 项设置为 True
airflow dag-processor -D

# -D 后台运行
airflow celery flower -D

# -D 后台运行
airflow celery worker -D

高可用

将上面所有操作在新机器执行一遍,最后运行的命令只需要执行如下命令

# -D 后台运行
airflow celery worker -D
由于跨机器的任务调度执行,需要将 dag 文件完全同步到所有worker中

维护

# 启动服务
/home/ubuntu/airflow/run.sh start

# 停止服务
/home/ubuntu/airflow/run.sh stop

启停脚本 run.sh

#!/bin/bash

set -eux

source /home/ubuntu/.pyenv/versions/airflow/bin/activate

case $1 in
"start") {
    echo " --------启动 airflow-------"
    airflow webserver --port 9988 -D
    airflow scheduler -D
    airflow triggerer -D
    airflow dag-processor -D
    airflow celery worker -D
    airflow celery flower -D
};;
"stop") {
    echo " --------关闭 airflow-------"
    airflow celery stop

    celery_flower_pid=$(ps -ef | egrep 'airflow celery flower' | grep -v grep | awk '{print $2}')
    if [[ $celery_flower_pid != "" ]]; then
        ps -ef | egrep 'airflow celery flower' | grep -v grep | awk '{print $2}' | xargs kill -15
        airflow_flower_pid_file="/home/ubuntu/airflow/airflow-flower.pid"
        if [ -f $airflow_flower_pid_file ]; then
            rm $airflow_flower_pid_file
        fi
    fi

    airflow_scheduler_pid=$(ps -ef | egrep 'airflow scheduler' | grep -v grep | awk '{print $2}')
    if [[ $airflow_scheduler_pid != "" ]]; then
        ps -ef | egrep 'airflow scheduler' | grep -v grep | awk '{print $2}' | xargs kill -15
        airflow_scheduler_pid_file="/home/ubuntu/airflow/airflow-scheduler.pid"
        if [ -f $airflow_scheduler_pid_file ]; then
            rm $airflow_scheduler_pid_file
        fi
    fi

    airflow_triggerer_pid=$(ps -ef | egrep 'airflow triggerer' | grep -v grep | awk '{print $2}')
    if [[ $airflow_triggerer_pid != "" ]]; then
        ps -ef | egrep 'airflow triggerer' | grep -v grep | awk '{print $2}' | xargs kill -15
        airflow_triggerer_pid_file="/home/ubuntu/airflow/airflow-triggerer.pid"
        if [ -f $airflow_triggerer_pid_file ]; then
            rm $airflow_triggerer_pid_file
        fi
    fi

    airflow_master_pid=$(ps -ef | egrep 'gunicorn: master' | grep -v grep | awk '{print $2}')
    if [[ $airflow_master_pid != "" ]]; then
        ps -ef | egrep 'gunicorn: master' | grep -v grep | awk '{print $2}' | xargs kill -15
        airflow_webserver_pid_file="/home/ubuntu/airflow/airflow-webserver.pid"
        if [ -f $airflow_webserver_pid_file ]; then
            rm $airflow_webserver_pid_file
        fi
        airflow_webserver_monitor_pid_file="/home/ubuntu/airflow/airflow-webserver-monitor.pid"
        if [ -f $airflow_webserver_monitor_pid_file ]; then
            rm $airflow_webserver_monitor_pid_file
        fi
        airflow_master_pid_file="/home/ubuntu/airflow/airflow-master.pid"
        if [ -f $airflow_master_pid_file ]; then
            rm $airflow_master_pid_file
        fi
        airflow_worker_pid_file="/home/ubuntu/airflow/airflow-worker.pid"
        if [ -f $airflow_worker_pid_file ]; then
            rm $airflow_worker_pid_file
        fi
    fi

    # ps -ef | egrep 'airflow scheduler' | grep -v grep | awk '{print $2}' | xargs kill -15
};;
esac

健康检查脚本 health.sh

需要先安装 antonmedv/fx 用于处理json,也可自行替换
#!/bin/bash

print() {
  echo -e "$(date) $1"
}
print "开始检查airflow健康状态"

source ~/.pyenv/versions/airflow/bin/activate

echo -e
health_resp=$(curl -sL http://127.0.0.1:9988/health)
echo $health_resp | /usr/local/bin/fx .
echo -e

print "输出各服务状态"
dag_processor_status=$(echo $health_resp | /usr/local/bin/fx .dag_processor.status)
metadatabase_status=$(echo $health_resp | /usr/local/bin/fx .metadatabase.status)
scheduler_status=$(echo $health_resp | /usr/local/bin/fx .scheduler.status)
trigger_status=$(echo $health_resp | /usr/local/bin/fx .triggerer.status)
printf "%20s: %10s\n" "dag_processor_status" $dag_processor_status "metadatabase_status" $metadatabase_status "scheduler_status" $scheduler_status "trigger_status" $trigger_status
echo -e

if [[ "$scheduler_status" != "healthy" ]];then
    print "重新启动airflow调度器..."
    airflow scheduler -D
    print "成功启动airflow调度器!"
fi

if [[ "$trigger_status" != "healthy" ]];then
    print "重新启动airflow触发器..."
    airflow triggerer -D
    print "成功启动airflow触发器!"
fi

# crontab
# 1 * * * * /home/ubuntu/airflow/health.sh

第三方服务

https://www.astronomer.io/product/

参考

蹭了学生优惠,买了个阿里云轻服务器,5M带宽转国外线路减少丢包概率还不错,ns联机美滋滋,不过据说港服联机服务要出了,不知道联机质量会怎么样

firewall中继栗子

# 打开ip伪装
firewall-cmd --add-masquerade --permanent

# 添加端口协议
firewall-cmd --add-forward-port=port=中转后的端口:proto=tcp:toport=酸酸乳端口:toaddr=酸酸乳地址 --permanent
firewall-cmd --add-forward-port=port=中转后的端口:proto=udp:toport=酸酸乳端口:toaddr=酸酸乳地址 --permanent

# 重载一下
firewall-cmd --reload

这段时间在捣鼓tars框架,去vultr开了个3.5刀的机器,为什么要用他们家的呢,因为之前冲的50刀没用完????无奈呀

他家的机器对湖北电信非常不友好,创建必须要装bbr不然丢包够你受的,加大发包量,用的还挺爽的

这两天空闲了下,上线登陆发现有1w+的暴力登陆!!!

wtf!

network-attacks.png

第一次感受到这么泛滥的网络攻击,今天简单介绍一下修改sshd监听端口防范暴力破解

这里我开始就把selinux关掉了,你可以选择关闭selinux,因为会少很多麻烦事,当然也会产生隐形的问题,不过利大于弊

- 阅读剩余部分 -

今天装了个docker哟,挂着服务想要试试压力测试

在自己的服务器上试着用了一下 ab 命令,出现 zsh: command not found: ab

好吧,还要安装一下,sudo yum search ab,告诉我没有可用的软件包,这个就奇怪了

查找文档...

解决

sudo yum provides /usr/bin/ab
Loading mirror speeds from cached hostfile
 * base: mirror.fileplanet.com
 * elrepo: ftp.yz.yamagata-u.ac.jp
 * epel: dl.fedoraproject.org
 * extras: mirror.fileplanet.com
 * updates: mirror.fileplanet.com
httpd-tools-2.4.6-67.el7.centos.x86_64 : Tools for use with the Apache HTTP Server
源    :base
匹配来源:
文件名    :/usr/bin/ab

使用 httpd-tools-2.4.6-67.el7.centos.x86_64 这个包名

执行

sudo yum install -y httpd-tools-2.4.6-67.el7.centos.x86_64

安装完成,美滋滋

晚上更新docker, Mastodon, Gitlab的相关文章

composer是php的依赖管理工具,与前端的npm包管理差不多

今天就是来 在linux上如何安装composer(windows的一路下一步,没毛病)

setp 0

检查一下php版本号,可以显示版本号才能继续下面的操作

php -v

setp 1

首先准备好composer-setup.php

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

setp 2

在 shell 界面输入(如要全局安装请加上 --install-dir=bin --filename=composer)全局安装可以忽略后面所有操作

php composer-setup.php

setp 3

这步操作对普通用户使用都有效,当然root也可以

mv composer.phar /usr/local/bin/composer

setp 4

这个时候就可以查看你的composer版本号了

composer -v

撸了台hostker的,装的centos7.3,系统装完了一进去用netstat -antp喵一下网络连接的

发现netstat输出-bash: netstat: command not found

查了一下,发现是RHEL7准备废弃这几条命令了,废弃就废弃吧,我看看替换的新命令是咋样的

ip,ss

这又是要记参数的节奏呀!

好吧,还算简洁的,早晚都会用的,现在先熟悉用了。


ifconfig替换

ip addr

传输状态(-s 为详细显示)

ip link

netstat替换

ss

netstat -ant(-antp的输出个人看的不友好)

ss -ant

netstat -anu

ss -anu

traceroute/traceroute6替换

tracepath

route替换(-6 为IPv6)

ip route

ifconfig eth0 up/down替换

ip l set eth0 up/down

起步

服务器信息
1.System

CentOS release 6.9 (Final)
Kernel \r on an \m

2.Configuration

Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
1G,1核 (阿里拉基云)

step 1

这里我使用的是我大淘宝源


// 进入存放目录,我这里放在 /home/nodejs 下,放哪里看你喜好辣
cd /home/nodejs
// 下载 nodejs 二进制包
wget https://npm.taobao.org/mirrors/node/v6.10.2/node-v6.10.2-linux-x86.tar.gz
// 解压包
tar -xzvf node-v6.10.2-linux-x86.tar.gz
// 得到一个文件夹 node-v6.10.2-linux-x86,进入这个目录下的 bin 目录
cd node-v6.10.2-linux-x86/bin
// 确认下载的 nodejs 的版本无误
./node -v

step 2

现在你只能在这个目录下操作 node 呀,所以我们要加到 用户环境里


// 查看一下当前所在的目录
pwd
// 添加软连接到 /usr/local/bin
ln -s /home/nodejs/node-v6.10.2-linux-x86/bin/node /usr/local/bin/node
ln -s /home/nodejs/node-v6.10.2-linux-x86/bin/npm /usr/local/bin/npm

- 阅读剩余部分 -

没找到好用的图,随手p了个求生之路2

2021.03.27 更新

服务器配置

软件软件版本
操作系统Debian 10 (buster)
内核4.19.0-13-amd64
cpu2.59Ghz cpu*4
内存8GB
带宽5Mbps
硬盘150G 高性能云硬盘

起步

Debian

教程终默认以 root 用户执行命令
# 安装32位环境依赖
$ dpkg --add-architecture i386

# 最好还是升级一下系统
$ apt update
$ apt upgrade

Steam教程原话

Create a user account named steam to run SteamCMD safely, isolating it from the rest of the operating system. Do not run steamcmd while operating as the root user - to do so is a security risk.

最好不要使用 root 用户来运行 steamCMD

创建用户并建立存放目录

$ adduser steam   #创建一个用户叫 steam
$ passwd steam    #密码自己随意设置,我这里就 steam
$ sudo -iu steam  #这个用户在求生之路2的文件夹里没有创建文件的权限,建议切回root创建
$ mkdir steamCmd  #创建存放目录
官方的 apt install steamcmd 我是没有成功,小伙伴们可以试一下
$ cd ~/steamCmd

# 下载完成后解压文件
$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

运行 steamCMD 安装求生之路2

啊~

运行脚本

$ steamcmd

这个时候你就进到 steamCMD 辣

这是匿名登陆到 steam ,查看需要用户名登陆的游戏在这里找 这里这里

这里 求生之路2 支持匿名登陆,我们用匿名

# 其它用户名登陆 `login 用户名`

Steam> login anonymous

指定下载目录这一步我没做,直接默认下载在 $HOME/.steam/steamapps/common/ 里面

下载的时候最后带上 validate 效验下载的数据缺少或丢失

Steam> app_update 222860 validate

下载过程

等待安装完成......


安装完成会提示 Success! App '222860' fully installed.

输入 exitquitCtrl + CCtrl + Z 退出

配置并运行求生之路2

创建 server.cfg 配置文件

$ nano $HOME/server.cfg

输入以下内容

hostname "ohhhhhhhhhhhhhhhh"                     #主机名
sv_cheats 1                                      #开启作弊
sv_region 4                                      #我这里设置的亚洲服务器(0就是全球辣)
sv_steamgroup "27915935,1184541,1016724,628356"  #设置steam组
sv_steamgroup_exclusive 1                        #开启私有组
sv_allow_wait_command 0                          #不等待
sb_all_bot_game 1                                #留着一个电脑
sv_consistency 0                                 #mod不一样也可以一起玩
sv_search_max_ping 300                           #超过300ping就找不到我辣(前提把私有组关掉)
fps_max 72                                       #限制fps72
z_difficulty Hard                                #开启困难模式

管理员权限创建一个启动脚本

$ curl -O https://mirror.flxxyz.com/gist/flxxyz/14b5dc4080d20c685eb767067414c8dd/raw/7d202f1e204610bd9ab4a71671b54f6b3ee05f41/l4d2_start_server.sh
$ chmod +x l4d2_start_server.sh

OK,运行吧~

$ ./l4d2_start_server.sh