יום שבת, 28 בדצמבר 2013

Zen Load Balancer Guide




לאחר שבנינו סביבה וירטואלית בעזרת Proxmox וחברנו מערכת אחסון בעזרת FreeNas השלב הבא מתמקד במשאבי הרשת בענן, על מנת שנוכל לתת שירות לכמות משתמשים ששרת בודד אינו יכול לתת, עלינו לחבר רכיב נוסף בענן שינתב את הבקשות בין מספר שרתים, הרכיב נקרא Load Balancer בחלק מהמקרים הוא מגיע עם מערכות FireWall מתקדמות אבל לרוב זאת יחידה נפרדת שמתחברת ל Router וממנו לעולם.

Load Balance


הרעיון מאוד פשוט מדובר על תוכנית שמנתבת את הבקשות לפי סוגים של מתודות שנקבעו מראש, ניתן לחבר מספר שרתים על אותו Balancer או לחבר מספר שכבות של Balancers ביחד במקרה שיש לנו תנועה כבדה לפיזור העמוסים בין שאר השרתים ב Cluster.

 Zen Load Balancer

כמו שראינו בשאר המאמרים בנושא גם פה נעשה שימוש ב Linux, מדובר על פרויקט חינמי שבנוי על מודל עסקי דומה כמו של Proxmox ו FreeNAS שהתשלום עבור תמיכה בלבד, כך שניתן להוריד ולהשתמש בו בחינם, בנוסף ניתן לקנות באתר הרשמי חומרה יעודית.

דרישות:
  • 2 מכונות Linux וירטואליות עם Apache.
  • Zen Load Balancer - האתר הרשמי
תהליך ההתקנה מאוד פשוט מכניסים את הדיסק ומתחילים לרוץ.

דומה לצורת ההתקנה של Proxmox ו FreeNAS

תפריט מסודר
טעינה ראשונית לזיכרון
בחירת כתובת סטטית
בחירת Netmask
בחירת Default Gateway
הגדרת סיסמא ל Root
הגדרות הכנון הקשיח
כתיבה לכונן הקשיח והפעלה מחדש

בסיום ההתקנה נפעיל את המכונה מחדש נפתח את הדפדפן בכתובת שהכנסנו בהתקנה ובפורט 444 שיכניס אותנו לממשק ניהול, עם הכניסה נבקש להכניס שם משתמש וסיסמא זמניים (admin , admin) ואח"כ נעבור לממשק, זהו סיימנו את ההתקנה בהצלחה.

בניתי 2 מכונות נוספות מבוססות על Fedora יחד עם Apache בכל יחד יש קובץ Index.htm שמתאר את השרת.



תחילה נבנה Farm (חווה) , נלחץ על Manage-> Farms, נבסס את ה Balancer על כתובת הראשית (192.168.1.10), נגדיר את הפרוטוקול ואת הפורטים שאותם נפצל לצורך הדוגמה מדובר בחווה של שרתי HTTP, אם לא בא לנו להשתמש בכתובת הראשית ניתן להוסיף Interfaces נוספים.


בהגדרות החווה נקבע את אופי ההתנהגות של ה Load Balancer ונחבר אליו את השרתים האמיתיים שנותנים את השירות:



הפונקציה החשובה ביותר היא בחירת האלגוריתם המתאים לפיצול העומסים, Zen Load Balancer תומך במספר אלגוריתמים כפי שנראה בתמונה:


  • Round Robin - פיצול שווה בין השרתים האמיתיים.
  • Hash Sticky Client - כל כתובת שמגיעה ל Balancer מקבלת מחרוזת ייחודית שמחברת אותה לשרת האמיתי כלומר התעבורה תמיד תעבור דרך אותו שרת.
  • Weight - חלוקה של ביצועים לפי השרתים האמיתיים כלומר השרת עם ה Weight הגבוה ביותר יקבל יותר תעבורה משרת עם Weight נמוך יותר, התעבורה תתחלק באופן יחסי לפי ה Weight.
  • Priority - השרת עם התעדוף הגבוה ביותר יקבל את התעבורה.

החווה שלנו דורשת עקביות בחיבור, במיוחד בשרותי Web שבהם יש Session שנוצר על המכונה האמיתית, נניח שיש לנו אתר עם חשבון אישי שהמידע נשמר ב Session, ברגע שהלקוח מתחבר לאתר נרצה שתמיד יגיע לאותו שרת על מנת לשמר את ה Session, לכן ה Load Balancer מכיל טבלה בה כתוב לאיזה שרת אמיתי כל כתובת התחברה ופעם הבאה שתגיע בקשה הוא ידאג להעביר אותה לשרת המקורי.


יש התייחסות חשובה לחומרה ב Load Balancer, יש להגדיר כמות זיכרון מספקת, ומעבדים יחסית חזקים במקרה שיש לנו תעבורה כבדה או שפשוט מייצרים Cluster של Load Balancer שמחלק בין עצמו את העמוסים לפני השרתים האמיתיים.

לאחר שסיימנו להגדיר את ההגדרות הכלליות של החווה השלב הבא הוא לשלב את השרתים האמיתיים, נכניס את הכתובות של השרתי Fedora:


זהו אפשר לומר שסיימנו וברגע שתגיע בקשה לכתובת ה Load Balancer הוא יעביר את הבקשה לאחד השרתים לפי האלגוריתם שנבחר.



סיכום:

בסדרת המאמרים בנושא ראינו כיצד לבנות ענן בעזרת תוכנות Open Source בלבד, שמבוססות על Linux והחלק האחרון הוא פתרון Firewall שאותו נכיר בהמשך, האמת שהמאמר הזה הוא סיבה טובה למסיבה, הוא המאמר האחרון לשנה והוא המאמר ה 100  בבלוג אז נתראה בשנה הבאה.

בהצלחה...

יום שבת, 21 בדצמבר 2013

Arduino Photoresistor Guide




חיישן נוסף שחשוב להכיר הוא ה Photoresistor שמאפשר למדוד את עוצמת האור, את שלי קניתי בחנות האלקטרוניקה שקרובה לביתי אבל ניתן למצוא אותו ב DX במחיר מצחיק של מספר שקלים בודדים, על הדרך לקחתי גם Speaker ישן שמגיע עם כל לוח אם והחלטתי לחבר בניהם, כאשר עוצמת האור יורדת מערך מסויים ה Speaker מתחיל לצפצף, בדומה לתאורת חצר שנדלקת כאשר יורד הלילה.

דרישות
  • Arduino UNO
  • Photoresistor
  • 10k Resistor
  • PC Speaker
  • BreadBorad
  • Wires







Photoresistor



בגדול זה נגד שמשנה את התנגדות שלו לפי האור, הוא מאוד זול וחסכוני אבל לא כל כך מדויק, בסה"כ יש לו 2 רגלים, רגל אחת מחברים ל 5 V ואת הרגל השניה מפצלים לרגל אחת שמתחברת ל Analog Input והשניה מתחברת ל 10K Resistor שמתחבר ל GND.

קוד

#define speakerPin 2
#define lightPin 1

int photocellReading = 0;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}


void setup() {
  Serial.begin(9600);
  pinMode(speakerPin, OUTPUT);
}

void loop() {
    getLight();
    //if light level lower play sound
    if(photocellReading < 100)
          //send different number to change tone
          playTone(1915,300);
    delay(300); 
}

void getLight()
{
  //reading the light level from analog input
  photocellReading = analogRead(lightPin);  
  Serial.print(photocellReading);
  Serial.print("\n");
}



מבנה סופי

מצפצף כאשר עוצמת האור יורדת



סרט הדגמה





סיכום

השנה קרובה לסופה , זאת היתה שנה עמוסה במאמרים בתחומים שונים וגם השנה Arduino כיכב בבלוג, במהלך השנה באה ניקח אותו לקצה ונבנה פרויקטים מורכבים יותר.

בהצלחה...