2013-09-04 46 views

Trả lời

101

Giới thiệu

Do những hạn chế môi trường đặc biệt của máy chủ Webfaction hướng dẫn cài đặt là không đơn giản như họ sẽ. Tuy nhiên vào cuối bạn sẽ có một máy chủ Redis đầy đủ chức năng mà vẫn lên ngay cả sau khi khởi động lại. Cá nhân tôi cài đặt Redis theo quy trình sau khoảng nửa năm trước và nó đã hoạt động hoàn hảo kể từ đó. Một từ nhỏ của một cảnh báo mặc dù, nửa năm không phải là một thời gian dài, đặc biệt là bởi vì các máy chủ đã không được sử dụng nặng.

Hướng dẫn bao gồm năm phần: Cài đặt, Thử nghiệm, Khởi động Máy chủ, Quản lý máy chủ và Giữ Máy chủ đang chạy.

Lắp đặt

Đăng nhập vào của bạn Webfaction vỏ

ssh [email protected] 

Tải mới nhất Redis từ Redis download site.

> mkdir -p ~/src/ 
> cd ~/src/ 
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz 
> tar -xzf redis-2.6.16.tar.gz 
> cd redis-2.6.16/ 

Trước khi thực hiện, hãy xem máy chủ của bạn là Linux 32 hoặc 64 bit. Kịch bản cài đặt không xử lý tốt môi trường 32 bit, at least on Webfaction's CentOS 5 machines. Lệnh cho bit là uname -m. Nếu Linux là 32 bit thì kết quả sẽ là i686, nếu 64 bit sau đó x86_64. Xem chi tiết answer để biết chi tiết.

> uname -m 
i686 

Nếu máy chủ của bạn 64 bit (x86_64) thì chỉ cần thực hiện.

> make 

Nhưng nếu máy chủ của bạn là 32 bit (i686) thì bạn phải thực hiện thêm một số nội dung. Có một lệnh make 32bit nhưng nó tạo ra một lỗi. Chỉnh sửa một dòng trong tập lệnh cài đặt để làm cho make 32bit hoạt động.

> nano ~/src/redis-2.6.16/src/Makefile 

Thay đổi dòng 214 từ này

$(MAKE) CFLAGS="-m32" LDFLAGS="-m32" 

này

$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686" 

và lưu lại. Sau đó chạy lệnh make with 32bit flag.

> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/ 
> make 32bit 

Thực thi được tạo thành thư mục ~/src/redis-2.6.16/src/. Các tệp thi hành bao gồm redis-cli, redis-server, redis-benchmarkredis-sentinel.

Testing (không bắt buộc)

Là kết quả của quá trình cài đặt gợi ý, nó sẽ được tốt đẹp để đảm bảo rằng mọi thứ hoạt động như mong đợi bằng cách chạy kiểm tra.

Hint: To run 'make test' is a good idea ;) 

Thật không may, thử nghiệm yêu cầu cài đặt tlc8.6.0 không phải là mặc định ít nhất trên máy web223. Vì vậy, bạn phải cài đặt nó trước, từ nguồn.Xem Tcl/Tk installation notescompiling notes.

> cd ~/src/ 
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz 
> tar -xzf tcl8.6.0-src.tar.gz 
> cd tcl8.6.0-src/unix/ 
> ./configure --prefix=$HOME 
> make 
> make test # Optional, see notes below 
> make install 

Kiểm tra Tcl với make test sẽ mất thời gian và cũng sẽ thất bại do hạn chế về môi trường của WebFaction. Tôi đề nghị bạn bỏ qua điều này.

Bây giờ chúng tôi đã cài đặt Tlc, chúng tôi có thể chạy thử nghiệm Redis. Các thử nghiệm sẽ mất một thời gian dài và cũng tạm thời sử dụng một lượng bộ nhớ khá lớn.

> cd ~/src/redis-2.6.16/ 
> make test 

Sau khi kiểm tra bạn đã sẵn sàng tiếp tục.

Bắt đầu từ Server

Đầu tiên, tạo một ứng dụng tùy chỉnh thông qua Webfaction Control Panel (Custom ứng dụng (nghe trên cổng)). Đặt tên cho ví dụ là fooredis. Lưu ý rằng bạn không phải tạo miền hoặc trang web cho ứng dụng nếu Redis chỉ được sử dụng cục bộ tức là từ cùng một máy chủ.

Thứ hai, ghi chú về số cổng cổng đã được cung cấp cho ứng dụng. Ví dụ: .

Sao chép tệp thi hành được biên dịch trước đó vào thư mục của ứng dụng. Bạn có thể chọn sao chép tất cả hoặc chỉ những cái bạn cần.

> cd ~/webapps/fooredis/ 
> cp ~/src/redis-2.6.16/src/redis-server . 
> cp ~/src/redis-2.6.16/src/redis-cli . 

Sao chép tệp cấu hình mẫu. Bạn sẽ sớm sửa đổi điều đó.

> cp ~/src/redis-2.6.16/redis.conf . 

Hiện tại Redis đã được chạy. Có vài vấn đề mặc dù. Đầu tiên, cổng Redis mặc định 6379 có thể đã được sử dụng. Thứ hai, ngay cả khi cổng được miễn phí, có, bạn có thể khởi động máy chủ nhưng nó dừng chạy cùng lúc khi bạn thoát khỏi trình bao. Đối với redis.conf đầu tiên phải được chỉnh sửa và thứ hai, bạn cần một daemon cũng được giải quyết bằng cách chỉnh sửa redis.conf.

Redis có thể tự chạy trong the daemon mode. Cho rằng bạn cần phải thiết lập một nơi mà daemon lưu trữ các id quá trình của nó, PID. Thông thường pidfiles được lưu trữ trong/var/run/nhưng vì các hạn chế về môi trường, bạn phải chọn một vị trí cho chúng trong thư mục chính của bạn. Vì một lý do được giải thích sau trong phần Quản lý máy chủ, một lựa chọn tốt là đặt pidfile dưới cùng thư mục với các tệp thi hành. Bạn không phải tự tạo tệp, Redis tự động tạo tệp cho bạn.

Bây giờ hãy mở tệp redis.conf để chỉnh sửa.

> cd ~/webapps/fooredis/ 
> nano redis.conf 

Thay đổi cấu hình theo cách sau.

  • daemonize no ->daemonize yes
  • pidfile /var/run/redis.pid ->pidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379 ->port 23015

Bây giờ cuối cùng, khởi động máy chủ Redis. Chỉ định tệp conf để Redis nghe đúng cổng và chạy dưới dạng daemon.

> cd ~/webapps/fooredis/ 
> ./redis-server redis.conf 
> 

Xem nó đang chạy.

> cd ~/webapps/fooredis/ 
> ./redis-cli -p 23015 
redis 127.0.0.1:23015> SET myfeeling Phew. 
OK 
redis 127.0.0.1:23015> GET myfeeling 
"Phew." 
redis 127.0.0.1:23015> (ctrl-d) 
> 

Dừng máy chủ nếu bạn muốn.

> ps -u $USER -o pid,command | grep redis 
    718 grep redis 
10735 ./redis-server redis.conf 
> kill 10735 

hoặc

> cat redis.pid | xargs kill 

Quản lý Server

Đối với sự dễ dàng sử dụng và như là một công việc chuẩn bị cho các phần tiếp theo, làm cho một kịch bản giúp để mở client và bắt đầu, khởi động lại và dừng máy chủ. Một giải pháp dễ dàng là viết một makefile. Khi viết một makefile, hãy nhớ sử dụng các tab thay vì dấu cách.

> cd ~/webapps/fooredis/ 
> nano Makefile 

# Redis Makefile 
client cli: 
    ./redis-cli -p 23015 

start restart: 
    ./redis-server redis.conf 

stop: 
    cat redis.pid | xargs kill 

Quy tắc khá tự giải thích. Đặc biệt về quy tắc thứ hai là trong khi ở chế độ daemon, gọi ./redis-server không tạo ra một tiến trình mới nếu có một tiến trình đang chạy.

Quy tắc thứ ba có một số sự khôn ngoan trong đó. Nếu redis.pid không được lưu trữ trong thư mục fooredis, nhưng ví dụ: /var/run/redis.pid thì sẽ không dễ dàng như vậy khi dừng máy chủ. Điều này đặc biệt đúng nếu bạn chạy đồng thời nhiều Redis.

Để thực hiện một quy tắc:

> make start 

Giữ Server Chạy

Bây giờ bạn có một thể hiện của Redis chạy trong chế độ daemon cho phép bạn bỏ vỏ mà không dừng lại nó. Điều này vẫn chưa đủ. Điều gì sẽ xảy ra nếu quá trình này bị treo? Điều gì sẽ xảy ra nếu máy chủ được khởi động lại? Để trang trải những điều này, bạn phải tạo hai số cronjobs.

> export EDITOR=nano 
> crontab -e 

Thêm hai dòng sau và lưu.

*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start 
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start 

Đầu tiên đảm bảo mỗi năm phút fooredis đang chạy. Như đã nói ở trên, điều này không bắt đầu quá trình mới nếu một tiến trình đang chạy. Cách thứ hai đảm bảo rằng fooredis được bắt đầu ngay lập tức sau khi khởi động lại máy chủ và lâu trước khi quy tắc đầu tiên bắt đầu.

Một số phương pháp khác có thể được sử dụng, ví dụ forever. Xem thêm điều này Webfaction Community thread để biết thêm về chủ đề.

Kết luận

Bây giờ bạn có nó. Rất nhiều việc đã làm nhưng có thể sẽ còn nhiều hơn nữa. Những điều bạn có thể muốn làm trong tương lai không được đề cập ở đây bao gồm những điều sau đây.

  • Đặt mật khẩu, ngăn người dùng khác xóa cơ sở dữ liệu của bạn. (Xem redis.conf)
  • Hạn chế sử dụng bộ nhớ (Xem redis.conf)
  • Logging việc sử dụng và các lỗi (Xem redis.conf)
  • Backupping dữ liệu một lần trong một thời gian.

Bất kỳ ý tưởng, nhận xét hoặc chỉnh sửa nào?

+4

Life-saver !!!!!!!!!! – cyberjoac

+3

Bravo! Một trong những câu trả lời hay nhất về SO mà tôi đã thấy, thời gian! – Nate

+1

Cảm ơn! Tôi đồng ý rằng đó là một trong những hướng dẫn tốt nhất tôi đã nhìn thấy trên SO – thebeagle

1

FYI, nếu bạn đang cài đặt redis 2.8.8+ bạn có thể gặp lỗi, không xác định tham chiếu đến __sync_add_and_fetch_4 khi biên dịch. Xem http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/ để biết thông tin.

Tôi đã dán phần có liên quan từ trang đó bên dưới trong trường hợp trang ngoại tuyến. Về cơ bản, bạn cần xuất biến CFLAGS và khởi động lại quá trình xây dựng.

[[email protected] redis-2.6.7]# export CFLAGS=-march=i686 
[[email protected] redis-2.6.7]# make distclean 
[[email protected] redis-2.6.7]# make 
4

Để tóm tắt câu trả lời tuyệt vời Akseli của:

assume your user is named "magic_r_user" 

cd ~ 
wget "http://download.redis.io/releases/redis-3.0.0.tar.gz" 
tar -xzf redis-3.0.0.tar.gz 
mv redis-3.0.0 redis 
cd redis 
make 
make test 
create a custom app "listening on port" through the Webfaction management website 
    assume we named it magic_r_app 
    assume it was assigned port 18932 
cp ~/redis/redis.conf ~/webapps/magic_r_app/ 
vi ~/webapps/magic_r_app/redis.conf 
    daemonize yes 
    pidfile ~/webapps/magic_r_app/redis.pid 
    port 18932 
test it 
    ~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf 
    ~/redis/src/redis-cli -p 18932 
    ctrl-d 
    cat ~/webapps/magic_r_app/redis.pid | xargs kill 
crontab -e 
    */1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log 
don't forget to set a password! 
Các vấn đề liên quan