Redis 高可用:分片主从集群

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值