作者:admin,发布日期:2021-11-22
阅读:114330;评论:6619

写在开头

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官网的下载页面下载到最新的源码:

https://redis.io/download

下载完成后我们对其进行解压

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版本,可以直接安装:

https://github.com/lework/RedisDesktopManager-Windows

你可能感兴趣的文章