一、概述
1.1原理
redis自启动的工作原理是怎么样的呢?Linux系统启动后,会有一个程序去特定目录下面扫描文件,然后执行这些文件,这些文件可称之为脚本。所以,你可以把你的工作写成一个脚本,放到指定路径下(etc/init.d)。所以,你要做的,就是把执行启动redis实例的工作编写成脚本,让Linux系统去给你执行即可。
1.2简述
配置自启动,大概需要三个步骤
1. 编辑实例对应的配置文件,同一台机器上,可以有启动多个redis实例,所以对应着多个配置文件。同时每个实例有自己的工作路径,如果共用工作路径,那么配置文件很多项目项要配置成不同,以免冲突,所以建议方法可以设置不同的工作路径。
2.编辑一个自启动脚本,然后把脚本复制到ect/init.d目录下。因为Linux系统启动后,会有一个程序自动去扫描这个路径下的文件,然后执行它们。
3.执行命令生效、测试。
二、编辑redis配置文件
2.1配置文件命名
在redis目录下有一个redis.conf文件,复制一份,建议按端口名命名,如6379.conf,规则是,首先,需要与第三章中的脚本里面的配置一致,其次,不同实例对应不同的配置文件,不能搞混了,然后用vi对文件进行编辑。
2.2编辑配置文件
以下把需要注意的项加以说明
首先把redis配置成值守进程,这样redis运行后将在后台运行,如下:
daemonize yes
当以值守进程模式运行的时候,redis sever把自己的pid写入到缺省文件“/var/run/redis.pid”下,这里,你需要自定义文件名,几个redis实例,不能弄成一样,Linux系统是通过这个文件来判断一个进程是否运行与关闭,如下:
pidfile /var/run/redis_6379.pid
Redis实例用于接收客户端连接的TCP监听端口默认是6379,如果配置成0,将不会开启TCP监听服务。在此可自定义端口,此端口与后续的脚本配置的相关项需要一致。
port 6379
Redis server缺省情况下是接收所有本服务器所有网卡的请求,但是也可以通过指定IP来绑定网卡,可以绑定多个,用空格隔开,如下:
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1
存放快照文件的文件名,默认是dump.rdb,可以自定义文件名,扩展名你就别动它了。如果你需要启动多个redis实例,同时多个实例又共用同一个工作路径,那么此文件名必须不一样。
dbfilename dump.rdb
以上(第4节)只是设置的文件名,而非路径,通过命令dir可以指定路径,文件将按指定路径与指定的文件名存储。同时AOF(Append Only File)也是参照此路径的。多实例可以共用此路径,如果共用工作路径,那其他配置需要配置成不同,以防冲突,所以建议设置成不同工作路径,这样就避免了这些问题。
dir ./
指定输入日志信息的文件,如果为空,将从标准输出窗口输出,同时又设置了守护进程模式的话,将会把日志记录到/dev/null。它只是文件名,不包含路径。
logfile ""
三、处理脚本
3.1复制脚本
redis/utils目录下有一个redis_init_script文件,把它复制一份到etc/init.d路径下,建议把文件名改成与redis实例端口相关,如6379端口的这个脚本名,在etc/init.d路径下改成6379redisd。
3.2编辑脚本
对2.1节复制到/etc/init.d路径下的脚本进行编辑,如下:
#!/bin/sh
#
# Simple Redis init.d scriptconceived to work on Linux systems
# as it does use of the/proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/src/redis/${REDISPORT}.conf"
#"/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists,process is already running or crashed"
else
echo "Starting Redisserver..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does notexist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting forRedis to shutdown ..."
下面对以上脚本进行说明
REDISPORT=6379
这应该只是定义的一个变量,现在装用到它,建议redis实例用什么端口,这个地方就配置什么端口,如果一个服务器多实例的话,这必须配置成不一样。
EXEC=/usr/local/bin/redis-server
你的redis-server的路径,如果你redis源码编译后执行过makeinstall并成功后,redis-server在/usr/local/bin/路径下将会有redis-server的链接,或者,以后配置需要直接配置成你redis-server所在的真实的路径。
CLIEXEC=/usr/local/bin/redis-cli
redis-cli所在的路径,由redis-server一样,如果你redis源码编译后执行过makeinstall并成功后,redis-cli在/usr/local/bin/路径下将会有redis-cli的链接,或者,以后配置需要直接配置成你redis-cli所在的真实的路径。这样,在linux下可直接敲redis-cli命令,而不用指定路径了,可以把它当成平常的命令来执行。
PIDFILE=/var/run/redis_${REDISPORT}.pid
这个是pid文件路径,当redis实例设置成值守模式(daemonize)后,启动后会生成一个pid文件,在哪里生成,文件名是什么,需要在redis的config文件里配置。所以当你一个服务器中有多个redis实例时,这个文件名需要不一样,不然会带来麻烦。所以此配置项要与redis的配置文件里面配置项一致,关于redis配置文件里面的相关想,参见后续章节。
CONF="/usr/local/src/redis/${REDISPORT}.conf"
指定redis实例的配置文件的路径,同服务器不同的redis实例需要不同的配置文件,这个需要注意,不能弄成一样的,不然启动会有成功的。
脚本的后续部分,可以不用管它,不需要修改。
添加项:
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
在脚本的开头第四行,即“# as it does use of the /proc filesystem.”的一行插入以上两段代码,不然,后面执行命令的时候,会提示权限问题。
四、启动生效
#设置为开机自启动服务器
chkconfig redisd on
#打开服务,用于测试服务是否有效
service redisd start
#关闭服务
service redisd stop
#重启系统,测试是否生效
reboot
系统重启后,检查redis实例是否如预期启动
redis-cli –h 你设置的IP –p 你设置的端口