搭建(扩容)redis集群的过程和遇到的问题

目录

搭建redis cluster

遇到的问题(报错slots未分配完):

Redis cluster 扩容


搭建redis cluster

  1. 使用的redis是5.0.14。在redis官网下载后传到服务器上
  2. 因为redis是c语言的写的,需要安装c语言环境。Yum install gcc。 gcc  -v 可以看到信息证明安装成功
  3. 去到redis安装包目录tar zxf redis-5.0.14.tar.gz 解压,然后修改redis的文件夹名字 mv redis-5.0.14 redis。进到redis目录 使用make 命令进行安装
  4. 在redis目录下新建config文件夹(后面用来放各redis的conf。一个conf对应一个redis实例)。mkdir data6369、 mkdir data6370、mkdir data6371。新建了3个文件夹存不同实例的数据和文件(aof文件和logs日志)。这台机器上我准备使用以上3个端口启动3个实例所有建了对应3个端口的文件夹,拷贝redis目录下的redis.conf文件到config目录下.cp  redis.conf  config/redis6369.conf
  5. 然后修改redis6369.conf 文件配置

port 端口号

daemonize yes 后台启动 修改为yes

pidfile /var/run/redis_6369.pid  pid文件对应的端口号方便区分

logfile "log6369.log"           日志文件,按端口号编写以便区分

dbfilename dump.rdb          备份文件

dir ./data6369               这个路径不太清楚,这样写的话是指定前面redis目录下data6369目录,该实例的文件及数据都存放在这个目录下

masterauth zyz

requirepass zyz   这两个设置密码 连接的时候要带上

appendonly yes    持久化aof方式

appendfilename "appendonly.aof"   持久化的文件存在dir对应目录下

# appendfsync always

appendfsync everysec  持久化aof 的间隔 默认是每秒

# appendfsync no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb   aof文件重写对应的参数

aof-use-rdb-preamble yes  使用aof和rdb混合方式进行持久化

cluster-enabled yes

cluster-config-file nodes-6369.conf

cluster-node-timeout 15000   这3个参数为redis集群的设置 nodes-6369.conf 在集群创建

成功后会再dir目录下 记录的是节点信息(master和slave)

6、保存并退出,然后cp redis6369.conf redis6370.conf    cp redis6369.conf redis6371.conf

   因为我一个机器启动3个redis实例,所以再cp两份。然后编辑文件,使用”:%s/6369/6370/g” 进行统一替换。命令中6369是原字符串,6370是需要替换成的字符串

7、其它机器操作同上。

8、使用集群创建命令

src/redis-cli -a zyz --cluster create --cluster-replicas 2 172.16.14.10:6379 172.16.14.10:6380 172.16.14.10:6381 172.16.14.11:6389 172.16.14.11:6390 172.16.14.11:6391 172.16.14.15:6369 172.16.14.15:6370 172.16.14.15:6371

-a 后面跟到就是刚才conf设置的密码zyz ,--cluster-replicas 后面2 是表示一个节点有两个slave。

9、然后进到redis客户端 src/redis-cli -a zyz -c -h xxx.xxx.xx.xx -p xxxx (-c 集群模式。-h ip -p 端口号)。然后输入cluster info 可以看到cluster_state:ok(这个是集群状态,我的最开始是fail)。Cluster nodes 查看节点信息

遇到的问题(报错slots未分配完):

  在创建集群的时候,出现了报错说slots未分配完。查看cluster info 状态为fail。

然后我就手动再分配了一次。

先进到redis客户端 src/redis-cli -a zyz -c -h xxx.xxx.xx.xx -p xxxx,输入Cluster nodes 查看节点信息备用。

输入命令  src/redis-cli -a zyz --cluster reshard 172.16.14.10:6379

然后输入槽位数。回车后提示输入接受的nodeId。再回车输入的源nodeid

回车后输入done。然后跟随提示操作就可以了。在第一次分配的时候slots分配不连续。我把所有slots先分配到一个节点,然后重复上面操作,再每个节点分配了5400个slots。

最后输入 src/redis-cli -a zyz --cluster check 172.16.14.10:6379 提示OK。在进入redis-cli 查看cluster info 的时候cluster_state变为ok。证明集群已经建立。

最后:数据是对key按crc16计算后对16384取模的到槽位slots存储。每个节点存储读取都是master。Slave只是在master的备份,master挂了它才有用。所有连接slave节点不能执行set get命令

Redis cluster 扩容

1、复制两份redis.conf文件(每个redis.conf对应一个实例)。

   cp redis6369.conf redis9000.conf

   cp redis6369.conf redis9001.conf

   然后字符串替换,同时在redis根目录新建两个存放数据的目录,redis6369.conf 是之前已经配置好的文件

2、使用新的配置文件启动。启动成功后,就把节点加入到之前的cluster,使用src/redis-cli --cluster help 可以看到 add-node 需要传入新的ip:port 后面跟存在的ip:port(使用gssip协议meet,只要跟一个存在的节点通讯,告诉任意一个存在的节点,就可以加入集群了)。

3、使用第二步查询的命令。输入

src/redis-cli -a zyz --cluster add-node 172.16.14.15:9000 172.16.14.15:6389

src/redis-cli -a zyz --cluster add-node 172.16.14.15:9001 172.16.14.15:6389

6389是已经存在在集群中的redis实例。进入redis-cli 使用cluster nodes 可以看到集群中多了两个master节点,对应的是新加入的9000和90001端口。

4、新加入的节点没有对应的slot,需要分配slots。9000端口的为主,9001为从节点。

 给9000分配slot。

 src/redis-cli -a zyz --cluster reshard 172.16.14.10:6379

依次输入接受的node-id。Slot源node-id 最后输入done回车就分配成功了。

然后进入到9001。src/redis-cli -a zyz -c -p 9001。进入客户端后输入

 cluster replicate a53cfe7a7d2553c10254bd40495eada841727623

  后面的字符串是9000的nodeid。

5、输入命令查看 cluster nodes 可以看到已经分配成功

   

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值