redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master给一个slave,3个master,3个slave,最少的要求
/etc/redis(存放redis的配置文件),
/var/redis/对应端口,如:/var/redis/7001
;/var/redis/7002
(存放redis的持久化文件)
机器:
192.168.43.170
;一个master一个slave; 端口分别为7001和7002; 配置文件为/etc/redis/7001.conf & 7002.conf;
192.168.43.171
;一个master一个slave; 端口分别为7003和7004;配置文件为/etc/redis/7003.conf & 7004.conf;
192.168.43.172
;一个master一个slave; 端口分别为7005和7006;配置文件为/etc/redis/7005.conf & 7006.conf;
cluster-config-file
文件分别为:
/etc/redis-cluster/node-7001.conf & node-7002.conf & …
cluster-config-file
文件,是供cluster模式下的redis实例将集群状态保存在那里,包括集群中其他机器的信息,比如节点的上线和下限,故障转移,不是我们去维护的,给它指定一个文件,让redis自己去维护的
按这样的配置方式,如170机器的配置为:
port 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize yes
pidfile /var/run/redis_7001.pid
dir /var/redis/7001
logfile /var/log/redis/7001.log
bind 192.168.43.170
appendonly yes
mkdir -p /etc/redis-cluster
mkdir -p /var/log/redis
mkdir -p /var/redis/7001
mkdir -p /var/redis/7002
cp /usr/local/redis-3.2.8/redis.conf /etc/redis/7001.conf
cp /usr/local/redis-3.2.8/redis.conf /etc/redis/7001.conf
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
bind 192.168.43.170
protected-mode no
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/var/log/redis/7001.log"
dir /var/redis/7001
appendonly yes
cp /usr/local/redis-3.2.8/utils/redis_init_script /etc/init.d/redis_7001
修改redis_7001启动脚本
$CLIEXEC -h $HOST_IP -p $REDISPORT shutdown
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7002.conf
cluster-node-timeout 15000
bind 192.168.43.170
protected-mode no
port 7002
daemonize yes
pidfile /var/run/redis_7002.pid
logfile "/var/log/redis/7002.log"
dir /var/redis/7002
appendonly yes
cp /usr/local/redis-3.2.8/utils/redis_init_script /etc/init.d/redis_7002
cd
ln -s /etc/init.d/redis_7001 redis_7001
ln -s /etc/init.d/redis_7002 redis_7002
[root@eshop-cache01 ~]# pwd
/root
[root@eshop-cache01 ~]# ls
bak.redis_control.sh redis_7001 redis_7002 redis.conf redis_control.sh redis_dump sbin sentinel.conf soft
[root@eshop-cache01 ~]# ./redis_7001 start
Starting Redis server...
[root@eshop-cache01 ~]# ./redis_7002 start
Starting Redis server...
[root@eshop-cache01 ~]# ps -ef | grep redis
root 30579 1 0 07:57 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.170:7001 [cluster]
root 30585 1 0 07:57 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.170:7002 [cluster]
root 30589 30380 0 07:57 pts/0 00:00:00 grep redis
机器170配置并启动完成,机器171和172同理配置,将170的配置文件scp到171和172,稍微做些修改即可完成配置;
/etc/rc.d/init.d/redis_7001
/etc/redis/7001.conf
至此:170,171,172配置和启动完成:
[root@eshop-cache02 ~]# ps -ef | grep redis
root 413 1 0 15:51 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.171:7003 [cluster]
root 419 1 0 15:51 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.171:7004 [cluster]
[root@eshop-cache03 ~]# ps -ef | grep redis
root 19592 1 0 15:55 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.172:7005 [cluster]
root 19598 1 0 15:56 ? 00:00:00 /usr/local/bin/redis-server 192.168.43.172:7006 [cluster]
在172机器上安装ruby和rubygems
安装过程中遇到些问题,参考:
(1) ruby cannot load such file – zlib
(2) redis make: * No rule to make target /include/ruby.h', needed by
zlib.o’. Stop.
172机器安装的ruby是:ruby-2.5.1.tar.gz版本的
ruby
tar -zxvf ruby-2.3.1.tar.gz
./configure -prefix=/usr/local/ruby
make && make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin
gem
redis-3.3.0.gem
gem install -l ./redis-3.3.0.gem
[root@eshop-cache03 ~]# gem list | grep redis
redis (3.3.0)
先把redis-trib.rb
拷贝到/usr/local/bin
cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin
创建集群命令:redis-trib.rb create --replicas 1 192.168.43.170:7001 192.168.43.170:7002 192.168.43.171:7003 192.168.43
.171:7004 192.168.43.172:7005 192.168.43.172:7006
--replicas: 每个master有几个slave
3台机器6个实例,3个master,3个slave
直接把创建集群的日志贴上来观察:
[root@eshop-cache03 local]# redis-trib.rb create --replicas 1 192.168.43.170:7001 192.168.43.170:7002 192.168.43.171:7003 192.168.43
.171:7004 192.168.43.172:7005 192.168.43.172:7006
>>> Creating cluster
/usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters
:
192.168.43.170:7001
192.168.43.171:7003
192.168.43.172:7005
Adding replica
192.168.43.171
:7004
to 192.168.43.170
:7001
主备在不同机器上
Adding replica
192.168.43.170:7002 to 192.168.43.171:7003
Adding replica
192.168.43.172:7006 to 192.168.43.172:7005
M
: 8594e28845903475c0f8981f891bc7a8f52bb3e5 192.168.43.170:7001
slots:0-5460 (5461 slots) master
S: dbd41e204973fda45124845c8606c0f33f444184 192.168.43.170:7002
replicates d6dfe64b9fa0b8014b73bd59d39ed11c873246d5
M
: d6dfe64b9fa0b8014b73bd59d39ed11c873246d5 192.168.43.171:7003
slots:5461-10922 (5462 slots) master
S: 4051da8468ba4671e28aa50465826bab426827b1 192.168.43.171:7004
replicates 8594e28845903475c0f8981f891bc7a8f52bb3e5
M: 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca 192.168.43.172:7005
slots:10923-16383 (5461 slots) master
S: 6bda4820edcbf26099b725884e9d528d8ff1c4cb 192.168.43.172:7006
replicates 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca
Can I set the above configuration? (type ‘yes’ to accept): yes
输入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.168.43.170:7001)
M: 8594e28845903475c0f8981f891bc7a8f52bb3e5 192.168.43.170:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: d6dfe64b9fa0b8014b73bd59d39ed11c873246d5 192.168.43.171:7003
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca 192.168.43.172:7005
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: dbd41e204973fda45124845c8606c0f33f444184 192.168.43.170:7002
slots: (0 slots) slave
replicates d6dfe64b9fa0b8014b73bd59d39ed11c873246d5
S: 6bda4820edcbf26099b725884e9d528d8ff1c4cb 192.168.43.172:7006
slots: (0 slots) slave
replicates 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca
S: 4051da8468ba4671e28aa50465826bab426827b1 192.168.43.171:7004
slots: (0 slots) slave
replicates 8594e28845903475c0f8981f891bc7a8f52bb3e5
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
[root@eshop-cache03 local]#
命令:redis-trib.rb check 192.168.43.170:7001
[root@eshop-cache03 local]# redis-trib.rb check 192.168.43.170:7001
/usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.43.170:7001)
M: 8594e28845903475c0f8981f891bc7a8f52bb3e5 192.168.43.170:7001
slots:0-5460 (5461 slots
) master
1 additional replica(s)
M: d6dfe64b9fa0b8014b73bd59d39ed11c873246d5 192.168.43.171:7003
slots:5461-10922 (5462 slots
) master
1 additional replica(s)
M: 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca 192.168.43.172:7005
slots:10923-16383 (5461 slots
) master
1 additional replica(s)
S: dbd41e204973fda45124845c8606c0f33f444184 192.168.43.170:7002
slots: (0 slots) slave
replicates d6dfe64b9fa0b8014b73bd59d39ed11c873246d5
S: 6bda4820edcbf26099b725884e9d528d8ff1c4cb 192.168.43.172:7006
slots: (0 slots) slave
replicates 2c5f1ad11ca35ed62f2cbf71cf5bd8dac46d98ca
S: 4051da8468ba4671e28aa50465826bab426827b1 192.168.43.171:7004
slots: (0 slots) slave
replicates 8594e28845903475c0f8981f891bc7a8f52bb3e5
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
[root@eshop-cache03 local]#
感谢龙果