在Redis共享托管帐户上设置Webfaction数据库需要执行哪些步骤?
最佳答案
介绍
由于Webfaction服务器的特殊环境限制,安装说明并不像它们那样简单。不过,最后您将拥有一个功能齐全的Redis服务器,即使重新启动后它也可以保持运行状态。大约半年前,我通过以下过程亲自安装了Redis,此后一直运行良好。只是警告一下,半年不是很长的时间,尤其是因为服务器没有被大量使用。
这些说明包括五个部分:安装,测试,启动服务器,管理服务器和保持服务器运行。
安装
登录到您的Webfaction Shell
ssh foouser@foouser.webfactional.com
从Redis download site下载最新的Redis。
> 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/
在制作之前,请先查看您的服务器Linux 32或64位。安装脚本at least on Webfaction's CentOS 5 machines不能很好地处理32位环境。位命令是
uname -m
。如果Linux是32位,则结果为i686,如果是64位,则结果为x86_64。有关详细信息,请参见此answer。> uname -m
i686
如果您的服务器是64位(x86_64),则只需简单地进行即可。
> make
但是,如果您的服务器是32位(i686),则您必须做一点额外的工作。有一个
make 32bit
命令,但是会产生一个错误。在安装脚本中编辑一行以使make 32bit
起作用。> nano ~/src/redis-2.6.16/src/Makefile
从这里更改线214
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
对此
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
并保存。然后运行带有32位标志的make。
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
可执行文件已创建到目录
~/src/redis-2.6.16/src/
中。可执行文件包括redis-cli
,redis-server
,redis-benchmark
和redis-sentinel
。测试(可选)
如安装输出所示,最好通过运行测试来确保一切正常。
Hint: To run 'make test' is a good idea ;)
不幸的是,测试要求安装tlc8.6.0,这至少在机器web223上不是默认设置。因此,您必须首先从源代码安装它。参见Tcl/Tk installation notes和compiling 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
使用
make test
测试Tcl将花费时间,并且由于WebFaction的环境限制而将失败。我建议你跳过这个。现在我们已经安装了Tlc,我们可以运行Redis测试了。测试将花费很长时间,并且会暂时使用大量内存。
> cd ~/src/redis-2.6.16/
> make test
测试完成后,您就可以继续了。
启动服务器
首先,通过Webfaction Control Panel(自定义应用程序(在端口上监听))创建自定义应用程序。将其命名为fooredis。请注意,如果Redis仅在本地使用(即从同一主机使用),则无需为该应用程序创建域或网站。
其次,记下为该应用程序提供的套接字端口号。假设示例为23015。
将先前编译的可执行文件复制到应用程序的目录中。您可以选择复制全部或仅复制所需的内容。
> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .
也复制示例配置文件。您将很快对其进行修改。
> cp ~/src/redis-2.6.16/redis.conf .
现在Redis已经可以运行了。虽然有几个问题。首先,默认的Redis端口6379可能已在使用中。其次,即使端口是空闲的,是的,您也可以启动服务器,但是在退出 shell 程序的同时它将停止运行。对于第一个,必须编辑redis.conf,对于第二个,您需要一个守护程序,该守护程序也可以通过编辑redis.conf来解决。
Redis可以在the daemon mode中运行。为此,您需要设置一个守护程序存储其进程ID,PID的位置。通常,pidfiles存储在/ var / run /中,但是由于环境限制,您必须在主目录中为其选择一个位置。因为稍后在“管理服务器”部分中说明了一个原因,所以一个不错的选择是将pidfile与可执行文件放在同一目录下。您不必自己创建文件,Redis会自动为您创建文件。
现在打开redis.conf进行编辑。
> cd ~/webapps/fooredis/
> nano redis.conf
按照以下方式更改配置。
daemonize no
-> daemonize yes
pidfile /var/run/redis.pid
-> pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
-> port 23015
现在终于启动Redis服务器。指定conf文件,以便Redis侦听正确的端口并作为守护程序运行。
> cd ~/webapps/fooredis/
> ./redis-server redis.conf
>
看到它运行。
> 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)
>
如果需要,请停止服务器。
> ps -u $USER -o pid,command | grep redis
718 grep redis
10735 ./redis-server redis.conf
> kill 10735
要么
> cat redis.pid | xargs kill
管理服务器
为了便于使用并作为下一部分的准备工作,请编写一个脚本来帮助打开客户端以及启动,重新启动和停止服务器。一个简单的解决方案是编写一个makefile。编写makefile时,请记住使用制表符而不是空格。
> 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
这些规则是不言自明的。关于第二条规则的特殊之处在于,在守护程序模式下,如果已经运行一个进程,则调用./redis-server不会创建新进程。
第三条规则中有一些悄悄的智慧。如果redis.pid没有存储在fooredis目录下,而是存储在/var/run/redis.pid下,那么停止服务器并不是那么容易。如果同时运行多个Redis实例,则尤其如此。
执行规则:
> make start
保持服务器运行
现在,您有一个在守护程序模式下运行的Redis实例,该实例使您无需停止即可退出Shell。这还不够。如果进程崩溃怎么办?如果服务器计算机重新启动怎么办?要覆盖这些内容,您必须创建两个cronjobs。
> export EDITOR=nano
> crontab -e
添加以下两行并保存。
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
第一个确保每五分钟运行一次fooredis。如上所述,如果已在运行,则不会启动新进程。第二个确保fooredis在服务器计算机重新启动后立即启动,并且在第一个规则生效之前很长时间启动。
可以使用一些更专门的方法,例如forever。有关该主题的更多信息,请参见Webfaction Community thread。
结论
现在您拥有了。许多事情已经完成,但可能还会更多。您将来可能想做的未在此处介绍的事情包括以下内容。
有任何想法,评论或更正吗?
关于installation - 在Webfaction上设置Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622630/