Redis安装

 

https://redis.io/官网

下载最新版的redis:

wget http://download.redis.io/releases/redis-5.0.2.tar.gz

tar -xf redis-5.0.2.tar.gz

yum -y install tcl gcc-c++

make MALLOC=libc

make

make PREFIX=/usr/local/redis install

cd src/redis-5.0.2/utils/

cp redis_init_script /etc/init.d/redis

vim /etc/init.d/redis(脚本开头两个路径需要修改)

    EXEC=/usr/local/redis/bin/redis-server

    CLIEXEC=/usr/local/redis/bin/redis-cli

chmod +x /etc/init.d/redis

mkdir /etc/redis

cp /usr/local/src/redis-5.0.2/redis.conf /etc/redis/6379.conf

 

启动redis

/etc/init.d/redis start

linux redis大全

设置后台启动

vim /etc/redis/6379.conf

daemonize yes

linux redis大全

 

 

给经常用到的redis命令行工具redis-cli做一个软连接:

ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli

 

 

[[email protected] bin] pwd

/usr/local/redis/bin

[[email protected] bin] ll

总用量 54236

-rwxr-xr-x. 1 root root  9200267 11月 26 16:26 redis-benchmark

-rwxr-xr-x. 1 root root 12251863 11月 26 16:26 redis-check-aof

-rwxr-xr-x. 1 root root 12251863 11月 26 16:26 redis-check-rdb

-rwxr-xr-x. 1 root root  9564886 11月 26 16:26 redis-cli

lrwxrwxrwx. 1 root root       12 11月 26 16:26 redis-sentinel -> redis-server

-rwxr-xr-x. 1 root root 12251863 11月 26 16:26 redis-server

 

连接redis

[[email protected] bin] redis-cli

127.0.0.1:6379> exit

[[email protected] bin] redis-cli -h 10.3.45.233 -p 6379

10.3.45.233:6379>

 

解决ip不能连接redis服务的问题

linux redis大全

vim /etc/redis/6379.conf

注释掉:bind 127.0.0.1

修改参数: protected-mode no

重启redis即可(先关闭再启动)。

 

修改配置文件中log存放位置

logfile "/var/log/redis.log"

 

Redis的2种持久化方式Snapshot(RDB)和Append-only file(AOF)的配置和对比

一种是Snapshot(RDB),就是保存某一时刻的数据在磁盘;另外一种是append-only file(AOF),就是以追加的方式记录所有写操作的命令到磁盘文件里面。

 

save <seconds> <changes>:在X秒内如果key有至少X次改变就触发持久化

指定本地持久化数据库文件名,默认值为dump.rdb

可自定义修改dbfilename dump_6379.rdb

指定本地持久化数据库存放目录

可自定义修改dir /usr/local/redis

 

改为yes就是AOF持久化开启:appendonly yes

指定更新日志文件名,默认为appendonly.aof

可自定义修改appendfilename appendonly_6379.aof

 

- snapshot在下一次触发前如果服务器crash了,在上次snapshot之后修改的数据会丢失,而AOF是记录所有的写操作,在数据完整性来说,AOF比snapshot要好;

或者同时使用2种方式(重启的时候会优先使用AOF)。

 

 

Windows安装redis:

http://www.cnblogs.com/jaign/articles/7920588.html

 

 

Redis复制

 

需要增加一个实例,就在同一台服务器上拷贝一个6380的配置

[[email protected] redis] cd /etc/redis/

[[email protected] redis] ll

总用量 64

-rw-r--r--. 1 root root 62296 11月 28 09:59 6379.conf

[[email protected] redis] cp 6379.conf 6380.conf

[[email protected] redis] ll

总用量 128

-rw-r--r--. 1 root root 62296 11月 28 09:59 6379.conf

-rw-r--r--. 1 root root 62296 11月 28 10:40 6380.conf

[[email protected] redis] vim 6380.conf

:%s/6379/6380/g

直接替换对比一下:

 [[email protected] redis] diff 6379.conf 6380.conf

91c91

<  Accept connections on the specified port, default is 6379 (IANA 815344).

---

>  Accept connections on the specified port, default is 6380 (IANA 815344).

93c93

< port 6379

---

> port 6380

159c159

< pidfile /var/run/redis_6379.pid

---

> pidfile /var/run/redis_6380.pid

255c255

< dbfilename dump_6379.rdb

---

> dbfilename dump_6380.rdb

708c708

< appendfilename "appendonly_6379.aof"

---

> appendfilename "appendonly_6380.aof"

851c851

<  cluster-config-file nodes-6379.conf

---

>  cluster-config-file nodes-6380.conf

979c979

<  cluster-announce-port 6379

---

>  cluster-announce-port 6380

 

 

进入6380.conf的存放目录手动启动6380

[[email protected] redis] pwd

/etc/redis

[[email protected] redis] /usr/local/redis/bin/redis-server 6380.conf

查看端口是否正常

linux redis大全

 

 

主从复制原理:

1 全量同步

  Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 

  1)从服务器连接主服务器,发送SYNC命令; 

  2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 

  3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 

  4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 

  5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 

  6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令; 

2 增量同步

  Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

3 Redis主从同步策略

  主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

 

4 注意点

如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。

 

 

 

主从同步配置:

分别用6379和6380的端口连上redis,然后输入info查看Replication的role状态,起初都是master

[[email protected] ~] redis-cli -h 10.3.45.233 -p 6379

10.3.45.233:6379> info

[[email protected] ~] redis-cli -h 10.3.45.233 -p 6380

 

slaveof命令

表示将10.3.45.233的6379配置为master

10.3.45.233:6380> slaveof 10.3.45.233 6379

 

在6380上再用info查看就看到自己变成了slave

10.3.45.233:6380> info

linux redis大全

 

linux redis大全

 

 

 

Redis cluster

redis集群起始于redis3.0版本以后

mkdir /opt

cd /opt

mkdir `seq 7001 7008`

cp /etc/redis/6379.conf ./

vim 6379.conf(pidfile要改,logfile要改,dbfilename要改,dir要改,还要加入集群需要的三行参数)

    pidfile /var/run/redis_6379.pid

logfile "/var/log/redis_6379.log"

dbfilename dump_6379.rdb

dir /opt/6379

新内容一般插入到端口下面

    cluster-enabled yes

    cluster-config-file nodes.conf

    cluster-node-timeout 5000

统一替换

 sed 's/6379/7008/g' 6379.conf >7008/redis.conf

 sed 's/6379/7007/g' 6379.conf >7007/redis.conf

 sed 's/6379/7006/g' 6379.conf >7006/redis.conf

 sed 's/6379/7005/g' 6379.conf >7005/redis.conf

 sed 's/6379/7004/g' 6379.conf >7004/redis.conf

 sed 's/6379/7003/g' 6379.conf >7003/redis.conf

 sed 's/6379/7002/g' 6379.conf >7002/redis.conf、

 sed 's/6379/7001/g' 6379.conf >7001/redis.conf

启动用for循环命令:

 for i in `seq 7001 7008` do cd /opt/$i && /usr/local/redis/bin/redis-server redis.conf;done

linux redis大全

linux redis大全

 

还可以依次去连接每个端口并info查看一定要保证全部启动正常

 redis-cli -h 10.3.45.233 -p 7001

10.3.45.233:7001> info

 redis-cli -h 10.3.45.233 -p 7002

10.3.45.233:7002> info

 redis-cli -h 10.3.45.233 -p 7003

10.3.45.233:7003> info

 redis-cli -h 10.3.45.233 -p 7004

10.3.45.233:7004> info

 redis-cli -h 10.3.45.233 -p 7005

10.3.45.233:7005> info

 redis-cli -h 10.3.45.233 -p 7006

10.3.45.233:7006> info

 redis-cli -h 10.3.45.233 -p 7007

10.3.45.233:7007> info

 redis-cli -h 10.3.45.233 -p 7008

10.3.45.233:7008> info

 

安装ruby

取消ssl验证参数:--no-check-certificate

cd /usr/local/src

wget --no-check-certificate https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz

tar xf ruby-2.5.3.tar.gz

cd ruby-2.5.3

./configure --prefix=/usr/local/ruby

make

make install

添加环境变量:

vim /etc/profile

export PATH=$PATH:/usr/local/ruby/bin

source /etc/profilegem install redis

ruby管理工具gem安装redis

gem install redis

linux redis大全

拷贝ruby脚本redis-trib这个脚本用来便于管理redis

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

 

创建集群使用 redis-trib 的 create 命令完成

redis-trib create –replicas 1 10.3.45.233:7001 10.3.45.233:7002 10.3.45.233:7003 10.3.45.233:7004 10.3.45.233:7005 10.3.45.233:7006

 

WARNING: redis-trib.rb is not longer available!

上面的警告,原因是因为redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言。也就是说上面的命令适用于redis5.0版本之前的,那么下面这条命令才是5.0版本以后的集群创建命令,所以说如果你用的redis5.0以上的版本就可以不用安装ruby。

 

redis5以后创建集群命令不再用redis-trib.rb,而是回归于redis-cli,于是用下面命令

cd /usr/local/bin

./redis-cli --cluster create --cluster-replicas 1 10.3.45.233:7001 10.3.45.233:7002 10.3.45.233:7003 10.3.45.233:7004 10.3.45.233:7005 10.3.45.233:7006

linux redis大全

从结果看redis创建集群的时候回自动把后面三个IP设置成前三个IP的slave。

 

通过连接某一台集群内的服务是否配合正常

redis连接集群内的节点要加-c参数

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7001

10.3.45.233:7001> info

linux redis大全

上面可以看到7001为master,7004分配为它的slave。

 

还可以在master上set一个key然后去slave查看数据是否同步完成

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7001

10.3.45.233:7001> set key 123

-> Redirected to slot [12539] located at 10.3.45.233:7003

OK

10.3.45.233:7003>

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7001

10.3.45.233:7001> get keys *

(error) ERR wrong number of arguments for 'get' command

10.3.45.233:7001> keys *

(empty list or set)

10.3.45.233:7001> exit

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7006

10.3.45.233:7006> keys *

1) "key"

10.3.45.233:7006> get key

-> Redirected to slot [12539] located at 10.3.45.233:7003

"123"

10.3.45.233:7003> exit

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7004

10.3.45.233:7004> keys *

(empty list or set)

10.3.45.233:7004> get key

-> Redirected to slot [12539] located at 10.3.45.233:7003

"123"

10.3.45.233:7003> set key1 abc

-> Redirected to slot [9189] located at 10.3.45.233:7002

OK

10.3.45.233:7002> exit

[[email protected] ~]# redis-cli -c -h 10.3.45.233 -p 7005

10.3.45.233:7005> get key1

-> Redirected to slot [9189] located at 10.3.45.233:7002

"abc"

10.3.45.233:7002> keys *

1) "key1"

10.3.45.233:7002>

细节发现客户端连接加-c选项的时候,存储和提取key的时候不断在7001和7003之间跳转,这个称为客户端重定向。之所以发生客户端重定向,是因为Redis Cluster中的每个Master节点都会负责一部分的槽(slot),存取的时候都会进行键值空间计算定位key映射在哪个槽(slot)上,如果映射的槽(slot)正好是当前Master节点负责则直接存取,否则就跳转到其他Master节点负的槽(slot)中存取,这个过程对客户端是透明的。继续看下面的集群分区原理。

 

Redis集群分区原理

(slot)的基本概念

从上面集群的简单操作中,我们已经知道redis存取key的时候,都要定位相应的槽(slot)。

Redis 集群键分布算法使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 它们的编号为0、1、2、3……16382、16383,这个槽是一个逻辑意义上的槽,实际上并不存在。redis中的每个key都属于这 16384 个哈希槽的其中一个,存取key时都要进行key->slot的映射计算。

 

-槽映射算法

和memcached一样,redis也采用一定的算法进行键-槽(key->slot)之间的映射。memcached采用一致性哈希(consistency hashing)算法进行键-节点(key-node)之间的映射,而redis集群使用集群公式来计算键 key 属于哪个槽:

 

集群分区好处

无论是memcached的一致性哈希算法,还是redis的集群分区,最主要的目的都是在移除、添加一个节点时对已经存在的缓存数据的定位影响尽可能的降到最小。redis将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点

 

还可以在客户端直接查看集群信息和集群节点信息

cluster nodes

linux redis大全

cluster info

linux redis大全

 

集群添加节点

可以用redis-cli –cluster help查看帮助

语法:add-node       new_host:new_port existing_host:existing_port

这是redis5.0版本的用法,5.0之前的版本应该只需去掉—cluster并且把redis-cli换成redis-trib.rh就可以。

 

添加7007节点

redis-cli –cluster add-node 10.3.45.233:7007 10.3.45.233:7001

linux redis大全

从集群节点信息可以看出新添加的节点是没有分配任何槽位,这样的话在集群中是不能写入数据到这个节点的,也就是不会重定向到这个节点,除非单独连接这个节点,所以需要给新节点进行重新分片(迁移槽位)

节点重新分片命令用reshard

redis-cli --cluster reshard 10.3.45.233:7007

linux redis大全

linux redis大全

 

迁移槽位之后再看节点信息,0-332,5461-5794,10923-11255分配了1000个槽位如下正常

linux redis大全

 

再添加一个从节点7008,并设置7007成为7008的master。

redis-cli --cluster add-node 10.3.45.233:7008 10.3.45.233:7001 --cluster-slave --cluster-master-id 69ed043676047f98c33c16ecce23bb26ad8d24a7

注意:如果是5.0以前的版本是不需要重新添加7008的,只要需要客户端连接到7008里面去执行命令 cluster replicate后面跟上主节点id就可以了。

linux redis大全

 

删除节点

语法:redis-cli --cluster del-node 127.0.0.1:7000 <node-id>

linux redis大全

注意:删除节点之前要先kill掉集群服务节点的进程。

 

redis几个管理工具

phpredisadmin

另外站在性能的角度上看,我不建议在线上redis环境中使用,毕竟PHPredisadmin是一款对海量大数据进行管理的web界面,会消耗比较大的系统资源

这个工具只有github上面有,并且需要编译安装redis模块会用到php和php-redis

 

安装启动httpd

yum -y install httpd

/etc/init.d/httpd start

 

先安装git

 

卸载自带的git

yum remove git -t

 

下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/

安装依赖

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel libcurl4-gnutls-dev libexpat1-dev gettext  libz-dev libssl-dev asciidoc xmlto docbook2x

下面一步是为了避免执行make all doc info时报:/bin/sh: line 1: docbook2x-texi: command not found

ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

 

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

tar xf git-2.9.5.tar.gz

cd git-2.9.5

 

编译安装

make configure

./configure --prefix=/usr/local/git            // 配置安装路径

make all doc info                    // 编译

make install install-doc install-html install-info   // 安装

 

完成后,你可以使用 Git 来获取 Git 的升级: 可选  

git clone git://git.kernel.org/pub/scm/git/git.git

 

修改环境变量

echo -e "# git\nexport PATH=/usr/local/git/bin:\$PATH"> /etc/profile.d/git.sh

 

查看是否安装成功

[[email protected] git-2.9.5]# git --version

git version 2.9.5

 

 

克隆安装phpredisadmin配置

cd /var/www/html

linux redis大全

 

升级ssl证书

yum update -y nss curl libcurl openssh

执行克隆命令

git clone https://github.com/erikdubbelboer/phpRedisAdmin.git

linux redis大全

继续执行

cd phpRedisAdmin

git clone https://github.com/nrk/predis.git vendor

mv phpRedisAdmin admin

yum install php-mbstring -y

/etc/init.d/httpd restart

浏览器访问:10.3.45.233/admin

linux redis大全

配置添加多个server节点

 

[[email protected] ~]# cd /var/www/html/admin/includes/

[[email protected] includes]# ll

总用量 36

-rw-r--r--. 1 apache apache 3482 12月  7 17:18 common.inc.php

-rw-r--r--. 1 apache apache  992 12月  7 17:18 config.environment.inc.php

-rw-r--r--. 1 apache apache 3081 12月  7 17:18 config.sample.inc.php

-rw-r--r--. 1 apache apache   16 12月  7 17:18 footer.inc.php

-rw-r--r--. 1 apache apache 2775 12月  7 17:18 functions.inc.php

-rw-r--r--. 1 apache apache 1066 12月  7 17:18 header.inc.php

-rw-r--r--. 1 apache apache 5002 12月  7 17:18 login.inc.php

-rw-r--r--. 1 apache apache  310 12月  7 17:18 page.inc.php

 

[[email protected] includes]# cp config.sample.inc.php ./config.sample.inc.php.bak

[[email protected] includes]# vim config.sample.inc.php

linux redis大全

linux redis大全

 

 

工具rdbtools

生产中会用来分析内存

 

下载安装pip

wget --no-check-certificate https://bootstrap.pypa.io/3.2/get-pip.py
python get-pip.py
pip -V  #查看pip版本

用pip安装rdbtools

pip install rdbtools

 

生成内存报告

运行时会 -c memory生成一个CSV报告,其中包含该**使用的大致内存。--bytes C并且'--largest N可用于将输出限制为大于C字节的键或N个最大键。

rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv

或者rdb -c memory /var/redis/6379/dump.rdb >> memory.csv

cat memory.csv

还可以把生成的scv表格导入到本地查看。

.........

 

 

未完结,请稍等...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-05
  • 2021-11-14
  • 2021-04-02
  • 2022-02-08
  • 2021-11-09
  • 2022-12-23
相关资源
相似解决方案