Bài viết này sẽ hướng dẫn mọi người cách xác định các vấn đề về cơ sở dữ liệu (database) và cách khắc phục sự cố cơ sở dữ liệu unifi trên ứng dụng UniFi Network.
Lưu ý: Bài viết này bao gồm các hướng dẫn yêu cầu sử dụng máy khách SSH như PuTTY hoặc native Linux/macOS terminal.
Các biểu hiện cho thấy cơ sở dữ liệu có vấn đề
- Các thống kê không được report trong khoảng thời gian lưu giữ dữ liệu. Thông thường, số liệu thống kê sẽ chỉ được ghi lại trong một vài ngày và sau đó bị xóa đi hoặc ghi lại một cách gián đoạn, không liên tục.
- Không thể tạo bản sao lưu, bao gồm số liệu thống kê (7 ngày, 30 ngày, v.v.).
- Nếu quá trình settings-only backup không thể hoàn tất, nó có thể bị gặp vấn đề gì đó trong cơ sở dữ liệu hoặc vấn đề nào đó không liên quan.
- Gặp lỗi 400 error khi cố gắng mở ứng dụng UniFi Network.
- Dịch vụ ứng dụng mạng không thể khởi động do lỗi database.
Mẹo người dùng:
Tổng dữ liệu không nhất thiết phải vượt quá 2GB trên UC-CK vì nó chỉ cần dung lượng đủ lớn để Mongo có thể triển khai. Các máy 64-bit sẽ không bị ảnh hưởng bởi giới hạn MongoDB, tuy nhiên có thể có các vấn đề về dung lượng tổng thể trên máy chủ lưu trữ gây ra sự cố khi khắc phục sự cố cơ sở dữ liệu. Kiểm tra điều này với df -h trong phiên SSH để xem liệu phân vùng ổ cứng nơi mà UniFi đang lưu trữ dữ liệu có đang bị thiếu dung lượng hay không.
Hạn chế của MongoDB 32-bit
MongoDB 32-bit Collection có giới hạn tổng kích thước là 2GB. Điều này có thể gây ra sự cố khi cố thu nhỏ kích thước collection tổng hợp khi chạy công cụ lưu trữ MMAPv1. Khi chạy một lệnh compact trên MongoDB, cơ sở dữ liệu được viết lại và chống phân mảnh mà không cần sửa lỗi. Quá trình này không trả lại dung lượng đĩa có thể sử dụng được cho UniFi OS Console (hoặc máy chủ ứng dụng Mạng khác) khi công cụ lưu trữ là MMAPv1.
Việc lấy lại không gian đĩa có giá trị đó trên phiên bản MongoDB 32-bit sẽ yêu cầu sửa chữa cơ sở dữ liệu. Việc sửa chữa này có thể cần thiết đối với những người đang nghi ngờ các mục nhập không hợp lệ hoặc các vấn đề về quy mô của collection.
Để có thể chạy khắc phục sự cố cơ sở dữ liệu, Cloud Key sẽ phải có đủ dung lượng đĩa trống và bằng với kích thước của tập dữ liệu hiện tại cộng với 2 gigabyte. Nếu tập dữ liệu đã quá lớn để tiếp tục với lệnh db.repairDatabase (), bạn có thể tham khảo các hướng dẫn bên dưới để giải quyết vấn đề đó.
Lưu ý: UniFi Cloud Key (UC-CK) sử dụng:
- 32-Bit architecture
- MMAPv1
- MongoDB Version 2.4.10
Cách khắc phục sự cố cơ sở dữ liệu UniFi trên Cloud Key
- Tải xuống mongo pruning script. Như đã viết, script sẽ chỉ giữ lại các mục từ 7 ngày qua và nó sẽ không xóa các mục nhập cần thiết cho việc quản trị UniFi. Bạn có thể tải bằng cách chạy lệnh sau:
cd /tmp/
wget https://help.ui.com/hc/en-us/article_attachments/360008640574/CK_repair.js
- cho dừng dịch vụ UniFi Service
service unifi stop
- UniFi Service sẽ tắt quá trình mongo. Hãy đảm bảo rằng UniFi service đã được tắt hoàn toàn. Việc khắc phục sự cố cơ sở dữ liệu để thu gọn các mục nhập dữ liệu và trường không gian đĩa trống không sử dụng là một tiêu chí truy vấn.
mongod –dbpath /usr/lib/unifi/data/db –smallfiles –logpath /usr/lib/unifi/logs/server.log –repair
Lưu ý: Các bước 4-7 là tùy chọn nếu bạn cần cắt bớt cơ sở dữ liệu để tiết kiệm dung lượng cho ổ đĩa.
- Khởi động lại mongo bằng lệnh này:
mongod –dbpath /usr/lib/unifi/data/db –smallfiles –logpath /usr/lib/unifi/logs/server.log –journal –fork
Lưu ý: Tính năng ghi nhật ký có thể chưa được bật trong cơ sở dữ liệu mongo của bạn. Nếu nó chưa được bật, hãy xóa tùy chọn –journal trong lệnh trên.
- Chạy script để lược bỏ bớt các thống kê collection đang gây ra sự cố:
mongo < /tmp/CK_repair.js
- Tắt mongo server bằng lệnh này:
mongod –dbpath /usr/lib/unifi/data/db –smallfiles –logpath /usr/lib/unifi/logs/server.log –shutdown
Lưu ý: Lệnh cuối cùng trong CK_repair.js script là “db.repairDatabase ()”. Nó có thể dẫn đến lỗi nếu stats collections (bộ sưu tập các thống kê) đã quá lớn để được khắc phục sự cố trong khi máy chủ mongo đang chạy. Nếu bạn gặp lỗi như vậy khi chạy script thì bạn sẽ cần phải sửa chữa cơ sở dữ liệu từ dòng lệnh một lần nữa bằng cách chạy lệnh ở bước 3.
- Cuối cùng, khởi động lại UniFi Service:
service unifi start
Cloud Key bây giờ sẽ có thể chạy ứng dụng Network. Nếu bạn vẫn gặp sự cố về cơ sở dữ liệu, vui lòng liên hệ với bộ phận Hỗ trợ của Ubiquiti.
Cách khắc phục sự cố cơ sở dữ liệu trên Debian Linux
- cho dừng dịch vụ UniFi Service
service unifi stop
- Trong một số trường hợp journal (nhật ký) bị hỏng thì bạn nên chạy lệnh sau trước khi khắc phục sự cố cơ sở dữ liệu để di chuyển nó đến một vị trí khác:
mv -vi /usr/lib/unifi/data/db/journal /usr/lib/unifi/data/db/journal-$(date -I)
- khắc phục sự cố cơ sở dữ liệu bằng lệnh này:
mongod –dbpath /usr/lib/unifi/data/db –smallfiles –logpath /usr/lib/unifi/logs/server.log –repair
- Cuối cùng, khởi động lại UniFi Service:
service unifi start
Lưu ý: Nếu quá trình này được thực hiện dưới dạng root thì quyền sở hữu tệp có thể đã thay đổi. Điều này có thể được thay đổi bằng:
chown -R unifi:unifi /usr/lib/unifi/data/db/
chown -R unifi:unifi /usr/lib/unifi/logs/server.log
Nếu bạn vẫn nghi ngờ sự cố cơ sở dữ liệu, vui lòng liên hệ với Bộ phận hỗ trợ của Ubiquiti.
Cách khắc phục sự cố cơ sở dữ liệu UniFi trên macOS
- Tạo một thư mục tạm thời (temporary working directory). Đối với mục đích khắc phục sự cố, chúng tôi sẽ gọi directory /repair. Trong terminal:
mkdir ~/repair
- Tải xuống MongoDB: Trình cài đặt macOS UniFi không bao gồm nhị phân mongo. Truy cập trang web tải xuống chính thức MongoDB và tải xuống bản phát hành .tgz tương ứng với kiến trúc CPU của máy chủ của bạn. Phiên bản được đề xuất tải là 2.4.14.
- Giải nén Mongo: Di chuyển gói đã tải xuống vào thư mục working directory của bạn và giải nén nó bằng cách nhấp đúp vào nó hoặc sử dụng ứng dụng.
- Di chuyển Mongo đến thư mục working directory: xác định vị trí tệp nhị phân bin/mongo và sao chép nó vào thư mục working directory của bạn. Tại thời điểm này, gói .tgz đã tải xuống và bất kỳ tệp trích xuất bổ sung đều có thể bị xóa vì chúng tôi chỉ cần tệp nhị phân mongo.
- Terminal và các lệnh: Mở Terminal và chuyển đến thư mục working directory
cd ~/repair
- Close/Stop (đóng/dừng) UniFi.
- khắc phục sự cố cơ sở dữ liệu Mongo:
mongod –dbpath ~/Library/Application\ Support/UniFi/data/db –smallfiles –logpath ~/Library/Application\ Support/UniFi/logs/server.log –repair
- Mở ứng dụng UniFi từ Finder:
open -n /Applications/UniFi.app
Nếu bạn vẫn nghi ngờ sự cố cơ sở dữ liệu, vui lòng liên hệ với Bộ phận hỗ trợ của Ubiquiti.
Cách sửa chữa cơ sở dữ liệu UniFi trên Windows
- Tải xuống MongoDB: Trình cài đặt Windows UniFi không bao gồm nhị phân mongo. Truy cập trang web tải xuống chính thức MongoDB và tải xuống bản phát hành .zip tương ứng với kiến trúc CPU của bạn.
Lưu ý: Phiên bản MongoDB được đề xuất là 3.4.x. 2.
- Giải nén Mongod.exe: Giải nén\bin\mongod.exe vào một thư mục làm việc mà bạn chọn. Trong ví dụ này, chúng tôi sẽ sử dụng C: \ sửa chữa \ Bạn có thể bỏ qua tất cả các tệp khác có trong .zip.
- Close/Stop (Đóng/dừng) UniFi
- Mở Command Prompt: Nhấn WINDOWS + R. Trong cửa sổ bật lên, nhập cmd và nhấn ENTER.
- Nhập thư mục Working Directory
cd C:\repair\
- Close/Stop (đóng/dừng) UniFi.
- khắc phục sự cố cơ sở dữ liệu Mongo
mongod.exe –dbpath “%userprofile%\Ubiquiti UniFi\data\db” –smallfiles –logpath “%programfiles%\Ubiquiti UniFi\logs\server.log” –repair
- Mở ứng dụng UniFi
Nếu bạn vẫn nghi ngờ sự cố cơ sở dữ liệu, vui lòng liên hệ với Bộ phận hỗ trợ của Ubiquiti.
Cách chuyển từ MMAPv1 sang WiredTiger
Lưu ý: Phần này không áp dụng cho các máy chủ 32-bit bao gồm UC-CK G1.
Sau khi ứng dụng Network hoạt động trở lại, người dùng có thể muốn di chuyển nó sang công cụ lưu trữ WiredTiger.
Để xác minh dung lượng được sử dụng, hãy chạy lệnh sau:
du -shc /usr/lib/unifi/data/db/ace* /usr/lib/unifi/data/db/journal/* /usr/lib/unifi/data/db/local* | grep total
Để xác minh phiên bản MongoDB nào đang được sử dụng, hãy chạy như sau:
mongod –version | grep “db version”
Để xác minh phiên bản công cụ lưu trữ nào đang được sử dụng, hãy chạy hai lệnh sau:
mongo localhost:27117
db.serverStatus().storageEngine.name
Cách di chuyển sang WiredTiger
- Tạo bản sao lưu trong Settings > Maintenance > Backup với các cài đặt lưu giữ mong muốn.
- Gỡ cài đặt UniFi khỏi Windows hoặc macOS. Xóa UniFi khỏi Linux Debian bằng lệnh:
sudo dpkg -P unifi
- Cài đặt lại UniFi trên Windows hoặc macOS. Cài đặt lại UniFi trên Linux dựa trên Debian bằng các lệnh:
cd /tmp/
wget <https link to download>
sudo dpkg -i unifi_sysvinit_all.deb
- Trong UniFi Setup Wizard, restore bản sao lưu từ bước 1.
Vừa rồi là những hướng dẫn về cách khắc phục sự cố với cơ sở dữ liệu ứng dụng UniFi trên các hệ điều hành. Mọi thắc mắc bạn có thể liên hệ hỗ trợ qua
Hỗ Trợ Kỹ Thuật: 028-7300-2222
Số máy lẻ (Ext): 89777 Hoặc 8654