تفاصيل بناء Travis CI: انقر للرؤية
(中文版本请参看这里)
مدقق الصحة لخوادم Nginx الأولية (يدعم http upstream &&stream upstream)
يمكن لهذه الوحدة أن تزود NGINX بإمكانية التحقق من صحة الخادم الخلفي النشط (يدعم التحقق من صحة كل من الخوادم الخلفية الأربعة والسبعة).
وحدة nginx هذه لا تزال قيد التطوير، ويمكنك المساعدة في تحسينها.
تم أيضًا تطوير المشروع بشكل جيد في مرحلة التطوير، ويمكنك المساهمة بالرمز أو الإبلاغ عن الأخطاء. معا لجعله أفضل.
إذا كان لديك أي أسئلة، يرجى الاتصال بي:
QQ
:373882405mail
: [email protected]عند استخدام nginx كموازن تحميل، يوفر nginx أصلاً عمليات إعادة المحاولة الأساسية فقط لضمان الوصول إلى خادم خلفي عادي.
في المقابل، توفر وحدة nginx التابعة لجهة خارجية اكتشافًا استباقيًا لحالة الصحة للخوادم الخلفية.
ويحتفظ بقائمة من الخوادم الخلفية التي تضمن إرسال الطلبات الجديدة مباشرة إلى خادم خلفي سليم.
الميزات الرئيسية:
tcp
/ udp
/ http
http
/ fastcgi
html
/ json
/ csv
/ prometheus
html
/ json
/ csv
/ prometheus
check_http_expect_body ~ ".+OK.+";
git clone https://github.com/nginx/nginx.git
git clone https://github.com/zhouchangxun/ngx_healthcheck_module.git
cd nginx/;
git checkout branches/stable-1.12
git apply ../ngx_healthcheck_module/nginx_healthcheck_for_nginx_1.12+.patch
./auto/configure --with-stream --add-module=../ngx_healthcheck_module/
make && make install
العودة إلى جدول المحتويات
مثال nginx.conf
user root;
worker_processes 1 ;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024 ;
}
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status json;
}
# http front
location / {
proxy_pass http://http-cluster;
}
}
# as a backend server.
server {
listen 8080 ;
location / {
root html;
}
}
upstream http-cluster {
# simple round-robin
server 127.0.0.1:8080;
server 127.0.0.2:81;
check interval=3000 rise=2 fall=5 timeout=5000 type=http;
check_http_send "GET / HTTP/1.0rnrn" ;
check_http_expect_alive http_2xx http_3xx;
}
}
stream {
upstream tcp-cluster {
# simple round-robin
server 127.0.0.1:22;
server 192.168.0.2:22;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp;
}
server {
listen 522 ;
proxy_pass tcp-cluster;
}
upstream udp-cluster {
# simple round-robin
server 127.0.0.1:53;
server 8.8.8.8:53;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=udp;
}
server {
listen 53 udp;
proxy_pass udp-cluster;
}
}
واجهة الحالة
أحد المخرجات النموذجية هو (تنسيق json)
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module # curl localhost/status
{ "servers" : {
"total" : 6 ,
"generation" : 3 ,
"http" : [
{ "index" : 0 , "upstream" : "http-cluster" , "name" : "127.0.0.1:8080" , "status" : "up" , "rise" : 119 , "fall" : 0 , "type" : "http" , "port" : 0 },
{ "index" : 1 , "upstream" : "http-cluster" , "name" : "127.0.0.2:81" , "status" : "down" , "rise" : 0 , "fall" : 120 , "type" : "http" , "port" : 0 }
],
"stream" : [
{ "index" : 0 , "upstream" : "tcp-cluster" , "name" : "127.0.0.1:22" , "status" : "up" , "rise" : 22 , "fall" : 0 , "type" : "tcp" , "port" : 0 },
{ "index" : 1 , "upstream" : "tcp-cluster" , "name" : "192.168.0.2:22" , "status" : "down" , "rise" : 0 , "fall" : 7 , "type" : "tcp" , "port" : 0 },
{ "index" : 2 , "upstream" : "udp-cluster" , "name" : "127.0.0.1:53" , "status" : "down" , "rise" : 0 , "fall" : 120 , "type" : "udp" , "port" : 0 },
{ "index" : 3 , "upstream" : "udp-cluster" , "name" : "8.8.8.8:53" , "status" : "up" , "rise" : 3 , "fall" : 0 , "type" : "udp" , "port" : 0 }
]
}}
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module #
أو (صيغة بروميثيوس)
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module # curl localhost/status
# HELP nginx_upstream_count_total Nginx total number of servers
# TYPE nginx_upstream_count_total gauge
nginx_upstream_count_total 6
# HELP nginx_upstream_count_up Nginx total number of servers that are UP
# TYPE nginx_upstream_count_up gauge
nginx_upstream_count_up 0
# HELP nginx_upstream_count_down Nginx total number of servers that are DOWN
# TYPE nginx_upstream_count_down gauge
nginx_upstream_count_down 6
# HELP nginx_upstream_count_generation Nginx generation
# TYPE nginx_upstream_count_generation gauge
nginx_upstream_count_generation 1
# HELP nginx_upstream_server_rise Nginx rise counter
# TYPE nginx_upstream_server_rise counter
nginx_upstream_server_rise { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , status = "down" , type = "tcp" , port = "0" } 0
nginx_upstream_server_rise { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , status = "down" , type = "udp" , port = "0" } 0
nginx_upstream_server_rise { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 0
# HELP nginx_upstream_server_fall Nginx fall counter
# TYPE nginx_upstream_server_fall counter
nginx_upstream_server_fall { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 41
nginx_upstream_server_fall { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 42
nginx_upstream_server_fall { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , status = "down" , type = "tcp" , port = "0" } 14
nginx_upstream_server_fall { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , status = "down" , type = "udp" , port = "0" } 40
nginx_upstream_server_fall { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 40
nginx_upstream_server_fall { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 43
# HELP nginx_upstream_server_active Nginx active 1 for UP / 0 for DOWN
# TYPE nginx_upstream_server_active gauge
nginx_upstream_server_active { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , type = "tcp" , port = "0" } 0
nginx_upstream_server_active { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , type = "udp" , port = "0" } 0
nginx_upstream_server_active { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , type = "http" , port = "0" } 0
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module #
العودة إلى جدول المحتويات
Syntax
تحقق الفاصل الزمني = ميلي ثانية [سقوط = العد] [ارتفاع = العد] [المهلة = ميلي ثانية] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default
: الفاصل الزمني = 30000 سقوط = 5 صعود = 2 مهلة = 1000 default_down = النوع الحقيقي = TCP
Context
: http/upstream || تيار / المنبع
يمكن لهذا الأمر فتح وظيفة التحقق من سلامة الخادم الخلفي.
Detail
interval
: الفاصل الزمني لحزمة التحقق من الصحة المرسلة إلى الواجهة الخلفية.fall
( fall_count
): يعتبر الخادم معطلاً إذا وصل عدد مرات الفشل المتتالية إلى Fall_count.rise
( rise_count
): يعتبر الخادم مرفوعًا إذا وصل عدد النجاحات المتتالية إلى rise_count.timeout
: مهلة لطلب الصحة الخلفية.default_down
: قم بتعيين الحالة الأولية للخادم، إذا كانت صحيحة، فهذا يعني أن الحالة الافتراضية معطلة، وإذا كانت خاطئة، فهي أعلى. القيمة الافتراضية هي صحيح، وهي بداية الخادم غير المتاح، والانتظار حتى تصل حزمة التحقق من الصحة إلى عدد معين من المرات بعد أن يعتبر النجاح سليمًا.type
: نوع حزمة التحقق من الصحة، ويدعم الآن الأنواع التاليةtcp
: اتصال tcp بسيط، إذا كان الاتصال ناجحًا، فسيتم عرض النهاية الخلفية بشكل طبيعي.udp
: من السهل إرسال حزم udp، إذا تلقيت خطأ icmp (لا يمكن الوصول إلى المضيف أو المنفذ)، فإنه يعرض استثناء النهاية الخلفية. (يتم دعم التحقق من نوع UDP فقط في كتلة تكوين الدفق)http
: أرسل طلب HTTP لتحديد حالة حزمة الرد الخلفية لتحديد ما إذا كانت النهاية الخلفية ستبقى أم لا.مثال كما يلي:
stream {
upstream tcp-cluster {
# simple round-robin
server 127.0.0.1:22;
server 192.168.0.2:22;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp;
}
server {
listen 522 ;
proxy_pass tcp-cluster;
}
...
}
Syntax
: healthcheck_status [html|csv|json|prometheus]
Default
: healthcheck_status HTML
Context
: http/server/location
مثال كما يلي:
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status;
}
...
}
يمكنك تحديد تنسيق العرض الافتراضي. يمكن أن تكون التنسيقات html
أو csv
أو json
. النوع الافتراضي هو html
. كما أنه يدعم تحديد التنسيق بواسطة وسيطة الطلب. لنفترض أن موقع check_status
الخاص بك هو "/status"، فيمكن لوسيطة format
تغيير تنسيق صفحة العرض. يمكنك أن تفعل مثل هذا:
/status?format=html
/status?format=csv
/status?format=json
/status?format=prometheus
في الوقت الحالي، يمكنك جلب قائمة الخوادم التي لها نفس الحالة من خلال وسيطة status
. على سبيل المثال:
/status?format=json&status=down
/status?format=html&status=down
/status?format=csv&status=up
/status?format=prometheus&status=up
العودة إلى جدول المحتويات
العودة إلى جدول المحتويات
الرجاء الإبلاغ عن الأخطاء
أو إرسال التصحيحات عن طريق
العودة إلى جدول المحتويات
فرصة تشو (周长勋) [email protected].
العودة إلى جدول المحتويات
يعتمد جزء التحقق من الصحة على وحدة الفحص الصحي الخاصة بـ Yaoweibin nginx_upstream_check_module (http://github.com/yaoweibin/nginx_upstream_check_module)؛
هذه الوحدة مرخصة بموجب ترخيص BSD.
حقوق الطبع والنشر (C) 2017-، بواسطة Changxun Zhou [email protected]
حقوق الطبع والنشر (C) 2014 بواسطة Weibin Yao [email protected]
جميع الحقوق محفوظة.
يُسمح بإعادة التوزيع والاستخدام في النماذج المصدرية والثنائية، مع أو بدون تعديل، بشرط استيفاء الشروط التالية:
يجب أن تحتفظ عمليات إعادة توزيع التعليمات البرمجية المصدر بإشعار حقوق الطبع والنشر المذكور أعلاه وقائمة الشروط هذه وإخلاء المسؤولية التالي.
يجب أن تقوم عمليات إعادة التوزيع في شكل ثنائي بإعادة إنتاج إشعار حقوق الطبع والنشر أعلاه وقائمة الشروط وإخلاء المسؤولية التالي في الوثائق و/أو المواد الأخرى المقدمة مع التوزيع.
يتم توفير هذا البرنامج من قبل أصحاب حقوق الطبع والنشر والمساهمين "كما هو" ويتم إخلاء المسؤولية عن أي ضمانات صريحة أو ضمنية، بما في ذلك، على سبيل المثال لا الحصر، الضمانات الضمنية لقابلية التسويق والملاءمة لغرض معين. لا يتحمل صاحب حقوق الطبع والنشر أو المساهمين بأي حال من الأحوال المسؤولية عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو خاصة أو نموذجية أو تبعية (بما في ذلك، على سبيل المثال لا الحصر، شراء السلع أو الخدمات البديلة؛ فقدان الاستخدام، البيانات، أو الأرباح؛ أو انقطاع الأعمال) مهما كان السبب وعلى أي نظرية للمسؤولية، سواء في العقد أو المسؤولية الصارمة أو الضرر (بما في ذلك الإهمال أو غيره) الذي ينشأ بأي شكل من الأشكال عن استخدام هذا البرنامج، حتى لو تم الإبلاغ عن هذا الاحتمال. من مثل هذه الأضرار.
العودة إلى جدول المحتويات
العودة إلى جدول المحتويات