redis 集群

Scroll Down

第六章:redis 集群部署

01. 为什么使用集群

  • 为什么不使用哨兵,而使用集群
# 使用哨兵
01.主库写压力太大
02.资源利用率不高
03.连接过程繁琐,效率低

02. 集群的重要概念

01.Redis集群,无论有几个节点,一共只用16384
02.所有的槽都必须被正确分配,哪怕只有一个槽不正常,整个集群都不可用
03.每个节点的槽的顺序不重要,重要的是槽的数量
04.HASH算法足够平均,足够随机
05.每个槽被分配到数据的概率大致相当的
06.集群的高可用依赖于主从复制
07.集群节点之间槽位的数量允许在2%的误差范围内
08.集群通讯会使用基础端口号+10000的端口,自动创建,不是分配文件分配的,⽣产要注意的是防⽕墙注意要放开此端⼝

03. 环境规划

主节点端口 6380
从节点端口 6381

db01 10.0.0.51
db02 10.0.0.52
db03 10.0.0.53

04. 在db01上操作

1)配置ssh认证,方便后面传输

ssh-keygen
ssh-copy-id 10.0.0.52
ssh-copy-id 10.0.0.53

2)配置

# 关闭 redis
pkill redis

# 创建目录
mkdir -p /opt/redis_{6380,6381}/{conf,logs,pid}
mkdir -p /data/redis_{6380,6381}

# 生成配置文件
cat > /opt/redis_6380/conf/redis_6380.conf <<EOF
bind 10.0.0.51
port 6380
daemonize yes
pidfile "/opt/redis_6380/pid/redis_6380.pid"
logfile "/opt/redis_6380/logs/redis_6380.log"
dbfilename "redis_6380.rdb"
dir "/data/redis_6380/"
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
EOF

# 复制主节点的配置到从节点,并更改端口号
cp /opt/redis_6380/conf/redis_6380.conf /opt/redis_6381/conf/redis_6381.conf
sed -i 's#6380#6381#g' /opt/redis_6381/conf/redis_6381.conf

# 更改授权
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*

# 生成主节点的systemd启动文件
cat >/usr/lib/systemd/system/redis-master.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis_6380/conf/redis_6380.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 6380 shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF

#7.复制master节点的启动⽂件给slave节点并修改端⼝号
cd /usr/lib/systemd/system/
cp redis-master.service redis-slave.service
sed -i 's#6380#6381#g' redis-slave.service

#8.重载并启动集群节点
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis

3)把创建好的⽬录和启动⽂件发送给db02和db03

rsync -avz /opt/redis_638* 10.0.0.52:/opt/
rsync -avz /opt/redis_638* 10.0.0.53:/opt/
rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.52:/usr/lib/systemd/system/
rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.53:/usr/lib/systemd/system/

05. 在db02上操作

# 关闭redis
pkill redis

# 替换db01发送过来的⽂件并修改IP地址
find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#52#g"

# 修改启动文件ip
cd /usr/lib/systemd/system/
sed -i 's#51#52#g' redis-*.service

# 创建数据目录,并授权
mkdir –p /data/redis_{6380,6381}
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*

# 启动
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis

06. 在db03上操作

# 关闭redis
pkill redis

# 替换db01发送过来的⽂件并修改IP地址
find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#53#g"
cd /usr/lib/systemd/system/
sed -i 's#51#53#g' redis-*.service

# 创建数据目录,并授权
mkdir –p /data/redis_{6380,6381}
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*

# 启动
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis

第七章:redis集群手动发现节点

01. 手动发现集群节点

# 手动发现主节点,和从节点
redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6380
redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6380
redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.51 6381
redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6381
redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6381

# 检查集群所有节点
redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES

02. 手动分配集群槽位

1)槽位规划

# 总槽位 16384 个槽位
db01:6380 5461  0-5460
db02:6380 5461 5461-10921
db03:6380 5462 10922-16383

2)分配槽位

redis-cli -h 10.0.0.51 -p 6380 CLUSTER ADDSLOTS {0..5460}
redis-cli -h 10.0.0.52 -p 6380 CLUSTER ADDSLOTS {5461..10921}
redis-cli -h 10.0.0.53 -p 6380 CLUSTER ADDSLOTS {10922..16383}

3)查看集群状态

redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES
redis-cli -h 10.0.0.51 -p 6380 CLUSTER INFO

03. 手动分配复制关系

1)获取节点信息

# 执行命令获取信息
redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES | grep 6380 | awk '{print $1,$2}'

# 6380的id ip
9ff4b9032993aa96658ec7a2207b4ab7d0132655 10.0.0.53:6380@16380
7dea380dc51ac942eccc0afe7fb2e15d09c3b893 10.0.0.52:6380@16380
0e8c531212995f7b18445f209f8a41312c746056 10.0.0.51:6380@16380

2)配置复制关系

# 复制关系
51->52 52->53 53->51

# 配置复制
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE db02的id
redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE db03的id
redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE db01的id
  • 搭配好的
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE 7dea380dc51ac942eccc0afe7fb2e15d09c3b893
redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE 0e8c531212995f7b18445f209f8a41312c746056
redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE 9ff4b9032993aa96658ec7a2207b4ab7d0132655

3)检查复制关系

redis-cli -h 10.0.0.51 -p 6381 CLUSTER NODES

第八章:使用工具自动部署redis集群—通用的ruby方法

01. 安装依赖**-只要在db01上操作-北京67-⼩仙⼥-**崔娟提供命令

yum install -y rubygems
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove http://rubygems.org/
gem install redis -v 3.3.3

02. 还原集群环境

redis-cli -c -h 10.0.0.51 -p 6380 flushall
redis-cli -c -h 10.0.0.52 -p 6380 flushall
redis-cli -c -h 10.0.0.53 -p 6380 flushall
redis-cli -h 10.0.0.51 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.51 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6381 CLUSTER RESET

03. 快速部署Redis集群

cd /opt/redis/src/
./redis-trib.rb create --replicas 1 10.0.0.51:6380 10.0.0.52:6380
10.0.0.53:6380 10.0.0.51:6381 10.0.0.52:6381 10.0.0.53:6381

第九章:使⽤⼯具⾃动部署redis集群-⾼科技版

01. 还原集群状态

redis-cli -c -h 10.0.0.51 -p 6380 flushall
redis-cli -c -h 10.0.0.52 -p 6380 flushall
redis-cli -c -h 10.0.0.53 -p 6380 flushall
redis-cli -h 10.0.0.51 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.51 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6381 CLUSTER RESET

02. 快速部署Redis集群

redis-cli --cluster create 10.0.0.51:6380 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.52:6381 10.0.0.53:6381 --cluster-replicas 1

03. 检查集群

redis-cli --cluster info 10.0.0.51:6380