redis(下)

redis 安全设置

由于redis没有密码有监听在所有端口,非常不安全。可以通过以下一些方法来防范。

1.设置监听ip

bashbind 127.0.0.1 2.2.2.2//可以是多个ip,用空格分隔

2.设置监听端口

port 16000

3.设置密码

requirepass pass>word
redis-cli  -a 'pass>word'

4.将config命令改名

rename-command CONFIG default

# 禁掉config命令 

rename-command CONFIG ""

redis 慢查询日志

编辑配置文件/etc/redis.conf

针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。

slowlog-log-slower-than 1000 # 单位ms,表示慢于1000ms则记录日志

slowlog-max-len 128          # 定义日志长度,表示最多存128条


slowlog get   # 列出所有的慢查询日志

slowlog get 2 # 只列出2条

slowlog len   # 查看慢查询日志条数

添加php的redis扩展

下载

wget https://codeload.github.com/phpredis/phpredis/zip/develop
mv develop phpredis.zip
unzip phpredis.zip

编译安装

cd phpredis-develop/

/usr/local/php/bin/phpize         #生成./configure 文件

./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

修改配置文件

vim /usr/local/php/etc/php.ini
# 添加行
extension = redis.so
#查看是否成功
/usr/local/php/bin/php -m |grep redis

Redis实现session共享

多种方法

# 第一种:php.ini中加入
session.save_handler = "redis"
session.save_path = "tcp://127.0.0.1:6379"
# 第二种:Apache虚拟主机中加入
php_value session.save_handler "redis"
php_value session.save_path "tcp://127.0.0.1:6379"
# 第三种:php-fpm.conf对应的pool中加入
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"

Redis存储session测试

编辑测试文件/usr/local/apache2/htdocs/session.php

<?php 
        session_start(); 
        if (!isset($_SESSION['TEST'])) { 
                $_SESSION['TEST'] = time(); 
        } 
        $_SESSION['TEST3'] = time(); 
        print $_SESSION['TEST']; 
        print "<br><br>"; 
        print $_SESSION['TEST3']; 
        print "<br><br>"; 
        print session_id(); 
?>
# curl localhost/session.php
1455899141<br><br>1455899141<br><br>cn3ujd9pt0hdf69hecpudfij21

# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> get PHPREDIS_SESSION:cn3ujd9pt0hdf69hecpudfij21
"TEST|i:1455899141;TEST3|i:1455899141;"

如果想用php连接redis cluster,需要使用predis扩展 安装方法类似phpredis,predis扩展地址https://github.com/nrk/predis

Redis主从配置

两台服务器: master(192.168.127.128) slave(192.168.127.129)

先安装好redis并启动

master配置不变

slave配置文件上添加行

# vim /usr/local/redis/etc/redis.conf

slaveof 192.168.127.128 6379       #主的IP和端口

# 如果master上有设置密码,在添加行
masterauth passwd

分别启动master和slave

[root@localhost ~]# tail /var/log/redis.log 
4479:M 08 Sep 19:14:21.663 * Synchronization with slave 192.168.127.129:6379 succeeded
4479:M 08 Sep 19:14:34.277 # Connection with slave 192.168.127.129:6379 lost.
4479:M 08 Sep 19:14:50.656 * Slave 192.168.127.129:6379 asks for synchronization
4479:M 08 Sep 19:14:50.656 * Full resync requested by slave 192.168.127.129:6379
4479:M 08 Sep 19:14:50.656 * Starting BGSAVE for SYNC with target: disk
4479:M 08 Sep 19:14:50.657 * Background saving started by pid 4485
4485:C 08 Sep 19:14:50.659 * DB saved on disk
4485:C 08 Sep 19:14:50.659 * RDB: 6 MB of memory used by copy-on-write
4479:M 08 Sep 19:14:50.753 * Background saving terminated with success
4479:M 08 Sep 19:14:50.753 * Synchronization with slave 192.168.127.129:6379 succeeded

Redis主从其他相关配置

slave-read-only yes   #让从只读
repl-ping-slave-period 10  #设置slave向master发起ping的频率,每10s发起一次
repl-timeout 60  #设置slave ping不通master多少s后就超时
repl-disable-tcp-nodelay no  #是否开启tcp_nodelay,开启将会使用更少带宽,但会有延迟
repl-backlog-size 1mb   #同步队列的长度,backuplog时master的一个缓冲区,主从断开后,master会先吧数据写到缓冲后,slave再次连接会从缓冲区同步数据
repl-backlog-ttl 3600   #主从断开后,缓冲区的有效时间,单位秒,默认1小时
slave-priority 100    #多个slave时可以设置优先级的,数值越小优先级越高,应用于集群中,优先级高的会在主down后代替主
min-slave-to-write 3  #和下面的一起使用,它的意思是master发现有超过3个slave的延迟高于10s,那么master就会暂时停止写操作。这两个数据任何一个为0,则关闭改功能,默认第一数值为0
min-slaves-max-lay 10  #最大延迟时长

Redis集群

多个redis节点网络互联,数据共享 ,所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用 。不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。 支持在线增加、删除节点 客户端可以连任何一个主节点进行读写。

场景设置

两台机器,分别开启三个Redis服务(端口)

  • A机器上三个端口7000,7002,7004,全部为主

  • B机器上三个端口7001,7003,7005,全部为从

两台机器上都要编译安装redis,然后编辑并复制3个不同的redis.conf,分别设置不同的端口号、dir等参数,还需要增加cluster相关参数,然后分别启动6个redis服务 。

配置redis

如在A机器上:

# /etc/redis_7000.conf

port 7000
bind 192.168.127.128
daemonize yes
pidfile /var/run/redis_7000.pid
dir /data/redis_data/7000
cluster-enabled yes
cluster-config-file nodes_7000.conf
cluster-node-timeout 10100
appendonly yes
# /etc/redis_7002.conf

port 7002
bind 192.168.127.128
daemonize yes
pidfile /var/run/redis_7002.pid
dir /data/redis_data/7002
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 10100
appendonly yes
# /etc/redis_7004.conf

port 7004
bind 192.168.127.128
daemonize yes
pidfile /var/run/redis_7004.pid
dir /data/redis_data/7004
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 10100
appendonly yes

创建存储目录

mkdir /data/redis_data
mkdir /data/redis_data/{7000,7002,7004}

然后再B机器上

# /etc/redis_7001.conf

port 7001
bind 192.168.127.129
daemonize yes
pidfile /var/run/redis_7001.pid
dir /data/redis_data/7001
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 10100
appendonly yes
# /etc/redis_7003.conf

port 7003
bind 192.168.127.129
daemonize yes
pidfile /var/run/redis_7003.pid
dir /data/redis_data/7003
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 10100
appendonly yes
# /etc/redis_7004.conf

port 7005
bind 192.168.127.129
daemonize yes
pidfile /var/run/redis_7005.pid
dir /data/redis_data/7005
cluster-enabled yes
cluster-config-file nodes_7005.conf
cluster-node-timeout 10100
appendonly yes

创建存储目录

mkdir /data/redis_data
mkdir /data/redis_data/{7001,7003,7005}

安装ruby2.2

安装ruby2.2可以选择源码编译安装也可以将源码包转成rpm包再安装。这个选择第二种。

安装相关组件

yum -y groupinstall "Development Tools"

yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve

将源码包转成rpm

cd /root/

mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES

wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS

rpmbuild -bb rpmbuild/SPECS/ruby22x.spec

安装ruby

yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm

gem install redis

配置集群

cp /usr/local/src/redis-4.0.1/src/redis-trib.rb  /usr/bin/

redis-trib.rb create --replicas 1 192.168.127.128:7000 192.168.127.128:7002 192.168.127.128:7004 192.168.127.129:7001 192.168.127.129:7003 192.168.127.129:7005

Redis集群命令

redis-cli -c -h 192.168.133.130 -p 7000  # -c说明以集群的方式登录
 任意一个节点都可以创建key,或者查看key(演示)

redis-trib.rb check 192.168.133.130:7000 # 检测集群状态
127.0.0.1:7000> cluster nodes # 列出节点


127.0.0.1:7000> cluster info  # 查看集群信息


127.0.0.1:7000> cluster meet ip port # 添加节点,新加的节点默认为master


127.0.0.1:7000> cluster forget node_id # 移除某个节点,不能移除master的,且不能再登陆这台节点的情况下移除


127.0.0.1:7000> cluster replicate node_id # 将当前节点设置为指定节点的从,要先登陆这个节点


127.0.0.1:7000> cluster saveconfig # 保存配置文件

最后更新于

这有帮助吗?