在Oracle的路上走了许多年,换换感受,尝试一下新的知识,也是一个不错的感受。Redis,一个超轻量化的内存数据库,只作一小块数据库功能实现,却很是优秀的一个产品。今天,就分享一下安装Redis集群的过程。
node
搭建redis集群,建议至少须要准备3台服务器,共搭建6个节点,3个master,3个slave,而且要求3个master节点不能所有跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest帐号搭建,对应的端口是7000/7001/7002端口
个人集群分配以下,每一个节点运行两个端口。第一列作主库,第二列作备库
redis
192.8.8.136:7000 192.8.8.136:7001 192.8.8.137:7001 192.8.8.137:7002 192.8.8.138:7002 192.8.8.138:7000
一、使用已经编译完成的安装报安装(就使用文档末尾链接的安装包便可),解压并放到/home/redistest目录下,修改对应的redis.conf文件,并复制出6份,每一个节点两个redis目录
[redistest]$ ll
total 13284
sql
drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7000 drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7001 drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7002 -rwxr-xr-x 1 redistest users 5708657 Aug 22 2016 redis-cli -rwxr-xr-x 1 redistest users 7817132 Aug 22 2016 redis-server -rwxr-xr-x 1 redistest users 60578 Aug 9 06:21 redis-trib.rb
二、此时有3个执行文件,redis-server/redis-cli/redis-trib.rb
三、建立7000文件夹,并将redis.conf拷贝到7000文件目录下,注意修改对应的几个关键配置项(主要就是改端口号)
数据库
daemonize yes // redis后台运行 pidfile /var/run/redis_7000.pid // pid文件,运行多个实例时,须要指定不一样的pid文件 port 7000 // 监听端口,运行多个实例时,须要指定不一样的断奶口 tcp-backlog 511 tcp-keepalive 0 loglevel notice // 日志等级 logfile ./redis.log // 日志文件位置 databases 16 // 可用数据库数 appendonly yes // redis会把所接收到的每一次写操做请求都追加到appendonly.aof文件中,当redis从新启动时,会从该文件恢复出以前的状态。 appendfilename "appendonly.aof" // AOF文件名称 appendfsync everysec // 表示对写操做进行累积,每秒同步一次 no-appendfsync-on-rewrite yes // AOF 自动重写 auto-aof-rewrite-percentage 80-100 // 重写百分比 auto-aof-rewrite-min-size 64mb //
注:完整配置,请参考软件包中的redis.conf文件
四、拷贝7000文件夹,粘贴出新文件夹7001/7002,分别将7001/7002文件夹中的redis.conf文件中的7000替换成为7001/7002。
五、切换到root用户,使用yum安装ruby,yum -y install ruby rubygems,并执行gem install redis,这样便完成ruby安装,可使用redis-trib.rb搭建集群
注:redis-trib.rb是基于ruby开发的,因此必需要安装ruby环境。安全
yum安装很方便,可是有的风场是没法链接外网的,也就没法使用yum。软件包中已经包含ruby rubygems的软件包,直接安装便可。ruby
ruby的下载路径: https://rubygems.org/gems/redis
而后经过下面命令本地安装ruby
服务器
yum -y localinstall ruby rubygems gem install redis
六、另外两台服务器作一样的配置操做,开启该机器的2个redis节点,当完成3台机器的redis节点搭建后,能够启动redis,并使用ps查看redis运行状况状况
七、开启redis服务
进入7000目录,启动redis
app
cd 7000 ../redis-server redis.conf cd .. cd 7001 ../redis-server redis.conf
[redistest@ip-172-18-98-136 redis]$ ps -ef|grep redis redistest 3864 1 0 13:02 ? 00:00:00 ../redis-server *:7000 [cluster] redistest 3869 1 0 13:02 ? 00:00:00 ../redis-server *:7001 [cluster] redistest 3888 3778 0 13:05 pts/3 00:00:00 grep redis
注意:因为redis.conf文件使用的都是相对路径,而且生成的一些文件,如aof文件是不能覆盖重复的,所以标准的开启redis-server的操做是,进入到7000/7001/7002等目录中执行,../redis-server redis.conf,这样各个实例生成的文件就在各自的目录下,互不干扰;固然若是修改redis.conf的配置文件目录,则能够实如今不一样的目录下执行redis-server,这个能够灵活掌握和运用
八、redis节点搭建起来后,须要完成redis cluster集群搭建,搭建集群过程当中,须要保证6个redis实例都是运行状态。
Redis是根据IP和Port的顺序,肯定master和slave的,因此要排好序,再执行。
输出以下
负载均衡
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb create --replicas 1 192.8.8.136:7000 192.8.8.137:7001 192.8.8.138:7002 192.8.8.137:7002 192.8.8.136:7001 192.8.8.138:7000 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.8.8.138:7002 192.8.8.137:7001 192.8.8.136:7000 Adding replica 192.8.8.137:7002 to 192.8.8.138:7002 Adding replica 192.8.8.138:7000 to 192.8.8.137:7001 Adding replica 192.8.8.136:7001 to 192.8.8.136:7000 M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 replicates 6f9c383ec47461c2a86265f5db506e10397605d8 S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 replicates 6780f0fadd82825d04e524fd81fa710403e7152e S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..... >>> Performing Cluster Check (using node 192.8.8.136:7000) M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master M: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 slots: (0 slots) master replicates 6f9c383ec47461c2a86265f5db506e10397605d8 M: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 slots: (0 slots) master replicates 6780f0fadd82825d04e524fd81fa710403e7152e M: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 slots: (0 slots) master replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
其中Master的节点是:192.8.8.136:7000/192.8.8.137:7001/192.8.8.138:7002分布在不一样的服务器上,该集群的搭建的实现了负载均衡,至此redis集群的搭建过程基本完毕;
九、检查集群状态
tcp
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb check 192.8.8.136:7000 >>> Performing Cluster Check (using node 192.8.8.136:7000) M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001 slots: (0 slots) slave replicates 6780f0fadd82825d04e524fd81fa710403e7152e S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002 slots: (0 slots) slave replicates 6f9c383ec47461c2a86265f5db506e10397605d8 M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000 slots: (0 slots) slave replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb info 192.8.8.136:7000 192.8.8.136:7000 (6780f0fa...) -> 0 keys | 5461 slots | 1 slaves. 192.8.8.138:7002 (6f9c383e...) -> 0 keys | 5461 slots | 1 slaves. 192.8.8.137:7001 (b00521fd...) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
10 、检查集群信息
./redis-trib.rb info 192.8.8.136:7000
十一、若是在执行./redis-trib.rb create --replicas 过程当中,长时间没有完成,或者遇到其余错误。若是须要从新执行配置集群的话。
须要关闭redis实例,删除7000/7001/7002目录下,除了redis.conf文件以外的所有文件,再启动redis实例,并再次执行./redis-trib.rb create便可。
十二、链接数据库,查询数据
[root@localhost src]# redis-cli -c -p 7000 127.0.0.1:7000> cluster meet 127.0.0.1 7000 OK
至此,redis集群已经你们完成,下面咱们须要完成redis随着操做系统启动,减小后续维护的成本。
1三、编辑文件/home/redistest/startAll.sh,注意,要写全路径
/home/redistest/redis/redis-server /home/redistest/redis/7000/redis.conf /home/redistest/redis/redis-server /home/redistest/redis/7001/redis.conf
命令行,加入/etc/rc.local文件夹下,须要以redistest用户启动redis
su - redistest -c /home/redistest/startAll.sh
软件包过大,没法在blog中上传,已经上传到51cto下载中心,请到下载中心下载。