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
网友评论