目录
一、centos7 下redis6.0 单机部署
二、针对安装后告警信息进行简单优化
三、加入系统服务 优雅的管理redis的启动和关闭等
四、安全设置,redis 安全问题一定要重视,否则机器可能会被攻破
五、允许redis被远程访问
一、redis 6.0 单机部署
cd /usr/local/src
echo " #安装依赖"
yum -y install centos-release-scl
yum -y install wget make tcl devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
source /opt/rh/devtoolset-9/enable
echo "#下载源码包"
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
tar -zxvf redis-6.0.6.tar.gz
cd /usr/local/src/redis-6.0.6
make && make install PREFIX=/usr/local/redis
mkdir /usr/local/redis/conf/
cp /usr/local/src/redis-6.0.6/redis.conf /usr/local/redis/conf/redis.conf
/user/local/redis/bin/redis-server
安装成功
可以看到有好多waring 生成环境下 如果是在生产环境最好还是处理一下;
二、redis 简单优化:
根据输出内容提示进行初步优化,消除警告信息 ;根据生产环境数据量实际情况 调节参数,以下仅供参考,消除warning还是没问题的
直接运行/user/local/redis/bin/redis-server启动后 会出现如下warning
Warning: no config file specified, using the default config. In order to specify a config file use /usr/local/redis/bin/redis-server /path/to/redis.conf
## 启动时没指定配置文件
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
警告redis高负载环境中每一个端口最大的监听队列的长度128 太少了
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
警告 当前overcommit_memory 是0 建议改为1
它是 内存分配策略
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
警告 您的内核中启用了透明大页面(THP)支持。这将导致Redis的延迟和内存使用问题
以上问题解决方法:
echo 512 > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
再次启动/usr/local/redis/bin/redis-server 还有一条警告,让我们指定配置文件启动
解决方法:
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
以该方法启动 所有警告消失
三 将redis加入系统服务,优雅的启动和管理
1、在/lib/systemd/system目录下创建一个脚本文件redis.service
cat << EOF > /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf --daemonize no
ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
EOF
2、创建软链接
ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
3. 刷新配置
刚刚配置的服务需要让systemctl能识别,就必须刷新配置
$ systemctl daemon-reload
如果没有权限可以使用sudo
$ sudo systemctl daemon-reload
4. 测试启动、重启、停止 命令生效
启动redis
$ systemctl start redis
重启redis
$ systemctl restart redis
停止redis
$ systemctl stop redis
5. 开机自启动
redis服务加入开机启动
$ systemctl enable redis
禁止开机启动
$ systemctl disable redis
6. 查看状态
查看状态
$ systemctl status redis
四 安全设置
redis 默认是没有密码的,暴露在公网上 可以通过redis_cli 连接后修改本地服务器内的文件,比如添加ssh密钥,修改crontab计划任务等进行提权,所以暴露在公网的redis 一定要设置密码
密码设置方法
方法一:修改redis.conf文件里面的requirepass
sed -i "s/\# requirepass foobared/requirepass mypass666/g" /usr/local/redis/conf/redis.conf
service redis restart 生效
方法二:不需要重启立即生效 ,但是redis命令行修改了密码之后,配置文件的requirepass字段后面的密码是不会随之修改的
[root@dlin ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> config set requirepass mypass666
OK
127.0.0.1:6379>quit
设置之后再次登陆就需要输入密码了
[root@dlin ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth mypass666
OK
127.0.0.1:6379> ping
PONG
五 允许远程连接redis
修改redis.conf
默认是
bind 127.0.0.1
将此127.0.0.1 换成 公网ip或能够远程访问的ip ;若换允许公网访问 一定要设置访问密码!!!
##window 下有个Redis Desktop Manager 软件 能够可视化连接redis!
记得开启firewall 并放行相应的端口,
yum install firewalld -y
service firewalld start
systemctl enable firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload