Centos7安装编译安装redis且开机自启动

Centos7编译安装redis

一、准备环境

1、操作系统:CentOS Linux release 7.4.1708 (Core)
2、必要工具:

# 安装并升级GCC
yum install gcc-c++ -y

# 查看版本:
gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

# CentOS7安装有默认GCC环境,默认4.8.5版本!编译redis-6.x,要求C5.3以上编译器,否则会遇到大量的错误。主要原因是从 redis-6.x # 开始的多线程代码依赖C标准库中的新增类型_Atomic。但是注意gcc从 4.9 版本才开始正式和完整地支持stdatomic(gcc-4.8.5部分支
# 持)。centos7默认的gcc版本为:4.8.5 < 5.3无法编译。
# 升级gcc版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 设置环境变量:scl enable devtoolset-9 bash

# 验证:gcc -v
gcc -v
gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)0

# 可选安装必要工具
yum -y install gcc gcc-c++ cmake make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel libevent-devel ncurses-devel mlocate flex libaio-devel ntp openldap-devel libcurl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker iotop bzip2* ntpdate wget zip htop vim iftop nc nmap dstat sysstat lrzsz screen lftp curl strace lsof telnet tree tcpdump nmon busybox screen zlib zlib-devel glib glib-devel bzip2-devel pcre-devel openssl python-devel readline-devel tk-devel libselinux-python vim net-snmp net-snmp-devel net-snmp-utils nfs-utils rpcbind man glibc glibc-devel glib2 glib2-devel e2fsprogs-devel libxslt libxslt-devel openldap-clients openldap-servers parted

二、原生方式安装

# 官网下载安装包
cd /usr/local/src &&  mkdir redis
cd /usr/local/src/redis

# 下载稳定版本源码:
https://download.redis.io/releases/redis-6.2.4.tar.gz
cd redis-6.2.4/
# 编译
make
# 指定目录安装:
make install PREFIX=/usr/local/redis

# 配置文件
# 进入bin文件夹所在目录新建conf文件夹:
cd /usr/local/redis/bin
mkdir -p /usr/local/redis/conf

# 复制配置文件:
cp redis-6.2.0/redis.conf conf/

# 配置redis
vim conf/redis.conf
# 找到daemonize no 改成 daemonize yes
# 大约在250行前后

# 启动redis
./bin/redis-server conf/redis.conf

# 查看redis进程:
ps -ef | grep redis

# 客户端连接:
# 关闭连接:SHUTDOWN
# 退出服务:exit
./bin/redis-cli -p 6379

# 如果已开启防火墙:
# 建议都关闭防火墙同时关闭selinux
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

# 配置远程连接
./bin/redis-cli -h localhost  -p  6379
./redis-cli -h  IP  -p  6379

# 再次编辑配置文件
# redis不建议开放公网
# 仅开放内网能使用即可
vim conf/redis.conf
bind 0.0.0.0 
protected-mode no

# 重启服务器
ps -ef|grep redis 
kill -9 redis进程
./bin/redis-server conf/redis.conf

# 设置打印日志
# redis默认日志为在控制台打印
# 保存后退出vi, 重启redis服务,即可。 
vim /etc/redis/redis.conf
# 指定日志路径
# 没有挂数据盘:
logfile "/var/log/redis/redis.log"
# 挂数据盘使用:logfile "/data/logs/redis/redis.log"
mkdir -p /var/log/redis/
cd /var/log/redis/ && touch redis.log

# 设置开机启动
cd /opt/usr/redis/redis-6.2.4/utils
# 执行install_server
# 依照实际路径进行配置
./install_server.sh

# 查看状态
systemctl status redis_6379
# 启动
systemctl start redis_6379
# 设置开机自启动
systemctl enable redis_6379

# 检查开机自启动项
chkconfig --list
systemctl list-unit-files | grep enable

# 配置密码
vim /etc/redis.conf
# 去掉前面的注释,并修改为所需要的密码:
# requirepass foobared

# 重启服务
systemctl restart redis_6379
# 或者
/path/to/redis/bin/redis-cli  shutdown
/path/to/redis/redis-server /etc/redis.conf

# 连接: 用redis-cli
/path/to/redis/bin/redis-cli [-h localhost -p 6379 ]

三、docker 方式安装

# 安装docker环境,省略
# docker 安装 
docker search redis

# 获取 redis 镜像
# 或docker search redis 查看镜像来源
docker pull redis

#查看镜像
docker images
mkdir -p /usr/local/docker/redis
touch /usr/local/docker/redis/redis.conf
vim /usr/local/docker/redis/redis.conf
appendonly yes

# 启动redis
docker run -p 6379:6379 --name redis -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

# 命令解释说明:
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
--name myredis  指定该容器名称,查看和进行操作都比较方便。
-v 挂载目录,规则与端口映射相同。
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf  以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis/redis.conf
appendonly yes 开启redis 持久化

# 使用docker ps 查看redis已经运行了
# 使用 docker exec -it redis /bin/bash进入redis
# 使用 redis-cli 可以测试连接

# 设置开机启动redis
docker container update --restart=always 容器名字
docker  update --restart=always aa1c2b3a996a

# docker参数--restart=always
# 创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。
# --restart=always : 开机启动,失败也会一直重启;
# --restart=on-failure:10 : 表示最多重启10次
# –restart具体参数值详细信息:
#       no -  容器退出时,不重启容器;
#       on-failure - 只有在非0状态退出时才从新启动容器;
#       always - 无论退出状态是如何,都重启容器;

# 如果是已经在运行中的容器要加上该参数:
docker  update --restart=always  容器名字或者容器ID
# 想立即生效就重启docker 不然就等到它下次重启自动生效。
systemctl restart docker

四、安装redis-4.0.11

此前版本,可能与新版本安装方式不一致,生产环境建议安装旧版稳定版本。

# 官网下载安装包
cd /usr/local/src &&  mkdir redis
cd /usr/local/src/redis
wget http://download.redis.io/releases/redis-4.0.11.tar.gz

# 检查包签名
# md5sum redis-4.0.11.tar.gz 
e62d3793f86a6a0021609c9f905cb960  redis-4.0.11.tar.gz

# 查看编译器版本
gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 

# 解压安装
tar zxvf redis-4.0.11.tar.gz
cd redis-4.0.11
# 编译
make
# 指定目录安装:
make install PREFIX=/usr/local/redis

# 配置文件
# 进入bin文件夹所在目录新建conf文件夹:
cd /usr/local/redis/bin
mkdir -p /usr/local/redis/conf
cp -p /usr/local/src/redis/redis-4.0.11/redis.conf ./

# 配置redis
vim conf/redis.conf
# 130行
# bind 改成内网IP
# 暴露公网改成 0.0.0.0(危险)
# 一般不会暴露出去
bind 10.104.16.1 127.0.0.1

# 找到daemonize no 改成 
daemonize yes
# 在136行
# protected-mode 改为 no
protected-mode no

# 186行
databases 256

# 配置密码
# 去掉前面的注释,并修改为所需要的密码:
# 500行,打开注释改为:密码
# requirepass foobared
# 随机生成:cat /dev/urandom | LC_ALL=C tr -dc "[:alnum:]" | fold -w 10 |head -10
 requirepass password
 
 # 设置打印日志
# redis默认日志为在控制台打印
# 指定日志路径
# 没有挂数据盘:
logfile "/var/log/redis/redis.log"
# 挂数据盘使用:logfile "/data/logs/redis/redis.log"
mkdir -p /var/log/redis/
cd /var/log/redis/ && touch redis.log

# 内核优化
# net.core.somaxconn= 1024
# vm.overcommit_memory = 1
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 20000
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.core.somaxconn= 1024
vm.overcommit_memory = 1


# 立即生效 
sysctl -p

# 优化
# vi /etc/rc.d/rc.local
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
chmod +x /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

 # 启动redis
./bin/redis-server conf/redis.conf

# 查看redis进程:
ps -ef | grep redis

# 客户端连接:
# 关闭连接:SHUTDOWN
# 退出服务:exit
./bin/redis-cli -p 6379

# 如果已开启防火墙:
# 建议都关闭防火墙同时关闭selinux
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

# 配置远程连接
./bin/redis-cli -h localhost  -p  6379
./redis-cli -h  IP  -p  6379

# 设置开机启动
cd /usr/local/src/redis/redis-4.0.11/utils
# 执行install_server
# 依照实际路径进行配置
./install_server.sh

# 选择配置参考
Selected config:
Port           : 6379
Config file    : /etc/redis/redis.conf
Log file       : /var/log/redis/redis.log
Data dir       : /data/redis/db
Executable     : /usr/local/redis/bin/redis-server

# ps -ef 查看 kill 手动进程
# 再次通过systemctl启动

# 查看状态
systemctl status redis_6379.service
# 启动
systemctl start redis_6379.service

# 检查开机自启动项
chkconfig --list

# 在启动文件中,加入密码
# 在echo "Stopping ..."下
# 不然加入了密码无法停止
vim /etc/init.d/redis_6379
$CLIEXEC -a "password" -p $REDISPORT shutdown
# 重新加载
systemctl daemon-reload
posted @ 2021-12-22 15:03  刘文江  阅读(20)  评论(0)    收藏  举报  来源