redis cluster:缓存数据库Redis集群搭建

[url]http://www.redis.cn/topics/cluster-tutorial.html[/url]
直接读写在内存,不用磁盘去读,意大利一家公司C语言写的
并且可以持久化 rdb aof

[b]redis集群[/b]
string key-value hashmap sortset list
16384哈希槽 从0到16384
马槽 数据槽 哈希值来将我们这个数据槽编号
哈希槽编号->crc16算法 来确定请求哪个节点
内部是怎么请求 派发到我们集群节点上的:
crc16他会根据每一个客户端的key算出一个结果,对16384取余
之后得到的一个值看它落到哪一个区间,然后确定这个请求有哪个节点去处理。

当我们集群搭建好之后,每个节点它的哈希编号分配是怎样:
均匀分布到每个节点

[b]一.安装[/b]
[b]1.1 CentOS 6.5 下安装[/b]
Redis 3.0.6或稳定版本redis-stable
[code="java"]# cd /usr/local/
# wget http://download.redis.io/redis-stable.tar.gz
# tar xvzf redis-stable.tar.gz
# cd redis-stable
# make[/code]
make成功之后,会在src目录下多出一些文件,如下

[img]http://dl2.iteye.com/upload/attachment/0123/7564/8c6d30bc-15fe-323f-9ffd-6d9d80555d7c.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0123/2837/a0e955c4-6c9b-35f6-90b0-bb8e7e98a2a6.png[/img]
可手动拷贝redis-server、redis-cli、redis-check-aof、redis-check-dump等至/usr/local/bin目录下,也可执行make install,此处执行make install。
运行后可查看,/usr/local/bin下已有这些文件。
[img]http://dl2.iteye.com/upload/attachment/0123/2839/a7481611-66b4-378e-a58a-e35ed2505d7a.png[/img]
redis-server:Redis服务器端启动程序
redis-cli:Redis客户端操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具
redis-check-aof:数据修复工具
redis-check-dump:检查导出工具
注意:若此时执行redis-server –v (查看版本命令),若提示redis-server command not found,则需要将/usr/local/bin目录加到环境变量,如何添加,此处不做详细介绍,可查看修改/etc/profile,(查看环境变量命令:echo $PATH)
正常如下:
[code="java"]
# redis-server -v
Redis server v=3.0.6 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=c9601d54be51bdc7
[/code]
至此,redis安装完成,接着配置。
参考:http://blog.csdn.net/ludonqin/article/details/47211109

[b]1.2 然后新建目录,存放配置文件[/b]
mkdir /etc/redis
mkdir /var/redis
/var/redis运行mkdir data log run
mkdir /var/redis/log
mkdir /var/redis/run
mkdir /var/redis/data

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

[b]1.3 通过vim命令修改redis.conf文件:[/b]
1.修改端口(默认6379)
2.daemonize yes
改成 yes。
# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
3.修改pid目录为新建目录:
pidfile /var/redis/run/redis.pid
4.修改log存储目录为新建目录:
logfile /var/redis/log/redis.log
5.修改dump目录为新建目录:
dir /var/redis/data
[img]http://dl2.iteye.com/upload/attachment/0123/2885/67b4fdf8-5a95-38b3-adcc-a647aa68386f.png[/img]

[b]1.4 最后运行redis:[/b]
$ redis-server [b]/etc/redis/redis.conf[/b]

[b]查看redis状态:[/b]
ps -ef|grep redis

[b]二.在阿里云做集群[/b]
[img]http://dl2.iteye.com/upload/attachment/0123/7502/7469da36-956e-3e37-90a0-6e031fd9145b.png[/img]
集群管理器将哈希曹连续分布到不同redis中。
crc16算法,然后对我们的key进行去余16384个哈希曹点进行取模->请求散列
1.redis主从 m/s port: 1000/1001 solots:0-5460
2.redis主从 m/s port: 2000/2001 solots:5461-10922
3.redis主从 m/s port: 3000/3001 solots:10923-16383
哈希槽点 从机没有 集群站点槽点自动均为分配
主机来响应客户请求,从机同步我们主机数据备份,读写分离降低主机业务消耗。

[b]2.1 改redis.conf文件里配置[/b]

[img]http://dl2.iteye.com/upload/attachment/0123/7572/3d6f69f1-9081-3525-9922-900e55905452.png[/img]
[code="java"]# cd redis-3.0.6/
# cp redis.conf /usr/local/redis/cluster/redis-1000
# cp redis.conf /usr/local/redis/cluster/redis-1001[/code]

[b]配置每个redis的redis.config配置文件:[/b]
port 1000
配置redis作为守护进程运行,daemonize改成 yes。
当redis作为守护进程运行的时候,它会写一个 pid 到 redis.pid 文件里面。
[img]http://dl2.iteye.com/upload/attachment/0123/7591/d1302d9e-5f5f-378e-a2b2-83a733fc8e62.png[/img]
bind 101.200.129.112 阿里云的ip 不要127.0.0.0的地址
[img]http://dl2.iteye.com/upload/attachment/0123/7593/4cc559ef-65c0-309c-9d57-7297471aee4c.png[/img]
pidfile /home/redis-test/samcluter/1000/redis.pid 当前目录:
[img]http://dl2.iteye.com/upload/attachment/0123/7595/3d46ebd2-b7d5-379e-b092-18d6dcf60c31.png[/img]
logfile /home/redis-test/samcluter/1000/redis.log 日志:
[img]http://dl2.iteye.com/upload/attachment/0123/7597/4dd19e0d-09e7-3521-81d9-814838f1d0dc.png[/img]
appendonly yes 集群aos:
[img]http://dl2.iteye.com/upload/attachment/0123/7599/874f96cd-4d24-33a3-bf66-140a9901159e.png[/img]
集群相关文件配置:
cluster-enabled yes
cluster-config-file nodes-1000.conf
cluster-node-timeout 5000
[img]http://dl2.iteye.com/upload/attachment/0123/7601/3d5c44cf-5661-3cd7-b733-1e00ea4d15a9.png[/img]

[b]2.2开启服务器[/b]
redis-server redis.conf
[code="java"]# cd cluster/redis-1000
# ls
redis.conf
# redis-server redis.conf
# cd /usr/local/redis/cluster/redis-1001/
# redis-server redis.conf
# cd /usr/local/redis/cluster/redis-2000/
# redis-server redis.conf
# cd /usr/local/redis/cluster/redis-2001/
# redis-server redis.conf
# cd /usr/local/redis/cluster/redis-3000/
# redis-server redis.conf
# cd /usr/local/redis/cluster/redis-3001/
# redis-server redis.conf
# ps -ef|grep redis
root 2935 1 0 3月14 ? 00:06:14 redis-server *:6379
root 12173 1 0 11:47 ? 00:00:00 redis-server 192.168.92.130:1000 [cluster]
root 12178 1 0 11:47 ? 00:00:00 redis-server 192.168.92.130:1001 [cluster]
root 12182 1 0 11:48 ? 00:00:00 redis-server 192.168.92.130:2000 [cluster]
root 12186 1 0 11:48 ? 00:00:00 redis-server 192.168.92.130:2001 [cluster]
root 12190 1 0 11:48 ? 00:00:00 redis-server 192.168.92.130:3000 [cluster]
root 12194 1 0 11:48 ? 00:00:00 redis-server 192.168.92.130:3001 [cluster]
root 12199 9811 0 11:50 pts/0 00:00:00 grep --color=auto redis[/code]
或 ps -ef|grep redis-server 查看启动的服务器
[img]http://dl2.iteye.com/upload/attachment/0123/7605/f3d13010-8238-326c-8b88-7cbf8d6ee140.png[/img]

[b]启动集群客服端链接模式:
集群客户端查询集群状态,查看状态[/b]
[code="java"]# redis-cli -c -h 192.168.92.130 -p 1000
192.168.92.130:1000> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0[/code]
可以发现cluster_state:fail并没有集群成功,每个单台都打开了,但是就是没连接起来。
需要集群大管家redis-trib,此工具安装需要依赖ruby环境。

[b]2.3 集群管理器介绍:[/b]
[img]http://dl2.iteye.com/upload/attachment/0123/7609/3bcad102-b6a5-3c61-b253-5cec568ae90c.png[/img]
# redis-3.0.6/src/redis-trib.rb 集群管理器来搭建我们官方最小集群组。

[b]我们在做集群的时候缺少一个redis接口包。[/b]
通过安装ruby来获得gem命令,可以查看redis集群接口包有没有安装,没有的话来安装我们redis接口。
redis-trib.rb利用ruby,下环境安装redis集群接口。

[b]查看ruby是否安装:ruby -v[/b]
在做redis集群时,ruby至少需要2.0以上版本。
[code="java"]# ruby -v
-bash: ruby: 未找到命令
# sudo yum install ruby
已加载插件:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
................
# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux][/code]
[img]http://dl2.iteye.com/upload/attachment/0123/7649/89f4aa34-ee1d-361d-8ad5-884b53762596.png[/img]

[b]2.4 集群管理器关联主从关系:[/b]
[code="java"]# pwd
/usr/local/redis/redis-3.0.6/src
#./redis-trib.rb create --replicas 1 192.168.92.130:1000 192.168.92.130:2000 192.168.92.130:3000 192.168.92.130:1001 192.168.92.130:2001 192.168.92.130:3001[/code]
[img]http://dl2.iteye.com/upload/attachment/0123/7651/fa8d23bf-3402-3bcf-8b6d-8a44645cfe0c.png[/img]
slots哈希槽点都是均匀分配在主机上。
[img]http://dl2.iteye.com/upload/attachment/0123/7655/c7274fe9-efdc-3f6b-aabf-d2d946110e38.png[/img]
赋值取值测试redis集群:
[img]http://dl2.iteye.com/upload/attachment/0123/7661/6f711146-06f6-3243-bf37-7c2084dc6014.png[/img]
RedisDesktopManager:
[img]http://dl2.iteye.com/upload/attachment/0123/7663/971ae14f-5761-3f1f-9fb2-91255532c147.png[/img]

[b]停止redis[/b]
redis-cli shutdown 或者 kill redis进程的pid
[b]停止redis集群[/b]
如果停止集群所有节点,让所有节点都关闭,只能关闭进程了# pkill -9 redis。
如果报错,解决方案 [url]http://blog.csdn.net/wudalang_gd/article/details/52153571[/url]

[url]http://blog.csdn.net/zfl092005/article/details/17523945[/url]
挂掉之后,哨兵机制如何处理的?如何做监控进程,挂机后自动切换。


通过yun安装
yum -y install mysql-server
/etc/rc.d/init.d/mysqld restart
/usr/bin/mysqladmin -u root password '123456'
#chmod -R 777 /etc/mysql/my.cnf
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

# root用户登录
$ mysql -u root -p
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值