最近在研究redis,那就把自己搭建redis集群的过程粘出来,希望几个月后的自己还记得。
redis集群搭建
Redis在3.0版本开始正式引用集群特性,Redis集群是一个分布式,Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:
- 自动分割数据到不同的节点上。
- 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
环境A:3台服务器,每台服务器启动6379和6380两个redis服务实例,适用于测试环境
192.168.11.137:6379/6380 liu-node1
192.168.11.138:6379/6380 liu-node2
192.168.11.139:6379/6380 liu-node3
另外预留一台服务器做集群添加节点测试。
192.168.11.140:6379/6380 liu-test
注意:1、每个redis节点采用相同的硬件配置、相同的密码(如果设定了密码)、相同的redis版本。
- 所有redis服务器必须没有任何数据
- 现启动为单机的redis且没有任何的key vaule
- 利用redis的不同端口设置redis的从服务器为6380端口
1、搭建集群的第一件事是需要一些运行在集群模式的redis实例。在所有3台主机中都安装redis。分别在三台机器中创建一个新的目录/redis-cluste。并创建2个以端口号为名字的子目录6379,6380,稍后在每个子目录中运行redis实例。(node2,node3相同)
[root@liu-node1 ~]# mkdir /redis-cluster
[root@liu-node1 redis-cluster]# mkdir 6379 6380
[root@liu-node1 redis-cluster]# wget https://download.redis.io/releases/redis-6.0.10.tar.gz
[root@liu-node1 redis-cluster]#wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
[root@liu-node1 redis-cluster]# yum -y install gcc-c++ automake autoconf libtool make
[root@liu-node1 redis-cluster]# bzip2 -dv jemalloc-5.2.1.tar.bz2
[root@liu-node1redis-cluster]# tar xvf jemalloc-5.2.1.tar
[root@liu-node1 redis-cluster]# cd jemalloc-5.2.1/
[root@liu-node1 jemalloc-5.2.1]# ./autogen.sh
[root@liu-node1 jemalloc-5.2.1]# make -j 6
[root@liu-node1 jemalloc-5.2.1]# make install
[root@liu-node1 redis-cluster]# tar xzf redis-6.0.10.tar.gz
[root@liu-node1 redis-cluster]# cd redis-6.0.10/deps
[root@liu-node1 deps]# make lua hiredis linenoise
[root@liu-node1 deps]# cd /root/redis-6.0.10/
[root@liu-node1 redis-6.0.10]# make
2、在每个节点的6379,6380子文件中各创建一个redis.conf文件,文件的内容如下(配置中的端口号需要改成与文件相同的号码)
[root@liu-node3 6379]# cat redis.conf
bind 0.0.0.0
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
masterauth liu
requirepass liu
[root@liu-node3 6380]# cat redis.conf
port 6380
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
masterauth liu
requirepass liu
配置中的cluster-enabled选项用于打开实例的集群模式,而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
3、使用类似以下命令, 在每个标签页中打开一个实例:
[root@liu-node1 6379]# ./../redis-6.0.10/src/redis-server ./redis.config
[root@liu-node1 6379]# cd ../6380/
[root@liu-node1 6380]# ./../redis-6.0.10/src/redis-server ./redis.config
[root@liu-node1 6380]# ps -ef | grep redis
查看进程的状态
搭建集群
现在已经有了6个正在运行中的redis实例,接下来使用这些实例来创建集群,并为每个节点编写配置文件。
[root@liu-node1 redis-6.0.10]# ./src/redis-cli -a liu --cluster create 192.168.11.137:6379 192.168.11.137:6380 192.168.11.138:6379 192.168.11.138:6380 192.168.11.139:6379 192.168.11.139:6380 --cluster-replicas 1
-a: 指定设置的密码(如果密码参数没有设定就不需要指定)
--cluster-replicas 1:表示每个master对应一个slave节点