Redis redis 编译安装和 systemd 配置

clousky2020 · 2021年01月09日 · 1294 次阅读

背景

公司迁移服务器,目标是 redhat 的系统,记录下过程

安装过程

下载

https://redis.io/download

[root@localhost ~]# yum install wget
[root@localhost ~]# wget http://download.redis.io/releases/redis-6.0.5.tar.gz

解压并编译安装

tar -zxvf redis-6.0.5.tar.gz
cd redis-6.0.5

# 编译 并指定安装目录
make PREFIX=/usr/local/redis6.0.5 install

make 错误

In file included from server.c:30:0:
server.h:1045:5: error: expected specifier-qualifier-list before ‘_Atomic’
     _Atomic unsigned int lruclock; /* Clock for LRU eviction */
     ^
server.c: In function ‘serverLogRaw’:
server.c:1028:31: error: ‘struct redisServer’ has no member named ‘logfile’
     int log_to_stdout = server.logfile[0] == '\0';
                               ^
server.c:1031:23: error: ‘struct redisServer’ has no member named ‘verbosity’
     if (level < server.verbosity) return;
                       ^
server.c:1033:47: error: ‘struct redisServer’ has no member named ‘logfile’
     fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
                                               ^
server.c:1046:47: error: ‘struct redisServer’ has no member named ‘timezone’
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                               ^
server.c:1046:63: error: ‘struct redisServer’ has no member named ‘daylight_active’
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                                               ^
server.c:1049:19: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
         if (server.sentinel_mode) {

解决问题

# 查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5
gcc -v

# 升级gcc到5.3及以上,如下升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash

# 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。

#如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>~/.bash_profile
#应用
source ~/.bash_profile

以下其他版本同理,修改devtoolset版本号即可。

再次编译

# 编译出错时,清出编译生成的文件
make distclean

# 编译 并指定安装目录
make PREFIX=/usr/local/redis6.0.5 install

看到下面的结果就说明安装成功

INSTALL redis-sentinel
    CC redis-cli.o
    LINK redis-cli
    CC redis-benchmark.o
    LINK redis-benchmark
    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory `/usr/local/redis-6.0.5/src'
## 创建配置文件目录
mkdir -p /usr/local/redis6.0.5/etc

cp ~/redis-6.0.5/redis.conf /usr/local/redis6.0.5/etc

# 将bin目录添加到环境变量中
export PATH=$PATH:/usr/local/redis6.0.5/bin

# 启动 redis服务
redis-server /usr/local/redis6.0.5/etc/redis.conf

# 关闭服务
redis-cli shutdown

配置系统服务

配置文件参数

sudo vi /usr/local/redis6.0.5/etc/redis.conf
port 6379                           # 默认的端口
dir ./                              # 持久化文件存放路径
daemonize  no=>yes                          # 以守护进程启动
supervised no=>systemd         #以systemd控制启动
pidfile /var/run/redis_6379.pid     # pid文件路径
logfile ""                          # 日志文件路径
bind 0.0.0.0            # 远程连接

编写 service 文件

vi /etc/systemd/system/redis.service

[Unit]
Description=Redis6.0.5
After=redis6.service

[Service]
Type=forking
ExecStart=/usr/local/redis6.0.5/bin/redis-server /usr/local/redis6.0.5/etc/redis.conf 
ExecStop=/usr/local/redis6.0.5/bin/redis-cli shutdown
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
RestartSec=10
# The UNIX user and group to execute PostgreSQL as
User=redis
Group=db

[Install]
WantedBy=multi-user.target
# 重新加载配置文件
systemctl daemon-reload

# 添加执行权限
chmod 754 /usr/systemd/system/redis.service

systemctl disable redis.service
systemctl enable redis.service

systemctl status redis.service
systemctl start redis.service
systemctl restart redis.service

开放端口

我这里没有遇到过端口问题,但还是先记录吧。

firewall-cmd --add-port=6379/tcp --permanent               #永久添加6379端口例外(全局)
firewall-cmd --remove-port=6379/tcp --permanent            #永久删除6379端口例外(全局)
firewall-cmd --reload

连接其他 redis

redis-cli -h 192.168.43.32 -p 6379

常用的配置项

列举 Redis 常用的配置项: daemonize 如果需要将 Redis 服务以守护进程在后台运行,则把该项的值改为 yes pidfile 配置多个 pid 的地址,默认在/var/run/redis/pid bind 绑定 ip,设置后只接受来自该 ip 的请求 port 监听端口,默认是 6379 timeout 客户端连接超时的设定,单位是秒 loglevel 分为 4 级,debug、verbose、notice、warning logfile 配置 log 文件地址 databases 设置数据库的个数,默认使用的数据库为 0 save 设置 redis 进行数据库镜像的频率 rdbcompression 在进行镜像备份时,是否进行压缩 Dbfilename 镜像备份文件的文件名 Dir 数据库镜像备份文件的存放路径 Slaveof 设置数据库为其他数据库的从数据库 Masterauth 主数据库连接需要的密码验证 Requirepass 设置登录时,需要使用的密码 Maxclients 设置同时连接的最大客户端数量 Maxmemory 设置 redis 能够使用的最大内存 Appendonly 开启 append only 模式 Appendfsync 设置对 appendonly.aof 文件同步的频率 vm-enabled 是否开启虚拟内存支持 vm-swap-file 设置虚拟内存的交换文件路径 vm-max-memory 设置 redis 能够使用的最大虚拟内存 vm-page-size 设置虚拟内存的页大小 vm-pages 设置交换文件的总的 page 数量 vm-max-threads 设置 VMIO 同时使用的线程数量 Glueoutputbuf 把小的输出缓存存放在一起 hash-max-zipmap-entries 设置 hash 的临界值 Activerehashing 重新 hash

启动后如果使用 RedisDesktopManager 连接是不成功的,还需要设置密码和设置绑定

#修改配置
cd /usr/local/redis-4.0.11/
vim redis.conf

修改里面的 Requirepass yourpassword bind 0.0.0.0

重新启动 Redis 即可!!!

卸载 Redis

停服务、删文件即可!

#查看进程
ps aux |grep redis
#杀掉进程
kill -9 进程号
#查看相关文件
find / -name "redis"
#删除文件
rm -rf 文件

参考

https://ncc0706.github.io/2020/05/21/db/redis/02.centos7-install-redis.6.0.3/

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号