安装过程
这次安装的redis是最新的大版本,5.0.4 。redis的安装相对比较简单,在官网下到相关的安装包,解压,我放的目录是/opt/redis 。然后安装gcc
yum install gcc make -y
然后执行make test,看是否可以构建成功。
我执行后提示我,缺号tcl8.5或者更新的版本。之前我是有存下来tcl8.5的安装包的,这次我发现yum有tcl的8.5版本,试试吧。
yum install tcl #看清楚了版本再安装最低要求8.5版本
再次make test,报错Executing test client: couldn't execute "src/redis-benchmark": no such file or directory.
couldn't execute "src/redis-benchmark": no such file or directory
网上说进行make distclear ,后来发现,他是test通过后,install报错时使用的命令。我怀疑这和我装的tcl有关,所以,我把之前yum的版本卸载了
yum remove tcl
然后安装我常安装的tcl版本,8.6,命令如下:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz
cd tcl8.6.1/unix/
./configure
make
make install
然后,还是不行。
于是我决定,先make再说吧。于是,我在make的结果中看到了benchmakr.o。那我再试试make test咧。嗯,成功了。TNND。。。所以,我无法证明yum自身的tcl是不ok的,而且我还把我的虚拟机从单核升为了双核,也不知道有没有影响,以后有机会再说吧。
make install # 安装搞定
配置
在软件根目录下面有个redis.conf文件,是一个范例的配置文件,可以直接使用,不过我们需要进行一些调整,先复制出来一个吧
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf
变更的内容有:
daemonize yes
bind 0.0.0.0
requirepass 123456
至此,服务已可用。为了重启服务器的时候,少手动启动一些服务,接下来我们配置开机启动。
开机启动
需要注意的是,我们这是centos7,和centos6的开机启动区别有些大。首先让我们创建启动用的服务文件 /lib/systemd/system/redis-6379.service
vim /lib/systemd/system/redis-6379.service
[Unit]
#描述服务
Description=redis-6379
#描述服务类别
After=network.target
[Service]
#forking是后台运行的形式
Type=forking
#服务启动的具体命令
ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf
#ExecReload为服务重启的具体命令
#ExecStop服务停止的具体命令
#true表示给服务分配独立的临时空间
PrivateTmp=true
[Install]
#设置为多用户
WantedBy=multi-user.target
systemctl enable redis-6379.service
需要注意的是
- 上面的注释在实际使用时均需要去掉,否则会报错。
- 命令中必须使用绝对路径,所有的环境变量和相对路径均是无效的。
- 经过测试,虽然我没有设置stop命令,但是stop依然可以正确的关闭我的进程。
关于开机启动的一些补充信息
任务 | 旧指令 | 新指令 |
---|---|---|
使某服务自动启动 | chkconfig --level 3 redis-6379 on | systemctl enable redis-6379.service |
使某服务不自动启动 | chkconfig --level 3 redis-6379 off | systemctl disable redis-6379.service |
检查服务状态 | service redis-6379 status | systemctl status redis-6379.service (服务详细信息) systemctl is-active redis-6379.service (仅显示是否 Active) |
显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
启动某服务 | service redis-6379 start | systemctl start redis-6379.service |
停止某服务 | service redis-6379 stop | systemctl stop redis-6379.service |
重启某服务 | service redis-6379 restart | systemctl restart redis-6379.service |
After
表示如果network.target或sshd-keygen.service需要启动,那么sshd.service应该在它们之后启动。
Type
- simple(默认值):ExecStart字段启动的进程为主进程
- forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
- oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
- dbus:类似于simple,但会等待 D-Bus 信号后启动
- notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
- idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
WantedBy
表示该服务所在的 Target。
Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target。
这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。
后记
在后来使用centos8装redis的时候,参照这篇文章进行安装,很顺利。centos8里tcl库默认是8.6的。这次我直接用的yum里的。然后,make test依然是相同的错误。不过在make和make install之后再次执行,所有的测试通过。所以,tcl库可以用yum库的,同时make test要在安装完成之后进行才可以。