เมื่อ Kopano แจ้งข้อความ“ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์จัดเก็บข้อมูลได้”ระหว่างการส่งอีเมล หมายความว่าตัวแทนการส่ง (dagent) ไม่สามารถสร้างการเชื่อมต่อกับปลายทางเซิร์ฟเวอร์ Kopano ที่ได้รับมาได้ ข้อความดังกล่าวเพียงอย่างเดียวไม่ได้ระบุว่าสาเหตุเกิดจากเซิร์ฟเวอร์หยุดทำงาน เส้นทางซ็อกเก็ตไม่ถูกต้อง สิทธิ์การเข้าถึง หรือปัญหาการเชื่อมต่อระยะไกล เริ่มต้นด้วยการตรวจสอบปลายทางที่กำหนดค่าไว้และตัวเซิร์ฟเวอร์เอง หลีกเลี่ยงการเปลี่ยนแปลงข้อมูลกล่องจดหมายหรือพื้นที่จัดเก็บไฟล์แนบในขณะที่กำลังวินิจฉัยความล้มเหลวในการเชื่อมต่อ
เอกสารสำหรับผู้ดูแลระบบของ Kopano อธิบายว่า dagent เป็นส่วนประกอบที่ส่งอีเมลจากตัวแทนการขนส่งอีเมล (MTA) ไปยังผู้ใช้ Kopano เอกสารอ้างอิงการกำหนดค่า Kopano Core 8.0 ระบุว่าserver_socketให้ระบุการเชื่อมต่อกับเซิร์ฟเวอร์ Kopano และเอกสารfile:///var/run/kopano/server.sockระบุว่าเป็นค่าเริ่มต้น เวอร์ชันของแพ็กเกจ ตัวจัดการบริการ และการกำหนดค่าในเครื่องอาจแตกต่างกัน ดังนั้นโปรดตรวจสอบค่าต่างๆ บนโฮสต์ของคุณก่อนนำตัวอย่างไปใช้
คุณควรตรวจสอบอะไรก่อนเป็นอันดับแรก?
ตรวจสอบว่าข้อผิดพลาดส่งผลกระทบต่อผู้รับทุกคนหรือเฉพาะเส้นทางการส่งเพียงเส้นทางเดียว หากการส่งขาเข้าทั้งหมดล้มเหลวพร้อมกัน ให้ตรวจสอบความพร้อมใช้งานของเซิร์ฟเวอร์และปลายทาง หากมีเพียงข้อความที่ส่งผ่านโฮสต์หรือโหนดเดียวเท่านั้นที่ล้มเหลว ให้เปรียบเทียบdagent.cfgเส้นทางเครือข่ายของโหนดนั้นกับโหนดที่ทำงานได้ปกติ บันทึกข้อความหรือรายการคิวที่ล้มเหลวไว้ในระหว่างการทดสอบ การลองใหม่ซ้ำๆ อาจทำให้เวลาประทับแรกที่มีประโยชน์ในบันทึกไม่ชัดเจน
บนระบบที่ใช้ systemd ให้ตรวจสอบหน่วย Kopano และบันทึกเซิร์ฟเวอร์ในช่วงเวลาที่ทำการจัดส่ง:
systemctl list-units 'kopano*'
systemctl status kopano-server --no-pager
journalctl -u kopano-server -b --no-pager
หากแพ็กเกจของคุณตั้งชื่อหน่วยแตกต่างออกไป ให้ใช้ชื่อหน่วยที่แสดงโดยlist-unitsเซิร์ฟเวอร์ที่ไม่ทำงานหรือรีสตาร์ทซ้ำๆ บ่งชี้ถึงปัญหาฝั่งเซิร์ฟเวอร์ อ่านบันทึกการทำงานเพื่อหาข้อผิดพลาดในการเริ่มต้นระบบ ฐานข้อมูล การกำหนดค่า หรือพื้นที่จัดเก็บข้อมูลก่อนหน้านี้ การรีสตาร์ท dagent จะไม่สามารถแก้ไขเซิร์ฟเวอร์ Kopano ที่ไม่พร้อมใช้งานได้ คู่มือผู้ดูแลระบบจะอธิบายการจัดการบริการ Kopano แต่ชื่อหน่วยที่แน่นอนจะขึ้นอยู่กับแพ็กเกจ
dagent เชื่อมต่อกับซ็อกเก็ตเซิร์ฟเวอร์ที่ถูกต้องหรือไม่?
อ่านไฟล์การกำหนดค่าที่ใช้งานอยู่ ซึ่งโดยปกติ/etc/kopano/dagent.cfgคือ และค้นหาserver_socketรายการ:
grep -nE '^[[:space:]]*server_socket[[:space:]]*=' /etc/kopano/dagent.cfg
สำหรับซ็อกเก็ต Unix ในเครื่อง ให้เปรียบเทียบการตั้งค่ากับซ็อกเก็ตที่สร้างขึ้นจริงโดยเซิร์ฟเวอร์ที่กำลังทำงานอยู่ ค่าทั่วไปในเอกสาร Kopano Core คือ:
server_socket = file:///var/run/kopano/server.sock
ตรวจสอบว่าไฟล์มีอยู่จริงและเป็นไฟล์ซ็อกเก็ต:
ls -l /var/run/kopano/server.sock
test -S /var/run/kopano/server.sock && echo "Socket exists"
หากเส้นทางที่กำหนดค่าไว้และเส้นทางจริงแตกต่างกัน ให้แก้ไขserver_socketค่าให้ตรงกับปลายทางที่ระบบของคุณใช้งานโดยตั้งใจ อย่าคัดลอกค่าเริ่มต้นโดยไม่ตรวจสอบ หากเซิร์ฟเวอร์ถูกกำหนดค่าให้ใช้ไดเร็กทอรีรันไทม์อื่น ที่อยู่คลัสเตอร์ หรือการขนส่งระยะไกล เอกสารอ้างอิงของ Kopano ยังบันทึกการตั้งค่าคีย์ SSL สำหรับการขนส่ง HTTPS ด้วย ไวยากรณ์ปลายทางระยะไกลและข้อกำหนดใบรับรองควรตรงกับการกำหนดค่าเซิร์ฟเวอร์ที่ติดตั้งของคุณ
สิทธิ์การเข้าถึงซ็อกเก็ตอาจขัดขวางการเชื่อมต่อได้หรือไม่?
ใช่แล้ว ซ็อกเก็ตอาจมีอยู่แต่ผู้ใช้ที่รัน dagent ยังไม่สามารถเข้าถึงได้ ให้ค้นหาผู้ใช้กระบวนการที่มีผลจากหน่วยบริการหรือกระบวนการที่เกี่ยวข้อง จากนั้นตรวจสอบซ็อกเก็ตและไดเร็กทอรีแม่ทั้งหมด ตัวอย่างเช่น:
namei -l /var/run/kopano/server.sock
stat -c '%A %U:%G %n' /var/run/kopano/server.sock
เปรียบเทียบสิทธิ์การเป็นเจ้าของ กลุ่ม และการเข้าถึงไดเร็กทอรีกับข้อมูลประจำตัวขณะรันไทม์ของ dagent เอกสารอ้างอิงการกำหนดค่า dagent ของ Kopano ระบุว่าสามารถกำหนดค่าผู้ใช้และกลุ่มที่ใช้ในการรันได้ โดย Kopano เป็นค่าเริ่มต้นที่ระบุไว้ การจัดแพ็กเกจหรือการกำหนดค่าเพิ่มเติมอาจเปลี่ยนแปลงสิ่งนี้ได้ หากมีการใช้ systemd โปรดตรวจสอบหน่วยและค่าที่กำหนดไว้ก่อนที่จะเปลี่ยนความเป็นเจ้าของ:
systemctl cat kopano-dagent
systemctl show kopano-dagent -p User -p Group
ปรับสิทธิ์เฉพาะเพื่อให้บัญชีบริการที่ต้องการเข้าถึงข้อมูลที่จำเป็นเท่านั้น ห้ามใช้chmod 777กับซ็อกเก็ตหรือไดเร็กทอรีของซ็อกเก็ต เพราะอาจทำให้ปลายทางบริการที่มีสิทธิ์พิเศษถูกเปิดเผยต่อผู้ใช้ภายในเครื่องที่ไม่เกี่ยวข้อง ไดเร็กทอรีรันไทม์อาจถูกสร้างขึ้นใหม่เมื่อบูตเครื่อง ดังนั้นควรแก้ไขการกำหนดค่าบริการหรือแพ็กเกจที่สร้างไดเร็กทอรีเหล่านั้นแทนที่จะพึ่งพาการเปลี่ยนแปลงสิทธิ์ด้วยตนเองชั่วคราว
แล้วถ้าเซิร์ฟเวอร์อยู่บนโหนดอื่นล่ะ?
ในการตั้งค่าแบบหลายเซิร์ฟเวอร์หรือแบบความพร้อมใช้งานสูง ตรวจสอบให้แน่ใจว่า dagent ใช้คลัสเตอร์หรือที่อยู่เซิร์ฟเวอร์ที่สามารถเข้าถึงได้สำหรับโหนดของมัน คู่มือความพร้อมใช้งานสูงของ Kopano แสดงให้เห็นว่าปลายทางบริการและการกำหนดเส้นทางการส่ง Postfix ต้องได้รับการประสานงานระหว่างโหนดต่างๆ เปรียบเทียบserver_socketตัวรับฟังเซิร์ฟเวอร์ ที่อยู่ DNS หรือคลัสเตอร์ กฎไฟร์วอลล์ และการตั้งค่า TLS ใดๆ บนทั้งสองฝั่ง การเชื่อมต่อที่สำเร็จกับซ็อกเก็ตภายในเครื่องบนโหนดหนึ่งไม่ได้พิสูจน์ว่าปลายทางระยะไกลสามารถเข้าถึงได้จากอีกโหนดหนึ่ง
ทดสอบการเชื่อมต่อโดยใช้ปลายทางและเส้นทางเครือข่ายเดียวกันกับที่กำหนดค่าไว้สำหรับ dagent สำหรับการขนส่งระยะไกล ให้ตรวจสอบสถานะ Listener และนโยบายไฟร์วอลล์บนโฮสต์ Kopano จากนั้นตรวจสอบบันทึกของ dagent และเซิร์ฟเวอร์เพื่อหาการปฏิเสธการเชื่อมต่อ การหมดเวลา หรือข้อผิดพลาด TLS อย่าเปิด Listener ให้กับอินเทอร์เน็ตอย่างกว้างขวางเพื่อเป็นทางลัดในการแก้ไขปัญหา จำกัดการเข้าถึงเฉพาะโฮสต์อีเมลและแอปพลิเคชันที่เชื่อถือได้เท่านั้น
คุณจะทดสอบการจัดส่งโดยไม่ต้องเปลี่ยนแปลงขั้นตอนการส่งอีเมลในระบบการผลิตได้อย่างไร?
หลังจากที่เซิร์ฟเวอร์ทำงานและปลายทางและสิทธิ์การเข้าถึงตรงกันแล้ว ให้ทำการทดสอบแบบควบคุมโดยใช้กล่องจดหมายทดสอบที่กำหนดไว้ คู่มือผู้ดูแลระบบ Kopano ระบุวิธีการเรียกใช้ dagent โดยตรงด้วยผู้ใช้บนโหนดนั้น จากนั้นป้อนหัวเรื่องและเนื้อหาข้อความ รูปแบบการทดสอบพื้นฐานมีดังนี้:
kopano-dagent -v -c /etc/kopano/dagent.cfg testuser
Subject: Kopano connection test
This is a controlled delivery test.
[Press Ctrl-D to finish input]
แทนที่testuserด้วยผู้ใช้ Kopano ในเครื่องที่มีอยู่แล้ว และปฏิบัติตามไวยากรณ์คำสั่งของเวอร์ชันที่ติดตั้งไว้ การทดสอบนี้จะข้ามการกำหนดเส้นทางและการทำงานของคิว MTA บางส่วน การส่งตรงที่สำเร็จจะยืนยันส่วนที่มีประโยชน์ของเส้นทาง แต่ไม่ได้พิสูจน์ว่า Postfix หรือ MTA อื่น ๆ กำลังกำหนดเส้นทางอีเมลอย่างถูกต้อง ตรวจสอบเอาต์พุตของ dagent บันทึกของ Kopano และกล่องจดหมายทดสอบก่อนที่จะลองส่งข้อความที่อยู่ในคิวของระบบการผลิตอีกครั้ง
คุณควรเริ่มบริการใหม่เมื่อใด?
เริ่มใหม่เฉพาะส่วนประกอบที่มีการเปลี่ยนแปลงการกำหนดค่าเท่านั้น และหลังจากบันทึกสำเนาการกำหนดค่าที่ใช้งานได้แล้ว หากคุณเปลี่ยนแปลงdagent.cfgให้เริ่มใหม่หน่วย dagent เมื่อการติดตั้งของคุณเรียกใช้ dagent เป็นบริการแบบถาวร การติดตั้งบางอย่างจะเรียกใช้ dagent สำหรับการส่งมอบแต่ละครั้ง ดังนั้นอาจไม่มีหน่วย dagent ที่ทำงานต่อเนื่องให้เริ่มใหม่ หากคุณเปลี่ยนแปลงserver.cfgการตั้งค่าซ็อกเก็ตหรือตัวรับฟังเซิร์ฟเวอร์ ให้ปฏิบัติตามขั้นตอนการเปลี่ยนแปลงของไซต์ของคุณสำหรับ Kopano Server แทน เอกสารอ้างอิงของ dagent ระบุเฉพาะตัวเลือกที่เลือกไว้เท่านั้นที่สามารถโหลดใหม่ได้โดย HUP อย่าคิดว่าการเปลี่ยนแปลงซ็อกเก็ตหรือข้อมูลประจำตัวรันไทม์ทุกอย่างจะมีผลผ่านสัญญาณ
คุณจะยืนยันการแก้ไขปัญหาได้อย่างไร?
โปรดตรวจสอบข้อมูลทั้งหมดต่อไปนี้ก่อนปิดรายงานเหตุการณ์:
- เซิร์ฟเวอร์ Kopano ยังคงทำงานได้ตามปกติโดยไม่มีข้อผิดพลาดเกี่ยวกับการเชื่อมต่อใหม่ ๆ ปรากฏในบันทึก
- ปลายทางที่กำหนดค่าไว้ใน dagent จะตรงกับซ็อกเก็ตที่ใช้งานอยู่หรือผู้รับฟังระยะไกลที่ต้องการ
- ผู้ใช้รันไทม์ของ dagent สามารถสำรวจไดเร็กทอรีหลักของซ็อกเก็ตและเข้าถึงเอนด์พอยต์ได้
- ข้อความทดสอบที่ควบคุมไว้ส่งไปถึงกล่องจดหมายเป้าหมาย และบันทึกการทำงานไม่แสดงความล้มเหลวในการเชื่อมต่อกับเซิร์ฟเวอร์จัดเก็บข้อมูล
- ข้อความขาเข้าใหม่ที่ส่งผ่านเส้นทาง MTA ปกติจะได้รับการยอมรับและส่งถึงปลายทางแล้ว คิว MTA จะไม่สะสมข้อผิดพลาดเดิมซ้ำอีก
หากการจัดส่งโดยตรงใช้งานได้ แต่การส่งอีเมลผ่าน MTA ยังคงล้มเหลว ให้ตรวจสอบการขนส่ง LMTP เส้นทางซ็อกเก็ต และการกำหนดเส้นทางของ MTA แทนที่จะเปลี่ยนพื้นที่จัดเก็บกล่องจดหมายของ Kopano หากเซิร์ฟเวอร์และปลายทางตรวจสอบแล้วใช้งานได้ แต่ dagent ยังคงรายงานว่าการเชื่อมต่อล้มเหลว ให้รวบรวมเวลาที่ตรงกันserver_socketค่าที่ถูกกรองแล้ว สถานะบริการ และบันทึกที่เกี่ยวข้องสำหรับผู้ดูแลแพ็กเกจหรือผู้ดูแลระบบ Kopano ของคุณ ลบข้อมูลรหัสผ่าน คีย์ส่วนตัว เนื้อหาข้อความ และที่อยู่ส่วนบุคคลก่อนที่จะแบ่งปันข้อมูลการวินิจฉัย
เอกสารอ้างอิง: คู่มือผู้ดูแลระบบ Kopano Core ; คู่มือการกำหนดค่า dagent ของ Kopano ; คู่มือการใช้งานระบบความพร้อมใช้งานสูงของ Kopano ; การกำหนดค่าพิเศษและการแก้ไขปัญหาของ Kopano