自从2020年12月08日CentOS 官方宣布CentOS Linux项目将停止,并推出CentOS Stream项目。CentOS未来将会从Red Hat Enterprise Linux(RHEL)复刻版本的CentOS Linux转向CentOS Stream。而目前使用最多的Centos8刚好在停止维护的系统列表内,所以很多同学目前打算转战Ubuntu,减少使用Centos。
本文将带你实现手动编译安装Redis以及创建systemd服务并设置自启动。
安装教程
查看系统版本
这里使用的是Ubuntu20.04
root@VM-8-10-ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
下载Reids源码
可以从Redis官网的下载页面下载到最新的源码:
下载完成后我们对其进行解压
tar -xvf redis-6.2.6.tar.gz
安装依赖
编译前我们需要先安装编译需要的依赖:
apt install libsystemd-dev libc6-dev
然后进入deps目录,编译剩余需要的依赖,输入以下命令以进行:
cd redis-6.2.6/deps
make hiredis linenoise hdr_histogram lua jemalloc -j16
编译Redis本体
编译依赖完成后就可以开始编译本体
make USE_SYSTEMD=yes
如果系统为多核可以加-j线程数来开启多线程编译提升速度,如下文代码所示(此处使用16线程):
make USE_SYSTEMD=yes -j16
编译完成后如有需要可以进行测试,需要安装tcl以支持测试
apt install tcl
make test
接着将其安装到系统
make install
创建服务
这里我们使用systemd来创建服务,而不是使用过时的init.d
首先复制一份redis配置到/etc下
cp redis.conf /etc/
打开redis.conf,修改以下内容:
修改监听IP,开启外网连接(默认是本地可以通过127.0.0.1连接):
bind 0.0.0.0
找到supervised并去掉注释,将其设置为systemd,要不然systemd不会检测到redis启动成功
supervised systemd
然后为redis设置密码:
找到requirepass并去掉注释,将"foobared"修改为你自己需要的密码,这点很重要,没设置容易被攻击!!
requirepass foobared
然后复制redis自带的示例服务文件到systemd,并且创建好redis的数据目录
cd utils
cp systemd-redis_server.service /etc/systemd/system/redis-server.service
mkdir -p /var/lib/redis
下面将编辑服务文件
cd /etc/systemd/system/
vim redis-server.service
去掉后一个ExecStart的注释,将上方原有的注释掉,并将下方的配置文件目录改成我们自己的
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
然后设置工作目录,去掉下方WorkingDirectory的注释
WorkingDirectory=/var/lib/redis
改好的文件看起来应该是这样子的
[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
#Before=your_application.service another_example_application.service
#AssertPathExists=/var/lib/redis
Wants=network-online.target
After=network-online.target
[Service]
#ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
## Alternatively, have redis-server load a configuration file:
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
LimitNOFILE=10032
NoNewPrivileges=yes
#OOMScoreAdjust=-900
#PrivateTmp=yes
Type=notify
TimeoutStartSec=infinity
TimeoutStopSec=infinity
UMask=0077
#User=redis
#Group=redis
WorkingDirectory=/var/lib/redis
[Install]
WantedBy=multi-user.target
开启服务并设置开机启动
首先看一下服务配的对不对,如果status显示Active则正常。
systemctl start redis-server.service
systemctl status redis-server.service
正常之后直接设置开机启动即可
systemctl enable redis-server.service
或者一条命令搞定
systemctl enable --now redis-server.service
非root用户运行redis
首先创建用户
useradd redis -s /sbin/nologin -b /var/lib
然后设置运行用户
vim /etc/systemd/system/redis-server.service
去掉下面两个注释
User=redis
Group=redis
设置完成之后重载systemd并且重启redis-server
systemctl daemon-reload && systemctl restart redis-server.service
配置完成后可以查看下是不是redis用户在跑,显示User=redis就说明配置成功
root@VM-8-10-ubuntu:/var/lib# systemctl show -pUser redis-server.service
User=redis
解决overcommit_memory问题
Nov 22 10:30:14 VM-8-10-ubuntu redis-server[25201]: 25201:M 22 Nov 2021 10:30:14.530 # WARNING overcommit_memory is set to 0!
“警告超限”内存设置为0!在内存不足的情况下,后台保存可能会失败。若要解决此问题,请将“vm.overcommit_memory=1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。
我们按照提示直接设置这个内核参数即可:
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf && sysctl -p
Redis管理工具
这里推荐RDM:
https://github.com/uglide/RedisDesktopManager
项目是开源的,windows版本需要到microsoft store中购买后(相当于赞助作者)才可以解锁
这里提供一个第三方大佬编译的windows版本,可以直接安装: