1、3主3从需要用3台服务器分别下载redis安装包并编译:
(3台服务器IP分别为192.168.1.1、192.168.1.2、192.168.1.3)
(虽然2台服务器也可以实现3主3从,但是一旦一台挂了另1台无法接管)
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
cd /usr/local
tar zxvf /root/redis-3.2.8.tar.gz
cd redis-3.2.8
make
2、安装ruby和rubygems:
在虚拟机上创建2个光驱,将ContOS的2张安装盘同时插入。
yum install ruby
yum install rubygems
验证安装
ruby -v
gem -v
3、下载安装redis-3.3.3.gem
wget https://rubygems.org/downloads/redis-3.3.3.gem
gem install -l redis-3.3.3.gem
4、修改配置文件redis.conf
(redis监听端口建议不要使用默认端口)
vim redis.conf
#与目录名相同
port 4321
bind 192.168.1.1 127.0.0.1
daemonize yes
#与目录名相同
pidfile /var/run/redis_4321.pid
#与目录名相同
dir /usr/local/redis-cluster/4321/
cluster-enabled yes
#与目录名相同
cluster-config-file nodes-4321.conf
cluster-node-timeout 15000
appendonly yes
5、创建cluster目录
mkdir redis-cluster
在每台服务器的cluster目录中创建2个节点目录并分别将redis.conf拷贝进去
注意修改端口号等参数
cd redis-cluster
mkdir 4321 4322
cp -a ../redis-3.2.8/redis.conf 4321
cp -a ../redis-3.2.8/redis.conf 4322
cd redis-cluster
mkdir 4323 4324
cp -a ../redis-3.2.8/redis.conf 4323
cp -a ../redis-3.2.8/redis.conf 4324
cd redis-cluster
mkdir 4325 4326
cp -a ../redis-3.2.8/redis.conf 4325
cp -a ../redis-3.2.8/redis.conf 4326
6、将Redis的命令所在目录添加到系统参数PATH中,这样就可以直接调用redis- cli的命令了
vim /etc/profile
在最后行添加
export PATH="$PATH:/usr/local/redis-3.2.8/src"
应用/etc/profile
. /etc/profile
7、运行redis,检查状态(以第1台为例)
redis-server /usr/local/redis-cluster/4321/redis.conf
redis-server /usr/local/redis-cluster/4322/redis.conf
ps -ef|grep redis
root 2304 1 0 14:00 ? 00:00:00 redis-server 192.168.1.1:4321 [cluster]
root 2308 1 0 14:00 ? 00:00:00 redis-server 192.168.1.1:4322 [cluster]
root 2328 2022 0 14:01 pts/0 00:00:00 grep redis
netstat -ntlp | grep redis
tcp 0 0 127.0.0.1:4321 0.0.0.0:* LISTEN 2304/redis-server 1
tcp 0 0 192.168.1.1:4321 0.0.0.0:* LISTEN 2304/redis-server 1
tcp 0 0 127.0.0.1:4322 0.0.0.0:* LISTEN 2308/redis-server 1
tcp 0 0 192.168.1.1:4322 0.0.0.0:* LISTEN 2308/redis-server 1
tcp 0 0 127.0.0.1:14321 0.0.0.0:* LISTEN 2304/redis-server 1
tcp 0 0 192.168.1.1:14321 0.0.0.0:* LISTEN 2304/redis-server 1
tcp 0 0 127.0.0.1:14322 0.0.0.0:* LISTEN 2308/redis-server 1
tcp 0 0 192.168.1.1:14322 0.0.0.0:* LISTEN 2308/redis-server 1
8、拷贝脚本到/usr/local/bin(前边加过环境变量,这步可能不用加了)
cd /usr/local/redis-3.2.8/src
cp -a redis-trib.rb /usr/local/bin
9、创建集群
首先确保所有6个redis都为运行状态(replicas 后面的数字表示每个M带几个S)
redis-trib.rb create --replicas 1 192.168.1.1:4321 192.168.1.1:4322 192.168.1.2:4323 192.168.1.2:4324 192.168.1.3:4325 192.168.1.3:4326
这种形式是表示自动创建6个节点,其中每个master对应一个slave,但是它并不会把所有master放在同一个机器上,有可能是一台服务器上有1个master另一台服务器上有2个master。
10、检查集群状态
[root@redis_master ~]# redis-trib.rb check 192.168.1.1:4321
>>> Performing Cluster Check (using node 192.168.1.1:4321)
S: 6e6f34c757ac1c737a525b1ebd7e0eeae9aafd12 192.168.1.2:4324
slots: (0 slots) slave
replicates dbab8fc86a94c401cf416a2118822233d450f45d
S: 80040996265e373d1e11872826926a258ca3aa4e 192.168.1.3:4326
slots: (0 slots) slave
replicates c53e29060bbd432477e17f89b41730d5c67994ec
M: dbab8fc86a94c401cf416a2118822233d450f45d 192.168.1.1:4321
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c83cc3af562dd5e94e1c4ee0122bc11c35eb5605 192.168.1.1:4322
slots: (0 slots) slave
replicates 9017cfd0de753a7b75244d31febf7d45232feed0
M: 9017cfd0de753a7b75244d31febf7d45232feed0 192.168.1.3:4325
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: c53e29060bbd432477e17f89b41730d5c67994ec 192.168.1.2:4323
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
11、密码
每个节点的redis.conf中要配置2处密码,重启生效。
masterauth ABcd12#$
requirepass ABcd12#$
配置密码后redis-trib.rb命令会报错,要在redis-trib.rb配置文件中配置密码。
[root@localhost ~]# vim /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
#注意:密码要加引号
:password => "ABcd12#$",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}
12、主从切换
#从节点接管主节点(主从关系互换)
redis-cli -c -h 192.168.1.1 -p 4321 -a ABcd12#$
#正常切换
cluster failover
#强制切换
cluster failover takover
#从节点指定所属主节点
redis-cli -c -h 192.168.1.1 -p 4321 -a ABcd12#$
cluster replicate c9083c61b9b7869b2d3c5b64957fcbb973146d75