您的位置:首页 > 数据库 > Redis

redis队列的安装与配置,还有一些安全方面的配置

2016-07-04 16:28 716 查看
安装采用源码编译安装方法:

$ wget http://download.redis.io/releases/redis-3.2.1.tar.gz $ tar xzf redis-3.2.1.tar.gz
$ cd redis-3.2.1
$ make


完成以上操作后执行:

make test


有些机器因为没有安装一些软件就会有相应的错误提示,可自行查找再进行解决,例如我自己的机器就提示没有安装tcl,我用命令yum一些:

yum install -y tcl


最后make test通过测试,将redis的服务端和客户端拷贝到系统目录:

cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/


然后新建目录,存放配置文件

mkdir /etc/redis
mkdir /var/redis
mkdir /var/redis/log
mkdir /var/redis/run
mkdir /var/redis/6379


在redis解压根目录中找到配置文件模板,复制到如下位置。

cp redis.conf /etc/redis/redis.conf


通过vim命令修改配置文件里面的参数:

daemonize yes


设置服务在后台运行
再设置一下redis的pid路径,日志路径,数据库存放路径

pidfile /var/redis/run/redis_6379.pid
logfile /var/redis/log/redis_6379.log
dir /var/redis/6379


编写脚本
vim /etc/init.d/redis


大致的配置文件如下

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/redis.conf"

case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac


编辑后之后保存,设置开机启动项:

centos6系统:chkconfig redis on
如果系统是centos7系统,则需要写个开机启动脚本:

vim /etc/systemd/system/redis.service


脚本内容如下:

[Unit]
Description=Redis on port 6379

[Service]
User=nginx
Group=nginx
Type=forking
ExecStart=/etc/init.d/redis start
ExecStop=/etc/init.d/redis stop

[Install]
WantedBy=multi-user.target


centos7系统设置开机启动:systemctl enable redis.service


注意上面的User和Group配置,由于服务器用的nginx用户执行php程序,如果这里不设置redis的执行用户和用户组,默认是用root启动redis进程的,这样的话,当你用PHP的redis扩展来连接redis时候,由于权限问题,redis是拒绝连接的,因为nginx用户执行的php程序是无法访问root用户进程redis的,这个很重要。
启动redis后查看一下日志可以看到一些关于系统内存或内核的错误提示,这时需要修改一下配置:

配置 
vm.overcommit_memory
 为1,这可以避免数据被截断

sysctl -w vm.overcommit_memory=1


修改backlog连接数的最大值超过redis.conf中的 
tcp-backlog
 值,即默认值511。你可以在kernel.org 找到更多有关基于sysctl的ip网络隧道的信息。
sysctl -w net.core.somaxconn=512

取消对透明巨页内存(transparenthuge
pages)的支持,因为这会造成redis使用过程产生延时和内存访问问题。
echo never > /sys/kernel/mm/transparent_hugepage/enabled


安装php的redis扩展

$ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz $ cd phpredis-2.2.7                      # 进入 phpredis 目录
$ /usr/local/php/bin/phpize              # php安装后的路径
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install

修改php.ini文件

vi /etc/php.ini


添加一下记录:
extension=redis.so

重启php-fpm
systemctl restart php-fpm


查看phpinfo页面可以看见redis扩展支持

安全设置:

默认安装的redis是无需密码就可以远程连接的,如果你不需要远程连接,就可以关闭,只需要在配置文件设置如下代码:
bind 127.0.0.1

默认的redis端口是:6379
</pre><p>最好把默认端口改改,比如改为6380,则在配置文件如此改:</p><p><pre name="code" class="html">port 6380


如果你的redis服务只需要本地连接,不用远程连接,还可以用unix套接字的方式连接

unixsocket /tmp/redis.sock
unixsocketperm 700

如果你需要远程连接redis最好开启一下密码验证:
requirepass yourpassword

添加以下的配置,转换一下命令,防止远程清空数据库或修改redis的配置:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command FLUSHDB ""

另外推荐看看外国佬的这篇文章: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: