yum -y install openssl openssl-devel
yum -y install zlib ruby ruby-irb rubygems
wget https://rubygems.org/downloads/redis-4.0.1.gem
gem install redis-4.0.1.gem
# Redis 安装配置
mkdir -p /data/redis/4.0
groupadd redis && useradd -m -d /data/redis/home -g redis redis
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar -xzvf redis-4.0.11.tar.gz -C /data/redis/4.0 --strip-components 1
cd /data/redis/4.0
make
make PREFIX=/data/redis/4.0 install
chown -R redis:redis /data/redis
su - redis
echo 'export PATH=$PATH:/data/redis/4.0/bin' >> ~/.bashrc
source ~/.bashrc
#循环创建6个实例文件redis.conf
for port in {6401..6406}
do
mkdir -p /data/redis${port}
cat << EOF >> /data/redis${port}/redis.conf
port ${port}
bind 127.0.0.1 192.168.1.182
daemonize yes
appendonly yes
protected-mode no
requirepass 123456
masterauth 123456
dir /data/redis${port}
pidfile /data/redis${port}/redis.pid
logfile /data/redis${port}/redis.log
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
EOF
done
#启动服务
/data/redis/4.0/bin/redis-server /data/redis6401/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6402/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6403/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6404/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6405/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6406/redis.conf
#改脚本添加密码 redis-trib.rb
sed -i 's/.*@r = Redis.new.*/ @r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password => "123456")/' /data/redis/4.0/src/redis-trib.rb
cp /data/redis/4.0/src/redis-trib.rb /data/redis/4.0/bin/redis-trib.rb
#配置集群
/data/redis/4.0/bin/redis-trib.rb create --replicas 1 127.0.0.1:6401 127.0.0.1:6402 127.0.0.1:6403 127.0.0.1:6404 127.0.0.1:6405 127.0.0.1:6406
#群集启动状态检查
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
#查看集群节点
/data/redis/4.0/bin/redis-cli -p 6401 -a 123456 cluster nodes
#停止或启动群集
/data/redis/4.0/utils/create-cluster/create-cluster stop
/data/redis/4.0/utils/create-cluster/create-cluster start
#测试
/data/redis/4.0/bin/redis-cli -p 6401 -a 123456 set kk 222222
/data/redis/4.0/bin/redis-cli -p 6406 -a 123456 -c get kk
#若停止某master实例服务,slave则提升为master;停止的实例启动后,变为slave
/data/redis/4.0/bin/redis-cli -p 6402 -a 123456 shutdown
/data/redis/4.0/bin/redis-cli -p 6401 -a 123456 cluster nodes
/data/redis/4.0/bin/redis-server /data/redis6402/redis.conf
=======================================================================
添加主从节点
=======================================================================
su - redis
#检查当前集群复制情况
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
#新实例配置
mkdir -p /data/{redis6407,redis6408}
cp /data/redis6401/redis.conf /data/redis6407/redis.conf
cp /data/redis6401/redis.conf /data/redis6408/redis.conf
sed -i 's/6401/6407/g' /data/redis6407/redis.conf
sed -i 's/6401/6408/g' /data/redis6408/redis.conf
#启动新实例
/data/redis/4.0/bin/redis-server /data/redis6407/redis.conf
/data/redis/4.0/bin/redis-server /data/redis6408/redis.conf
#集群添加新节点 master 127.0.0.1:6407 (第二个 IP:PORT 为当前集群任意节点)
/data/redis/4.0/bin/redis-trib.rb add-node 127.0.0.1:6407 127.0.0.1:6401
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
#新节点分配 slots ,从所有中(all)分配 slots 4096 给新节点 node_id (分配数: 16384/master数 = 4096)
/data/redis/4.0/bin/redis-trib.rb reshard --from all --to f7d288c9aac9c570894733bf01001db810644e0f --slots 4096 127.0.0.1:6407
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
#reshard 问题:
[ERR] Calling MIGRATE: ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)
#check 问题:
[WARNING] Node 127.0.0.1:6407 has slots in importing state (12077).
[WARNING] Node 127.0.0.1:6403 has slots in migrating state (12077).
[WARNING] The following slots are open: 12077
#修复问题
/data/redis/4.0/bin/redis-cli -p 6407 -a 123456 cluster setslot 12077 stable
/data/redis/4.0/bin/redis-cli -p 6403 -a 123456 cluster setslot 12077 stable
#/data/redis/4.0/bin/redis-trib.rb fix 127.0.0.1:6407
#/data/redis/4.0/bin/redis-trib.rb fix 127.0.0.1:6403
#添加 master 6407 的从节点 slave 6408,master-id 为 6407 node_id (第二个 IP:PORT 为当前集群任意节点)
/data/redis/4.0/bin/redis-trib.rb add-node --slave --master-id f7d288c9aac9c570894733bf01001db810644e0f 127.0.0.1:6408 127.0.0.1:6401 --yes
#查看和测试
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
/data/redis/4.0/bin/redis-trib.rb info 127.0.0.1:6401
/data/redis/4.0/bin/redis-cli -p 6407 -a 123456 -c set rr 888
/data/redis/4.0/bin/redis-cli -p 6408 -a 123456 -c get rr
=======================================================================
主从节点手动切换
=======================================================================
#就切换新增的主从节点(当前master:6407,slave:6408)
#检查
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
/data/redis/4.0/bin/redis-cli -p 6407 -a 123456 info cluster
/data/redis/4.0/bin/redis-cli -p 6408 -a 123456 info cluster
/data/redis/4.0/bin/redis-cli -p 6407 -a 123456 info replication
/data/redis/4.0/bin/redis-cli -p 6408 -a 123456 info replication
#在slave中执行主从切换, 切换完再执行上面的命令查看
/data/redis/4.0/bin/redis-cli -p 6408 -a 123456 cluster failover
=======================================================================
删除主从节点
=======================================================================
#删除新增的主从节点(当前master:6408,slave:6407)
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
#可直接删除节点slave 6407(格式: redis-trib.rb del-node host:port node_id)
/data/redis/4.0/bin/redis-trib.rb del-node 127.0.0.1:6407 f7d288c9aac9c570894733bf01001db810644e0f
#若删除 master 6408,先把数据移到其他节点
/data/redis/4.0/bin/redis-trib.rb reshard \
--from eba83c4d2001cdf87994029933bb0aa56f9658d3 --to 560b0dcaa2b21b89200161ae138f15433a02cce5 \
--slots 4096 --yes 127.0.0.1:6408
#检查确认, 删除节点 master 6408 (格式: redis-trib.rb del-node host:port node_id)
/data/redis/4.0/bin/redis-trib.rb check 127.0.0.1:6401
/data/redis/4.0/bin/redis-trib.rb del-node 127.0.0.1:6408 eba83c4d2001cdf87994029933bb0aa56f9658d3
=======================================================================
集群密码更改
=======================================================================
如 redis-trib.rb call --password 执行报错: Unknown option 'password' for command 'call'
# vim /data/redis/4.0/bin/redis-trib.rb
ALLOWED_OPTIONS={
…………
"call" => {"password" => true},
}
#密码 123456 更改为 654321 ,在任意集群节点执行
/data/redis/4.0/bin/redis-trib.rb call --password 123456 127.0.0.1:6401 config set masterauth 654321
/data/redis/4.0/bin/redis-trib.rb call --password 123456 127.0.0.1:6401 config set requirepass 654321
/data/redis/4.0/bin/redis-trib.rb call --password 123456 127.0.0.1:6401 config rewrite
/data/redis/4.0/bin/redis-trib.rb call --password 123456 127.0.0.1:6401 config get requirepass
/data/redis/4.0/bin/redis-trib.rb call --password 123456 127.0.0.1:6401 config get masterauth
或离线安装 ruby rubygems
# 安装相关工具
yum -y install openssl openssl-devel
#yum -y install zlib ruby ruby-irb rubygems
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.4.tar.gz
tar -xzvf ruby-2.6.4.tar.gz
cd ruby-2.6.4
./configure
make && make install
cd ruby-2.6.4/ext/zlib
ruby extconf.rb
make && make install
cd ruby-2.6.4/ext/openssl
ruby extconf.rb
make && make install
wget https://rubygems.org/rubygems/rubygems-3.0.6.tgz
tar -xzvf rubygems-3.0.6.tgz
cd rubygems-3.0.6
ruby setup.rb