1.redis定义:
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
2.redis的特点:
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便.
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助.
1.安装部署:
tar zxf redis-4.0.8.tar.gz
cd redis-4.0.8
yum install gcc -y
Make
Make install
which redis-cli
cd utils/
./install_server.sh
修改配置文件,接受所有端口的链接
vim /etc/redis/6379.conf
70 bind 0.0.0.0
重新加载配置文件
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
netstat -antlp
2. 配置主从复制
在servre2中修改配置文件,设置master为172.25.31.1
vim /etc/redis/6379.conf
283 slaveof 172.25.31.1 6379
重新加载
/etc/init.d/redis_6379 restart
测试
在server1中写入
[root@server1 utils]# redis-cli
127.0.0.1:6379> set name wxh
OK
127.0.0.1:6379> get name
“wyh”
在server2中查看
[root@server2 utils]# redis-cli
127.0.0.1:6379> get name
“wyh”
复制成功
4.redis的三大任务:
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
将这三个节点连接起来:
cd /root/redis-4.0.8
cp sentinel.conf /etc/redis
cd /etc/redis/
vim sentinel.conf
15 bind 0.0.0.0
17 protected-mode no
97 # Default is 30 seconds.
98 sentinel monitor mymaster 172.25.31.1 6379 2 #设置master;端口为6379;当有两个slave通过才能成为master
scp sentinel.conf server2:/etc/redis
scp sentinel.conf server3:/etc/redis
redis-server /etc/redis/sentinel.conf --sentinel #注意在scpsentinel.conf之后不能重启因为每次重启redis就会生成新的文件覆盖该文件 ,在传入之前确保master指向server1
当节点服务都开启可以打开监控他们的状态:
关掉server1的redis,Servre3成为master
重新打开server1的redis
系统会自动在server1的/etc/redis/6379.conf文件中写入salve状态
4.配置redis集群
4.1> 添加gem模块:
yum install -y ruby
yum install rubygems-1.3.7-5.el6.noarch.rpm -y
yum install ruby-2.2.3-1.el6.x86_64.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm -y
[root@server1 ~]# gem install –local redis-4.0.1.gem #安装模块
[root@server1 ~]# gem list –local #列出本地支持的模块
4.2> 创建集群目录:
cd /usr/local/
mkdir cluster
cd cluster/
mkdir 700{1..6}
cd 7001
vim redis.conf
cd redis-4.0.8/src
cp redis-trib.rb /usr/local/bin/
cd /usr/local/bin/
4.3> 编辑集群节点配置文件
[root@server1 7001]# vim redis.conf
[root@server1 7001]# redis-server redis.conf #开启节点服务
[root@server1 7001]# ls
appendonly.aof nodes.conf redis.conf redis.log redis.pid
[root@server1 7001]# cat redis.log #查看日志修改warning
[root@server1 7001]# echo 511 > /proc/sys/net/core/somaxconn
[root@server1 7001]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@server1 7001]# vim /etc/sysctl.conf
[root@server1 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@server1 7001]# cp redis.conf ../7002/
#在每个节点处添加配置文件每个节点设置不同端口,为了避免他们的日至冲突方便查看我们将他们的日至放在各自的主目录下面:logfile;port重点
[root@server1 7001]# cd ../7002
[root@server1 7002]# vim redis.conf
[root@server1 7002]# redis-server redis.conf #启动节点
启动所有节点的服务之后可以看到他们的进程:
4.4 > 添加节点到集群
[root@server1 7002]#redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7006 to 127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7003
集群中去中心化每个master都有对应的slave:
登陆测试:
利用哈希槽来存储一个集群中如果过半的master宕掉就会写不进去数据,当然一个完整的槽被破坏数据就会丢失但是如果是服务关掉又开启他所保存的数据是永久的,数据还是会回来。