需要编译安装ruby ,安装ruby的redis扩展
1.创建集群文件夹及配置文件redis.conf (带密码认证方式)
创建集群文件夹 /srv/redis_cluster;
创建2个节点配置文件夹 /srv/redis_cluster/7000和 /srv/redis_cluster/7001;
创建节点pidfile配置路径 /srv/run/;
拷贝安装路径下的redis.conf到这2个节点配置文件夹;
然后修改配置文件redis.conf,内容如下:
port 7000 daemonize yes masterauth 自己的密码 requirepass 自己的密码 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly no pidfile /srv/run/redis_7000.pid logfile /data/logs/redis.log dir /srv/redis_cluster/7000 maxmemory 6gb
(1) redis做内存数据本地持久化的方式有两种: RDB和Aof ,其中
– RDB文件保存过程:
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二
进制文件中,默认的文件名为dump.rdb
– AOF文件保存过程:
redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。
当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据 库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次)
appendonly yes //启用aof持久化方式 # appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐 # appendfsync no //完全依赖os,性能最好,持久化没保证
(2) 由于我们现有的业务不需要把数据持久化到本地磁盘,所以要取消RDB和Aof两种方式。
- RBD的取消以下3个配置 #save 900 1 #save 300 10 #save 60 10000 - Aof的取消以下配置 appendonly no
取消内存数据持久化的一个原因是持久化的时候会再次启动fork出一个和主进程相同的内存的进程,这样会导致系统内存超限(现有系统总内存为16GB),从而导致系统内存吃紧,以及有可能会导致redis主进程被kill掉。
上面为某一节点redis.conf内容,其他节点配置就不再重复,注意端口和pidfile需要修改;
192.168.1.203、192.168.1.208两节点重复以上工作,即完成集群配置文件的工作。
注意事项: 此处必须修改一个文件,加上密码部分,否则在创建集群后出现异常,见下:
# vim /usr/local/share/gems/gems/redis-3.3.1/lib/redis/client.rb
2.启动Redis集群:
启动方式与正常启动单节点的命令相似,启动时进入 /opt/redis_cluster/7000的配置文件路径下,下面方式启动一个节点:
/opt/redis-3.2.1/bin/redis-server redis.conf
启动后 /opt/redis_cluster/7000 文件夹下会产生appendonly.aof、nodes.conf,注意这两个文件的产生在启动路径下,所以为了集群的管理,最近进入配置文件夹启动。
其他节点的启动方式与上相同,这里不重复了。
当此时,集群的各节点已经启动完成,但当前各节点尚未建立联系,需要命令将他们联合起来作为一个集群工作,进入某一个节点的终端,进入Redis安装路径 redis-3.2.1/src,使用下面命令建立集群:
./redis-trib.rb create --replicas 1 192.168.1.184:7000 192.168.1.184:7001 192.168.1.208:7002 192.168.1.208:7003 192.168.1.203:7004 192.168.1.203:7005
到此Redis集群配置完毕,从上面的日志信息,我们可以看出,集群中每个机器上2个节点,一主一从。
也可以使用如下命令查看当前Redis集群的状态:
./redis-trib.rb check 192.168.1.184:7000