Redis所有版本下载地址:https://download.redis.io/releases/
1. 关闭防火墙和下载依赖
# 查看防火墙状态 systemctl status firewalld.service # 关闭防火墙 systemctl stop firewalld.service # 禁止开机启动防火墙 systemctl disable firewalld.service # 启动防火墙 systemctl start firewalld.service # 防火墙随系统开启启动 systemctl enable firewalld.service # 关闭selinux,提高了系统的安全性,但关闭它可以释放系统资源,提高服务器的性能,避免一些程序的兼容性问题等等 [root@r ~]# sed -i.ori 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service sed -i.ori 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config yum update -y yum -y install gcc automake autoconf libtool make yum -y install net-tools yum -y install vim yum -y install wget
2.规划目录
/data/redis6379/ # 数据存放目录 /opt/redis-5.0.7/ # 安装目录 /opt/ # 下载并解压目录 /opt/redis6379/{conf,logs,pid} # 配置目录,日志目录,pid目录
3.下载安装
mkdir -p /data/redis6379 cd /opt # yum -y install wget wget https://download.redis.io/releases/redis-5.0.7.tar.gz tar -zxf redis-5.0.7.tar.gz cd /opt/redis-5.0.7 make && make install
4.安装完成后,Redis可执行程序会自动添加到/usr/local/bin
路径,我们就可以在任何地方的terminal中使用Redis相关命令了。
[root@cs opt]# ll /usr/local/bin/redis* -rwxr-xr-x. 1 root root 4365728 Aug 1 10:58 /usr/local/bin/redis-benchmark -rwxr-xr-x. 1 root root 8124120 Aug 1 10:58 /usr/local/bin/redis-check-aof -rwxr-xr-x. 1 root root 8124120 Aug 1 10:58 /usr/local/bin/redis-check-rdb -rwxr-xr-x. 1 root root 4806800 Aug 1 10:58 /usr/local/bin/redis-cli lrwxrwxrwx. 1 root root 12 Aug 1 10:58 /usr/local/bin/redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 8124120 Aug 1 10:58 /usr/local/bin/redis-server
调用redis相关命令:
[root@cs opt]# redis-server -v Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=a67ef2d8861912e7
5.编写配置文件
mkdir -p /opt/redis6379/{conf,logs,pid} cat >/opt/redis6379/conf/redis6379.conf<<EOF daemonize yes # 注意,生产中, 千万不要bind 0.0.0.0,不要将Redis暴露到外网环境,防止被人攻击 bind 127.0.0.1 $(ifconfig ens33|awk 'NR==2{print $2}') port 6379 pidfile /opt/redis6379/pid/redis6379.pid logfile /opt/redis6379/logs/redis6379.log EOF
7.启动
redis-server /opt/redis6379/conf/redis6379.conf ps -ef|grep redis
8.客户端连接
[root@cs opt]# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> quit [root@cs opt]#
无密码,直接连接操作
9.关闭
# 结合启动命令测试关闭命令 redis-server /opt/redis6379/conf/redis6379.conf ps -ef|grep redis # 方式1 [root@cs opt]# redis-cli 127.0.0.1:6379> SHUTDOWN not connected> quit [root@cs opt]# # 方式2 [root@cs opt]# redis-cli shutdown [root@cs opt]# # 方式3 [root@cs opt]# pkill -9 redis [root@cs opt]#
10.可选的配置,配置systemd管理Redis
# 先把之前可能运行的Redis停止 # 创建redis用户和组,以及给相关目录权限 # 创建systemctl管理redis的文件 # 就可以通过systemctl管理redis了 redis-cli shutdown # -u和-g选项表示同时添加具有特定UID和GID的用户 # -M创建一个没有主目录的用户 # -s表示当前创建的当前用户无法用来登录系统 # chown -R redis:redis表示指定目录以及内部的文件所有用户属组归于redis:redis # groupdel redis # cat /etc/group |grep redis groupadd redis -g 1000 # userdel redis # cat /etc/passwd |grep redis useradd redis -u 1000 -g 1000 -M -s /sbin/nologin chown -R redis:redis /opt/redis* chown -R redis:redis /data/redis* cat >/usr/lib/systemd/system/redis.service<<EOF [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis-server /opt/redis6379/conf/redis6379.conf --supervised systemd ExecStop=/usr/local/bin/redis-cli shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload # 当添加或者修改了某个服务的配置文件,就要执行daemon-reload命令重新加载下 systemctl start redis # 启动/停止/重启/查看状态/设置redis开机自启 systemctl start/stop/restart/status/enable redis
优化:
1.客户端最大连接数低:
解决:systemd启动文件添加参数LimitNOFILE
:
cat >/usr/lib/systemd/system/redis.service<<EOF [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis-server /opt/redis6379/conf/redis6379.conf --supervised systemd ExecStop=/usr/local/bin/redis-cli shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 LimitNOFILE=65536 #修改此参数 [Install] WantedBy=multi-user.target EOF
2.overcommit_memory设置
虚拟内存相关,overcommit_memory 表内存分配策略,可选值:0、1、2
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
解决:
# 临时解决 sysctl vm.overcommit_memory=1 # 永久解决 vim /etc/sysctl.conf 追加: vm.overcommit_memory=1 # 生效配置 sysctl -p
3.关闭THP⼤内存⻚
redis建议我们关掉THP,还给出的具体的操作办法,注意必须使用root来操作,否则会失败。
Linux kernel
在 2.6.38 的版本中新增了THP
的特性,支持大内存页(2MB)分配,默认开启。- 当开启
THP
时会降低fork
子进程的速度,但是fork
操作之后,每个内存页从原来 4KB 变为 2MB,会大幅增加重写期间父进程内存消耗。 - 同时每次写命令引起的复制内存也单位放大了 512 倍,会拖慢写操作的时间,导致大量写操作慢查询,例如:简单的 incr、set 命令也会出现在慢查询中。
# 临时解决 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 永久解决 vim /etc/rc.local 追加: echo never > /sys/kernel/mm/transparent_hugepage/enabled
4.TCP连接数调整
意思是配置 /proc/sys/net/core/somaxconn的值是128,但redis.conf中配置的是511,但是linux内核会以无提示的方式将其截断为128。在一个高并发的环境下,128是远远不够的,所以我们要改大一些。
# 永久解决 vim /etc/sysctl.conf 追加: net.core.somaxconn= 4096 # 生效配置 sysctl -p
如果需要密码:
cat >/opt/redis6379/conf/redis6379.conf<<EOF
requirepass XXX
systemctl restart redis
标签:opt,Redis,redis,redis6379,systemctl,conf,root,安装 From: https://www.cnblogs.com/jjjyyylll/p/18399904