由于公司爬虫业务扩大,单节点的redis已经不能满足现在的爬虫需求,所以,我要使用三台服务器搭建一个三主三从的redis集群
服务器准备
主
107.150..A:7000
107.150..B:7001
107.150.*.C:7002
从
107.150..A:7003
107.150..B:7004
107.150.*.C:7005
安装redis
# 安装依赖
yum install gcc
# 新建安装目录,进到相应目录
mkdir /data/Downloads
cd /data/Downloads
# 下载
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 下载完毕后开始解压
tar -zxvf redis-5.0.5.tar.gz
# 编译并安装
cd redis-5.0.5
make
make install PREFIX=/usr/local/redis
cd /usr/local/redis
# 新建日志目录
mkdir logs
# 将配置文件复制相应的目录
cp /usr/Downloads/redis-5.0.5/redis.conf /usr/local/redis/bin
cd ./bin
修改配置文件
# 在每台集群上都执行相应的操作
# cat redis.conf | grep -v "#" | grep -v "^$" > redis-7000.conf
# 修改里面的配置文件
# vim redis.conf
# 端口
port 7000
# 开放所有
bind 0.0.0.0
# 保护模式
protected-mode no
# 守护模式
daemonize yes
# 备份目录
dir "/usr/local/redis/data"
# 密码
requirepass foobared
# 集群密码
masterauth foobared
# 日志
logfile "/usr/local/redis/logs/redis.log"
# MISCONF Redis配置为保存RDB快照,但目前它不能在磁盘上持久保存。可以修改数据集的命令被禁用,因为如果RDB快照失败(stop- writs -on-bgsave-error选项),这个实例被配置为在写期间报告错误
stop-writes-on-bgsave-error no
# 最大连接数
maxclients 100000
# 集群模式
cluster-enabled yes
# 集群本地配置文件(对集群的信息进行记录)
cluster-config-file nodes-7000.conf
# 集群是否所有节点都提供服务才代表正常
cluster-require-full-coverage no
在A服务器进行操作
sed "s/7000/7003/g" redis-7000.conf > redis-7003.conf
# 启动redis服务
redis-server ./redis-7000.conf
redis-server ./redis-7003.conf
在B服务器进行操作
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
sed "s/7000/7004/g" redis-7000.conf > redis-7004.conf
# 启动redis服务
redis-server ./redis-7001.conf
redis-server ./redis-7004.conf
在C服务器进行操作
sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf
sed "s/7000/7005/g" redis-7000.conf > redis-7005.conf
# 启动redis服务
redis-server ./redis-7002.conf
redis-server ./redis-7005.conf
在A服务器启动redis集群
# 5.0之后一条命令搞定
redis-cli --cluster create 107.150.*.A:7000 107.150.*.B:7001 107.150.*.C:7002 107.150.*.A:7003 107.150.*.B:7004 107.150.*.C:7005 --cluster-replicas 1 -a foobared
# 登录相应的redis并检查是否集群搭建成功
redis-cli -p 7000 -a foobared
>cluster nodes
tip
## 5.0之前
# 安装ruby环境
(1)下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.gz
(2)安装ruby
tar -xvf ruby-2.6.3.tar.gz
cd ruby-2.6.3
./configure -prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin
# 查看ruby是否安装成功
ruby -v
安装rubygem redis
wget https://rubygems.org/gems/rubygems-update-3.0.4.gem
gem install -l rubygems-update-3.0.4.gem
gem install redis
gem list -- check redis gem
安装redis-trib.rb
cp ${REDIS_HOME}/src/redis-trib.rb /usr/local/bin
# redis-trib构建集群 --replicas 1 每个主节点有一个从节点
./redis-trib.rb create --replicas 1 107.150.*.A:7000 107.150.*.B:7001 107.150.*.C:7002 107.150.*.A:7003 107.150.*.B:7004 107.150.*.C:7005
redis集群 Waiting for the cluster to join 一直等待
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
7000:17000
7001:17001
7002:17002
7003:17003
7004:17004
7005:17005
参考:https://www.cnblogs.com/wps54213/p/12571226.html
from rediscluster import RedisCluster
# pip install redis-py-cluster
redis_nodes = [{'host':'107.150.*.A','port':7000},
{'host': '107.150.*.B', 'port': 7001},
{'host': '107.150.*.C', 'port': 7002},
{'host': '107.150.*.A', 'port': 7003},
{'host': '107.150.*.B', 'port': 7004},
{'host': '107.150.*.C', 'port': 7005}]
redisconn = RedisCluster(startup_nodes=redis_nodes,password="foobared")
# redisconn.set("name","jack")
# print(redisconn.get("name"))
redisconn.lpush("age",18)
print(redisconn.lpop("age"))
# 检查集群 任意连接一个集群节点,进行集群状态检查
redis-cli --cluster check 107.150.*:7001 --cluster-search-multiple-owners -a foobared
# 修复集群
redis-cli --cluster fix 107.150.*:7001 --cluster-search-multiple-owners -a foobared
参考:https://www.cnblogs.com/zhoujinyi/p/11606935.html