[reids]

redis

redis简介。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)
目前,Vmware在资助着redis项目的开发和维护。

搭建集群

准备基础环境,3台centos7.5. 服务器
链接:https://pan.baidu.com/s/17qbHhAXuQa_weFwLWqWa6Q 提取码:83pr
所用环境:redis+ruby ruby版本要大于2.3.0才行
1 安装基础依赖

yum update
yum -y install make gcc gcc-c++ kernel-devel

2 安装redis,1.解压、2.重命名、3.编译、4.安装

tar zxvf redis-4.0.10.tar.gz
mv redis-4.0.10 /usr/local/redis/
cd /usr/local/redis/redis-4.0.10
make MALLOC=libc
make install

3 安装- ruby

tar xvzf ruby-2.5.7.tar.gz -C /usr/local/redis
cd /usr/local/redis/ruby-2.5.7
./configure
make && make install

4 安装 zlib-devel

yum install zlib-devel
cd /usr/local/redis/ruby-2.5.7/ext/zlib
ruby ./extconf.rb
make && make install

如果报错
make: *** No rule to make target /include/ruby.h', needed byossl.o’
其实是ext/openssl/Makefile中忘了给路径变量top_srcdir赋值,调用的时候当然就报错了,修改 Makefile 增加
top_srcdir = …/…

如果报错
make: *** No rule to make target /include/ruby.h', needed byzlib.o’. Stop.
解决办法:
vim /tools/ruby-2.5.7/ext/zlib/Makefile
#zlib.o: $(top_srcdir)/include/ruby.h #把这一行替换成下面一行
zlib.o: …/…/include/ruby.h

https://www.cnblogs.com/Ai-Hen-Jiao-zhi/p/rubyInstall.html
5 安装 openssl-devel

cd /usr/local/redis/ruby-2.5.7/ext/openssl
ruby ./extconf.rb
ln -s /root/redis/ruby-2.5.7/include /
make && make install

6)最后一步很重要
gem install redis

安装了这些基础依赖项,后面才能顺利的搭建起集群
5.开始集群搭建
1)安装完redis后,会在/usr/local/bin/目录下看到redis-server、redis-cli等可执行脚本,进入看一下,如果没有,就要去解压目录复制进去

2)Redis集群中要求奇数节点,所以至少要有三个节点,并且每个节点至少有一备份节点,所以至少需要6个redis服务实例,这里我搭建的是每台服务器3个节点,3台服务器共9个节点

3)三台机器一样,建立如下目录结构,7000 ,7001 ,7002 3个文件夹:

mkdir -p /usr/local/redis/redis-cluster/{7000,7001,7002}
1
4)再分别进入3个文件夹,创建配置文件

cd /usr/local/redis/redis-cluster/7000 && touch redis.conf
1
5)配置文件中的内容如下,这里列出了注释,请在写入redis.conf文件中时去掉这些注释,绑定的端口和IP分别是3台服务器的IP与上面创建的端口

port 7000   # 端口7000,7001,7002,与目录对应
bind 192.168.68.134 #默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes   #redis后台运行
cluster-enabled yes  #开启集群
cluster-config-file nodes_7000.conf  #集群的配置,配置文件首次启动自动生成 700070017002  
cluster-node-timeout 8000   #请求超时,默认15秒,可自行设置
appendonly yes  #开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中
appendfsync always  #每次有写操作的时候都同步
logfile "/usr/local/redis/logs/redis.log" #redis服务日志
pidfile /var/run/redis_7000.pid  #pidfile文件对应700070017002

6)在三台服务器的 /usr/local/redis/redis-cluster 文件夹下创建 批量启动-关闭 redis的脚本
启动脚本:start-redis.sh
for((i=0;i<3;i++));
do /usr/local/bin/redis-server /usr/local/redis/redis-cluster/700$i/redis.conf;
done

 关闭脚本:shutdown-redis.sh

for((i=0;i<=2;i++));
do /usr/local/bin/redis-cli -c -h I P − p 700 IP -p 700 IPp700i shutdown;
done
$IP分别为三台服务器IP,我这里分别是192.168.68.134 - 135 - 136,
然后3台服务器分别执行脚本 sh start-redis.sh ,通过 ps -ef|grep redis 查看9个节点是否已经启动

6.创建集群,注意,这里的命令,请在一台服务器上运行,不要分别在三台服务器运行 ,Redis 官方提供了 redis-trib.rb 工具搭建集群,就在解压目录的 src 目录中,在机器的 /usr/local/redis/src下
为什么要那么麻烦的搭建 ruby 环境,就因为 redis-trib.rb 文件得通过 ruby 环境运行

cd /usr/local/redis/src
./redis-trib.rb create --replicas 1 192.168.68.134:7000 192.168.68.134:7001 192.168.68.134:7002 192.168.68.135:7000 192.168.68.135:7001 192.168.68.135:7002 192.168.68.136:7000 192.168.68.136:7001 192.168.68.136:7002

接下来会有一个提示,输入 yes 即可
redis集群会自动分配master与slave,还会显示了集群和slot分配结果,
在这里插入图片描述
7.验证集群
使用 redis-cli -c -h 192.168.1.165 -p 7000 连接redis集群 , 再set get 一下,可清晰的看到 redis 自动把key redirected 到165的7000节点上了
在这里插入图片描述
在这里插入图片描述
到此为止集群搭建成功!

8.再次启动集群时报错的解决办法:我是用 VM 虚拟机开的3台服务器,关闭后再次启动集群时报错 [ERR] Node 192.168.68.134:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
这时的解决方法是,把3台服务器上的 appendonly.aof dump.rdb nodes700* 的文件删除,然后重启 redis 节点,再启动集群
cd /usr/local/redis/src
./redis-trib.rb create --replicas 1 192.168.68.134:7000 192.168.68.134:7001 192.168.68.134:7002 192.168.68.135:7000 192.168.68.135:7001 192.168.68.135:7002 192.168.68.136:7000 192.168.68.136:7001 192.168.68.136:7002

9.集群其他常用命令
create:创建一个集群环境host1:port1 … hostN:portN(集群中的主从节点比例)
call:可以执行redis命令
add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
del-node:移除一个节点
reshard:重新分片
参考:https://blog.csdn.net/zhuyu19911016520/article/details/81112953

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值