redis-免安装的redis包_拷贝版
一个软件在系统中的安装有很多种方式,但分析其原理,无非就是文件的拷贝和注册。这也是Linux中 Everything is file
理念的一种体现。若再进一步说,则大致可以分为如下几个步骤。
源码,通过源码获得软件,常用的指令是wget;
编译,通过编译使源码结合当前系统的环境生成相应的二进制文件和修改相应的配置文件,常用的指令是configure,make;
测试,使用预设的用例对编译后的结果进行测试,以检验是否编译完整,常用的指令是make test;
安装,将二进制文件、配置文件放入系统中约定俗成的目录下,并在环境变量中进行声明,常用的指令是make install,当然也有yum和apt,只是它们是把之前的过程交由其他公司完成;
配置,将一些常见的配置项进行配置;
服务启动,检验软件是否可以正常提供服务,常用的指令是service xxx start;
应用测试,通过应用用例进行测试服务可正常提供响应,如本文所使用的ping;
使用,正常使用软件吧;
在实际业务环境下,软件的安装往往受到公司的一些现实因素的约束,如技术策略、选型倾向、安全限制、人员能力、团队风格等。举个栗子来说,一个公司所使用的操作系统是确定的,像是 Redhat Enterprise Linux 64,甚至有时操作系统的版本也会做出相应的约定。所以在具体操作上,往往不会那么灵活,但也提供了一条捷径。那就是在预先拟定的一台服务器上进行满足所有条件的安装,在其他开发、测试、预投产、生产等环境下,直接采用拷贝的方式完成。这样在符合标准规范的同时,可以大幅减少人力投入。若是在容器的环境下,道理也是相通的,只是把软件写入指定的image中了。
拷贝版的安装方式还有一个好处是可以较容易的将一些开源软件作为自身软件的一个组件进行统一安装,以减少用户进行软件安装时的步骤。
目录
安装标准
预制软件
源码
编译
测试
安装
配置文件
环境变量
服务启动
Service服务启动
应用测试
redis打包
拷贝安装
复制redis包
服务启动
Service服务启动
安装标准
redis软件要遵循以下安装标准:
软件目录为
/opt/app/redis
配置目录为
/opt/app/redis/config
服务脚本目录为
/opt/app/redis/sbin
能够支持以service指令启停
可以通过删除软件目录,从而卸载整个软件
尽可能简化安装步骤
预制软件
源码
从官网下载源代码
mkdir -p /opt/app/software/redis
cd /opt/app/software/redis
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
编译
在编译时需要指定PREFIX,其实就是在make时进行声明环境变量。在 src/Makefile
中有如下代码 PREFIX?=/usr/local
,含义是若PREFIX未被赋值,则采用 /usr/local
进行赋值。所以可以通过在make时声明环境变量进行修改。网上有不少攻略,是直接修改Makefile文件,不太规范和妥当。
redis目录中是没有 configure
文件的,所以不用执行 ./configure
来生成Makefile。
tar xvzf redis-5.0.8.tar.gz
cd redis-5.0.8
make PREFIX=/opt/app/redis
测试
编译后的测试其实挺简单的,就是一条指令,具体的测试点在 /opt/app/software/redis/redis-5.0.8
下的 tests
系列文件中。通过指令 /usr/bin/tclsh8.5 tests/test_helper.tcl --single unit/moduleapi/commandfilter --single unit/moduleapi/testrdb
执行测试。
给个测试的例子,瞧瞧!
make test
安装
安装时注意两点,一是预先创建所需的安装目录,二是声明PREFIX。
mkdir -p /opt/app/redis
make install PREFIX=/opt/app/redis
mkdir -p /opt/app/redis/config
cp redis.conf /opt/app/redis/config
cp sentinel.conf /opt/app/redis/config
mkdir -p /opt/app/redis/sbin
mkdir -p /opt/app/redis/log
mkdir -p /opt/app/redis/dump
配置文件
依据公司的规范标准,修改配置文件,进行常规性配置。
cd /opt/app/redis/config
vi redis.conf
daemonize yes
pidfile /opt/app/redis/redis_6379.pid
logfile "/opt/app/redis/log/redis_6379.log"
bind 192.168.xx.xxx
port 6379
dir /opt/app/redis/dump/
环境变量
此处创建环境变量,主要是为了方便使用redis-cli。
cd /opt/app/redis
vi redis.env
REDIS_HOME=/opt/app/redis
export PATH=$PATH:$REDIS_HOME/bin
# 指令
echo "# redis env" >> ~/.bashrc
echo ". /opt/app/redis/redis.env" >> ~/.bashrc
. ~/.bashrc
服务启动
使用/opt/app/redis/config/redis.conf作为配置文件启动redis服务。
cd /opt/app/redis
./bin/redis-server ./config/redis.conf &
ps -ef|grep redis-server
ll redis_6379.pid
停止
# 优雅
cd /opt/app/redis
./bin/redis-cli -p 6379 shutdown
ll redis_6379.pid
# 强制
ps -ef|grep redis-server
kill -9 ${pid}
Service服务启动
若有root权限,则可以配置init.d下的文件实现service指令的启停。此处视具体情况决定是否配置。
创建redisd文件。
cd /opt/app/redis/bin
touch redisd
chmod +x redisd
vi redisd
REDIS_HOME=/opt/app/redis
REDIS_PORT=6379
EXEC=$REDIS_HOME/bin/redis-server
CONF=$REDIS_HOME/config/redis.conf
PIDFILE=$REDIS_HOME/redis_$REDIS_PORT.pid
REDIS_CLI=$REDIS_HOME/bin/redis-cli
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, redis is already running or crashed."
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?" -eq "0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE exists, redis is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping..."
$REDIS_CLI -p $REDIS_PORT SHUTDOWN
while [ -x $PIDFILE ]
do
echo "Waiting for Redis to shutdown..."
sleep 1
done
echo "Redis stopped"
fi
;;
status)
$REDIS_CLI -p $REDIS_PORT PING 1>/dev/null
if [ "$?" -eq "0" ]
then
echo "Redis is running."
else
echo "Redis is not running..."
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: service redisd {start|stop|status|restart|force-reload}" >&2
exit 1
esac
复制redisd文件
使用root用户,将redisd文件复制至 /etc/init.d/
cd /etc/init.d/
cp /opt/app/redis/bin/redisd .
测试
service redisd start
service redisd stop
service redisd restart
service redisd status
service redisd force-reload
service redisd others
应用测试
通过redis-cli执行 ping
指令进行测试。
cd /opt/app/redis/bin
redis-cli -p 6379 ping
redis-cli -p 6379 info
redis打包
通过将已可正常使用的redis打包,生成 redis.tar
,实现拷贝安装。
cd /opt/app
tar cvf redis.tar redis/
mv redis.tar software/redis/
cd software/redis/
ll redis.tar
拷贝安装
复制redis包
将redis包复制到所需安装的服务器中。
cd /opt/app
scp [email protected]:/opt/app/software/redis/redis.tar .
tar xvf redis.tar
rm redis.tar
服务启动
启动redis服务。
cd /opt/app/redis
./bin/redis-server ./config/redis.conf &
ps -ef|grep redis-server
ll redis_6379.pid
停止
# 优雅
cd /opt/app/redis
./bin/redis-cli -p 6379 shutdown
ll redis_6379.pid
Service服务启动
若有root权限,则可以配置init.d下的文件实现service指令的启停。
使用root用户,将redisd文件复制至 /etc/init.d/
cd /etc/init.d/
cp /opt/app/redis/bin/redisd .
测试
service redisd start
service redisd stop
service redisd restart
service redisd status
service redisd force-reload
service redisd others