2012-06-22 28 views
5

Tôi đang cố gắng để có được mongodb bắt đầu trên một máy NUMA như một daemon. Khi tôi chạybắt đầu mongodb thông qua numactl như daemon

numactl --interleave=all mongod & 

Mongo bắt đầu và chạy đúng cách, nhưng tất cả đầu ra vẫn hiển thị. (ví dụ, kết nối Fri Jun 22 12:10:29 [initandlisten] được chấp nhận từ 127.0.1.1 WEBC1837)

Tuy nhiên, khi tôi bắt đầu mong muốn (như dưới đây), nó không thành công (nhật ký bên dưới):

service mongodb start 

tôi nhận được sau đây trong các bản ghi

Fri Jun 22 12:08:41 [initandlisten] MongoDB starting : pid=3348 port=27017 dbpath=/var/lib/mongodb 64-bit host=beckett 
Fri Jun 22 12:08:41 [initandlisten] 
Fri Jun 22 12:08:41 [initandlisten] ** WARNING: You are running on a NUMA machine. 
Fri Jun 22 12:08:41 [initandlisten] **   We suggest launching mongod like this to avoid performance problems: 
Fri Jun 22 12:08:41 [initandlisten] **    numactl --interleave=all mongod [other options] 
Fri Jun 22 12:08:41 [initandlisten] 
Fri Jun 22 12:08:41 [initandlisten] db version v2.0.6, pdfile version 4.5 
Fri Jun 22 12:08:41 [initandlisten] git version: e1c0cbc25863f6356aa4e31375add7bb49fb05bc 
Fri Jun 22 12:08:41 [initandlisten] build info: Linux ip-10-110-9-236 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41 
Fri Jun 22 12:08:41 [initandlisten] options: { auth: "true", command: [ "run" ], config: "/etc/mongodb.conf", dbpath: "/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" } 
Fri Jun 22 12:08:41 [initandlisten] journal dir=/var/lib/mongodb/journal 
Fri Jun 22 12:08:41 [initandlisten] recover : no journal files present, no recovery needed 
Fri Jun 22 12:08:42 [initandlisten] couldn't open /var/lib/mongodb/admin.ns errno:13 Permission denied 
Fri Jun 22 12:08:42 [initandlisten] error couldn't open file /var/lib/mongodb/admin.ns terminating 
Fri Jun 22 12:08:42 dbexit: 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to close listening sockets... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to flush diaglog... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to close sockets... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: waiting for fs preallocator... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: lock for final commit... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: final commit... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: closing all files... 
Fri Jun 22 12:08:42 [initandlisten] closeAllFiles() finished 
Fri Jun 22 12:08:42 [initandlisten] journalCleanup... 
Fri Jun 22 12:08:42 [initandlisten] removeJournalFiles 
Fri Jun 22 12:08:42 [initandlisten] shutdown: removing fs lock... 
Fri Jun 22 12:08:42 dbexit: really exiting now 

tôi không biết làm thế nào admin.ns có thể có một vấn đề cho phép trong khi tôi đang chạy bằng root hoặc lý do tại sao khi được bọc trong numactl nó khởi động ok . Lý tưởng nhất, tôi muốn sử dụng numactl trong start_server function() như sau:

start_server(){ 
    /usr/bin/numactl --interleave=all -- \ 
    start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ 
     --make-pidfile --chuid $DAEMONUSER \ 
     --exec $DAEMON -- $DAEMON_OPTS 
    errcode=$? 
    return $errcode 
} 

Bottom line, làm thế nào tôi có thể nhận Mongo để bắt đầu như một daemon trên một máy NUMA?

+0

Xem thêm http://unix.stackexchange.com/questions/ 187474 /, có tính đến một số thay đổi đối với gói MongoDB trong những năm gần đây. – JdeBP

Trả lời

5

Hóa ra vấn đề của tôi là sự kết hợp của các vấn đề NUMA và cho phép. Cảm ơn, @Mark cho sự giúp đỡ. Để bắt đầu MongoDB như một daemon trên một thiết lập NUMA, thay thế các chức năng start_server() trong /etc/init.d/mongodb như sau:

start_server() { 
# check for numactl 
NUMACTL=$(which numactl) 
if [ -n "$NUMACTL" ]; then 
    DAEMON_OPTS="--interleave=all ${DAEMON} ${DAEMON_OPTS}" 
    DAEMON="$NUMACTL" 
fi 

# Start the process using the wrapper 
      /usr/bin/numactl --interleave=all -- \ 
      start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ 
         --make-pidfile --chuid $DAEMONUSER \ 
         --exec $DAEMON -- $DAEMON_OPTS 
      errcode=$? 
     return $errcode 
} 
+0

I ' m không chạy hệ thống AFAIK NUMA vì vậy đây có thể là chủ đề cho OP, nhưng trong trường hợp nó hữu ích cho bất kỳ ai ... trên Ubuntu ít nhất, quyền sở hữu tất cả các tệp trong thư mục dữ liệu của MongoDB (trên Ubuntu thư mục dữ liệu mặc định Bằng cách nào đó, tôi đã được đặt thành root: root (có lẽ vì tôi đã chạy mongod thủ công để kiểm tra một cái gì đó), thay đổi quyền sở hữu đã thực hiện 'sudo start mongodb' (và' sudo service start mongodb ') làm việc chính xác một lần nữa –

+0

Vì vậy, đây là lệnh cố định nó cho tôi:' sudo chown -R mongodb: nogroup/var/lib/mongodb/* 'Lưu ý rằng/var/lib/mongodb là cài đặt mặc định của Ubuntu và có thể không phải là thiết lập cho các bản phân phối khác, dữ liệu mặc định của MongoDB dir i s/data/db. –

3

Tôi cho rằng bạn biết các cảnh báo thông thường (http://www.mongodb.org/display/DOCS/NUMA) về 'mongo & numa' vì vậy tôi sẽ không nói về chúng.

Đây là tệp cấu hình khởi động mẫu cho mongodb với numa - https://gist.github.com/1364716.

Dựa trên Google Group thread này, những dòng sau đã được thêm vào chức năng start_server trong init script và nó đã thành công -

start_server() { 
# check for numactl 
NUMACTL=$(which numactl) 
if [ -n "$NUMACTL" ]; then 
    DAEMON_OPTS="--interleave=all ${DAEMON} ${DAEMON_OPTS}" 
    DAEMON="$NUMACTL" 
fi 

# Start the process using the wrapper 
+0

Đó là Nhóm nơi tôi tìm thấy hàm start_service trong bài viết của mình, nhưng tôi nhận được "không thể mở/var/lib/mongodb/admin.ns errno: 13 Quyền bị từ chối "lỗi khi tôi thử" dịch vụ mongodb bắt đầu "với" kiểm tra cho numactl "và" bắt đầu quá trình bằng cách sử dụng các wrapper "mã bit bao gồm. – Libby

+0

Cool, tốt để nghe nó tất cả làm việc :) –

0

hai giải pháp trên đã không làm việc đối với tôi, vì vậy đây sau những gì có MongoDB tôi chạy:

thay thế start_server() chức năng trong /etc/init.d/mongodb cho mã bên dưới

start_server() { 
    test -e "$RUNDIR" || install -m 755 -o mongodb -g mongodb -d "$RUNDIR" 

    NUMACTL=$(which numactl) 

    if [ ! "$NUMACTL" ]; then 
     # start original 
     start-stop-daemon --background --start --quiet --pidfile $PIDFILE --make-pidfile --chuid $DAEMONUSER --exec $DAEMON -- $DAEMON_OPTS 
     errcode=$? 
     return $errcode 
    else 
     # Start the process using the wrapper 
     $NUMACTL --interleave=all -- start-stop-daemon --background --start --quiet --pidfile $PIDFILE --make-pidfile --chuid $DAEMONUSER --exec $DAEMON -- $DAEMON_OPTS 
     errcode=$? 
     return $errcode 
    fi 
} 
0

cho ubuntu 14

# apt-get -y install numactl 

thêm vào /etc/sysctl.conf dòng vm.zone_reclaim_mode = 0

# sysctl -p

# service mongod restart

1

cho ubuntu 16,04

[Unit] 
Description=High-performance, schema-free document-oriented database 
After=time-sync.target network.target 

[Service] 
Type=forking 
User=mongod 
Group=mongod 
LimitNOFILE=65000 
PermissionsStartOnly=true 
EnvironmentFile=/etc/default/mongod 
ExecStartPre=/usr/bin/percona-server-mongodb-helper.sh 
ExecStart=/usr/bin/env bash -c "numactl --interleave=all /usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}" 
#ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}" 
PIDFile=/var/run/mongod.pid 

[Install] 
WantedBy=multi-user.target 
Các vấn đề liên quan