Tag: cyrus

  • วิธีติดตั้งระบบ Cyrus IMAP Cluster (Cyrus Murder)

    ต่อจาก
    Mail Clustering with Cyrus Murder และ How Cyrus Murder (Mail Clustering) work?

    คราวนี้ มาลง รายละเอียดทีละขั้นตอน

    ระบบ Cyrus IMAP Cluster หรือ Cyrus Murder นี้ ประกอบด้วยเครื่องคอมพิวเตอร์ ขั้นต่ำ 3 เครื่อง คือ frontend, backend, mupdate ต่อไปนี้ จะเป็นวิธีการทำ แต่ละเครื่อง

     

    Prerequisite

    ทั้งหมดเป็น Ubuntu 16.04 Server, ทำการ update และ upgrade แล้ว และ เข้า SSH ด้วย user ที่สามารถ sudo ได้ และรุ่นของ cyrus-imapd, cyrus-murder ที่ใช้เป็น 2.4.18
    ทุกเครื่อง มี user ชื่อ ‘cyrus’ และ ทำการตั้งรหัสผ่านไว้เรียบร้อย
    เฉพาะเครื่องที่เป็น Backend จะต้องมี uesr ชื่อ ‘mailproxy’ และทำการตั้งรหัสผ่านไว้เรียบร้อย ด้วยอีก 1 คน
    ในที่นี้ จะใช้ pam-ldap ติดตั้งใน Backend ทุกเครื่อง

    MUPDATE ( mupdate1.example.com )

    1. ติดตั้ง cyrus-murder ด้วยคำสั่ง
      sudo apt install cyrus-murder cyrus-common sasl2-bin

      ระบบจะติดตั้งตั้งโปรแกรมที่เกี่ยวข้อง รวมถึง postfix ด้วย ให้เลือกเป็น No configuration ไป

    2. แก้ไขไฟล์ /etc/cyrus.conf ใน Section “SERVICES” ประมาณบรรทัดที่ 62 ให้ uncomment เพื่อได้บรรทัดนี้
      mupdate       cmd="mupdate -m" listen=3905 prefork=1

      จุดสำคัญคือ mupdate -m คือ ตัวที่จะบอกว่า ทำหน้าที่เป็น MUPDATE Master

    3. แก้ไขไฟล์ /etc/imapd.conf เพื่อกำหนด admins ในที่นี้ให้ใช้ชื่อ cyrus โดยการ uncomment ประมาณบรรทัดที่ 55
      และแก้ sasl_pwcheck_method เป็น saslauthd

      sasl_pwcheck_method: saslauthd
      sasl_mech_list: PLAIN
      admins: cyrus
    4. จากนั้น start ระบบขึ้นมา จะพบว่ามีการเปิด port 3905 รออยู่
      sudo /etc/init.d/cyrus-imapd start
      netstat -nl | grep 3905
    5. แก้ไขไฟล์ /etc/default/saslauthd บรรทัดที่ 7
      START=yes

      แล้ว start saslauthd

      sudo /etc/init.d/saslauthd start

    BACKEND ( backend01.example.com)

    1. ติดตั้ง
      sudo apt install cyrus-imapd cyrus-common cyrus-clients sasl2-bin
    2. แก้ไขไฟล์ /etc/imapd.conf โดยเพิ่มบรรทัดต่อไปนี้ไว้ท้ายไฟล์
      #SASL
      sasl_pwcheck_method: saslauthd
      sasl_mech_list: PLAIN
      
      # MUPDATE
      servername: backend01.example.com
      admins: cyrus   
      proxyservers:   mailproxy
      lmtp_admins: mailproxy
      mupdate_server: mupdate.example.com
      mupdate_port: 3905
      mupdate_username: cyrus
      mupdate_authname: cyrus
      mupdate_password: <secret>
      
    3. แก้ไข /etc/cyrus.conf
      ใน START section ให้ uncomment

      mupdatepush cmd="/usr/sbin/cyrus ctl_mboxlist -m"
    4. เพิ่มส่วนนี้ ท้ายไฟล์ /etc/services ด้วย
      #MUPDATE
      mupdate 3905/tcp # MUPDATE
      mupdate 3905/udp # MUPDATE
    5. *** ติดตั้ง PAM LDAP
      sudo apt-get install ldap-auth-client nscd

      ตั้งค่าต่อไปนี้

      LDAP server Uniform Resource Identifier: ldap://ldap.your.domain/
      Distinguished name of the search base: dc=example,dc=com
      LDAP version to use: 3
      Make local root Database admin: No
      Does the LDAP database require login? No

      ต่อไป สั่งให้ระบบแก้ไขเงื่อนไขการ authen เป็น LDAP

      sudo auth-client-config -t nss -p lac_ldap

      จากนั้นใช้คำสั่งต่อไปนี้ เพื่อเริ่มใช้งาน PAM LDAP

      sudo pam-auth-update

      จะมีคำถามว่า
      PAM profiles to enable:
      ให้เลือกทั้ง
      Unix authentication และ
      LDAP Authentication

      สุดท้าย

      sudo /etc/init.d/nscd restart
    6. แก้ไขไฟล์ /etc/default/saslauthd บรรทัดที่ 7
      START=yes

      แล้ว start saslauthd

      sudo /etc/init.d/saslauthd start

    FRONTEND ( frontend01.example.com )

    1. ติดตั้ง
      sudo apt install cyrus-imapd cyrus-common cyrus-clients sasl2-bin
    2. แก้ไขไฟล์ /etc/imapd.conf โดยเพิ่มบรรทัดต่อไปนี้ไว้ท้ายไฟล์
      #SASL
      sasl_pwcheck_method: saslauthd
      sasl_mech_list: PLAIN
      
      # MUPDATE
      mupdate_server: mupdate.example.com
      mupdate_port: 3905
      mupdate_username: cyrus
      mupdate_authname: cyrus
      mupdate_password: <secret>
      
      #PROXY
      serverlist: backend01.example.com
      backend01_password: mailproxy
      proxy_authname: mailproxy
      
    3. แก้ไข /etc/cyrus.conf
      ใน SERVICE section ให้ uncomment

      mupdate cmd="mupdate" listen=3905 prefork=1
    4. เพิ่มส่วนนี้ ท้ายไฟล์ /etc/services ด้วย
      #MUPDATE
      mupdate 3905/tcp # MUPDATE
      mupdate 3905/udp # MUPDATE
    5. แก้ไขไฟล์ /etc/default/saslauthd บรรทัดที่ 7
      START=yes

      แล้ว start saslauthd

      sudo /etc/init.d/saslauthd start

    และ เมื่อทุกอย่างพร้อม ทุกเครื่องก็

    sudo /etc/init.d/cyrus-imapd restart

    เมื่อจะเพิ่มเครื่อง Backend ก็ทำตามขั้นตอน แล้ว เพิ่มใน /etc/imapd.conf ของเครื่อง Frontend ในส่วนของ serverlist และ password เช่น
    จะเพิ่มเครื่อง backend02.example.com ก็ต้องเพิ่มดังนี้

    #PROXY
    serverlist: backend01.example.com backend02.example.com
    backend01_password: <secret>
    backend02_password: <secret>
    proxy_authname: mailproxy

    เมื่อต้องการเพิ่ม Frontend ก็ให้ Sync ตัวไฟล์ /etc/imapd.conf ไปให้เหมือนกันทุกเครื่อง

    หวังว่าจะเป็นประโยชน์

  • How Cyrus Murder (Mail Clustering) work?

    ต่อจาก Mail Clustering with Cyrus Murder

    เมื่อ Backend ทำการ Restart หรือมีการเปลี่ยนแปลงเกี่ยวกับ Mailbox

    เครื่อง backend01 และ backend02 ทำการรายงาน mailbox ทั้งหมดในเครื่องของตนเอง ให้ mupdate ทราบ จากนั้น mupdate ก็จะทราบว่า ทั้ง Cluster มี mailbox อะไรและอยู่ที่ใด

    โดยเครื่อง backend01 และ backend02 จะ Login ด้วย User ที่สร้างไว้ใน mupdate ก่อน จากนั้นจึงสามารถทำการ Synchronize ข้อมูล mailbox ไปยัง mupdate ได้

    เมื่อ Mail client ติดต่อใช้บริการ IMAP/POP มายัง Frontend Server

     

    1. เมื่อ Mail Client ซึ่งสมมุติว่า ตั้งค่า Incoming Server เป็น frontend.yourdomain.com ซึ่งเป็นแบบ DNS Round Robin ก็ตอบ IP Address ของเครื่อง frontend server ใน cluster เช่นตอบ IP Address ของ frontend01.yourdomain.com เป็นต้น

    2. เมื่อ frontend01.yourdomain.com รับการเชื่อมต่อจาก Mail Client และทำหน้าที่เป็น IMAP Proxy, สมมุติ Mail Client ต้องการติดต่อ Mailbox ของ User/yingyong.f, เครื่อง frontend01 ก็จะสอบถามไปยัง mupdate ว่า user/yingyong.f อยู่ที่เครื่องใด, ซึ่ง mupdate ก็ดูในฐานข้อมูลตนเอง และตอบว่าอยู่ที่ backend02

    3. จากนั้น frontend01 ก็จะติดต่อกับ backend02 จากนั้น เมื่อผู้ใช้ส่งคำสั่งต่างๆมาจาก Mail Client ก็จะทำผ่าน frontend01 ซึ่งจะไปสอบถาม backend02 ต่อไป จนกระทั่ง ปิดการเชื่อมต่อ

    เมื่อ Mail Client ส่ง email ถึง Domain

     

    1. Mail Client ส่ง email ถึง somsri.b@yourdomain.com, ระบบ DNS จะหาว่า yourdomain.com อยู่ที่ไหน ก็จะพบว่า MX Record ของ yourdomain.com อยู่ที่ frontend.yourdomain.com จากนั้น DNS ก็จะใช้ Round Robin ตอบ IP Address ของหนึ่งใน Frontend มา สมมุติว่าตอบของ frontend02 มา

    2. เครื่อง frontend02 ก็จะไปถาม mupdate ว่า somsri.b อยู่ที่เครื่องใด, mupdate ตอบว่า อยู่ที่ backend01

    3. เครื่อง frontend02 ก็จะส่ง email ต่อไปให้ เครื่อง backend01 เพื่อเขียนลง Mailbox ของ somsri.b ต่อไป

     

  • Mail Clustering with Cyrus Murder

    ปัจจุบันมีการใช้งาน e-mail มากขึ้น และมีการเก็บข้อมูลต่างๆใน email ไว้เป็นจำนวนมาก ทำให้ Mail Server ของหน่วยงานเดิม อาจจะมีเนื้อที่ไม่เพียงพอต่อการใช้งาน ทำให้ต้องมีการขยายพื้นที่ Mail Server ให้มากขึ้น

    วิธีการที่นิยมใช้กันคือ ซื้อระบบใหม่ที่มี Harddisk ใหญ่ขึ้น หรือ ต่อกับระบบ Storage ที่ใหญ่ขึ้น (เช่น SAN หรือ Storage Cluster)

    วิธีการนี้ เรียกว่า Scale-Up ซึ่งเมื่อมีการใช้งานต่อไป แล้วข้อมูลจัดเก็บมากขึ้น ก็ต้องวางแผนในการซื้อระบบที่ใหญ่ขึ้นไปอีก

    ข้อดี:
    1. เป็นวิธีการที่นิยมทำกัน
    2.ได้ระบบใหม่ที่มีศักยภาพสูงขึ้นเรื่อยๆ

    ข้อเสีย:
    1. เมื่อจะย้ายระบบใหม่ จะเกิด Downtime เพราะต้องหยุดการทำงานของระบบเดิมทั้งระบบ
    2.  ในการย้ายข้อมูล email ซึ่งมีปริมาณมาก ต้องใช้เวลานาน และเสี่ยงต่อข้อมูลที่ไม่เป็นปัจจุบันที่สุดด้วย (ล่าสุดที่ทำการย้ายข้อมูลขนาด 300 GB ซึ่งลักษณะ email ที่ใช้เก็บข้อมูลเป็นไฟล์เล็กๆจำนวนมาก ต้องใช้เวลาถึง 18 ชั่วโมง)
    3. และที่หลีกเลี่ยงไม่ได้ ระบบแบบเดิมนี้ เป็น “Single Point of Failure” กล่าวคือ  ถ้าระบบเสียหาย ก็จะกระทบกับผู้ใช้ทั้งหมด

     

    แต่มีอีกแนวทางหนึ่ง เรียกว่าการ Scale-Out คือ การใช้ระบบที่เป็น Mail Cluster แทน เมื่อมีความต้องการขยายพื้นที่ ก็เพียงแต่ซื้อเครื่องใหม่ แล้วเพิ่มเข้าสู่ระบบ Cluster แล้วเริ่มต้นใช้งานต่อเนื่องได้

    แนวทาง Scale-Out ทำให้สามารถขยายพื้นที่จัดเก็บได้เรื่อยๆ อย่างต่อเนื่อง

    ข้อดี:
    1.ลดปัญหา Single Point of Failure โดยการกระจายที่จัดเก็บไปใน Server ต่างๆใน Cluster เมื่อเกิดความเสียหากับเครื่องใดเครื่องหนึ่ง ก็จะไม่กระทบกับผู้ใช้ทั้งหมด
    2. เมื่อต้องการพื้นที่จัดเก็บเพิ่ม ไม่ต้องหยุดการทำงานทั้งระบบ เพียงเพิ่มเครื่องใหม่เข้าใน Cluster แล้วปรับแต่งค่าเพียงเล็กน้อย ก็สามารถใช้งานได้เลย

    ข้อเสีย:
    1. ระบบมีความซับซ้อนยิ่งขึ้น มีระบบต้องเฝ้าระวังมากขึ้น

    ในระบบ PSU E-Mail Service ใช้โอเพนซอร์สซอฟต์แวร์ในการบริการ Email คือ cyrus-imapd ซึ่งสามารถสร้างระบบ Mail Cluster ด้วยการติดตั้งแพคเกจที่ชื่อว่า cyrus-murder ได้

    Cyrus Murder ประกอบไปด้วย Server 3 ประเภท
    1. Backend Servers: ทำหน้าที่เก็บ Mailbox ของผู้ใช้, โดยแต่ละเครื่องจะรายงานรายละเอียดของ Mailbox ที่อยู่บนเครื่องตนเอง ให้ MUPDATE Server ทราบ
    2. Frontend Servers: ทำหน้าที่บริการ IMAP/POP ให้กับ Mail Client และ บริการ SMTP เพื่อส่งถึง Mailbox ที่อยู่บน Backend Servers ที่ถูกต้อง โดยอาศัยบริการของ MUPDATE Server เพื่อให้ทราบว่า Mailbox ที่ต้องการติดต่อด้วย อยู่บน Backend Server เครื่องใด
    3. MUPDATE Servers: ทำหน้าที่เป็นฐานข้อมูลกลางของ Mailbox ทั้งหมดใน Backend Cluster โดยรับรายงานจาก Backend Servers และบริการตอบ Fronend Servers ว่า Mailbox ที่ต้องการติดต่อด้วย อยู่บน Backend Server เครื่องใด

    อ่านต่อ:

    – ระบบ Cyrus Murder ทำงานอย่างไร
    – วิธีการติดตั้ง Backend Server และการนำเข้าระบบ
    – วิธีการติดตั้ง Frontend Server และการนำเข้าระบบ
    – วิธีการติดตั้ง MUPDATE Server และการนำเข้าระบบ