Fork me on GitHub

Redis集群

  网上做Redis集群集群的博客,大多是在一台或者两台虚拟机上起了6个redis,本篇博文,在3台虚拟机上做此实验.

1.环境准备

# 安装ruby、rubygems,是因为创建集群的脚本是用ruby写的
# 单实例的redis,每秒读写最大QPS是11万,一般是控制在5万以内,最佳是3万,超过7万就会出问题
yum -y install ruby rubygems
# 可以替换成国内镜像
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem install redis
Fetching: redis-4.1.0.gem (100%)
ERROR:  Error installing redis:
	redis requires Ruby version >= 2.2.2.
# 报错:说是ruby的版本过低,至少得2.2.2,通过yum安装的ruby版本是2.0.0,所以进行以下操作

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm list known    # 列出ruby版本列表
rvm install 2.4.1 # 这里安装ruby2.4.1,大约需要十分钟

下载rvm截图

升级完ruby之后安装redis

2.配置并启动服务

mkdir /var/log/redis
# 在10.0.0.16上创建{7002,7003},10.0.0.17上创建{7004,7005}
mkdir -p mkdir /usr/local/redis_cluster/{7000,7001}
cd /usr/local/redis_cluster
cp /usr/local/redis/redis.conf 7000/
# 修改配置文件,修改如下内容,总共6个配置文件,分别修改IP和端口

bind 10.0.0.15
protected-mode no
port 7000
daemonize yes
pidfile "/var/run/redis_7000.pid"
logfile "/var/log/redis/redis_7000.log"
dir "./"
cluster-enabled  yes
cluster-config-file  nodes_7000.conf
cluster-node-timeout  15000
appendonly yes

# 启动服务
10.0.0.15
redis-server /usr/local/redis_cluster/7000/redis.conf
redis-server /usr/local/redis_cluster/7001/redis.conf
10.0.0.16
redis-server /usr/local/redis_cluster/7002/redis.conf
redis-server /usr/local/redis_cluster/7003/redis.conf
10.0.0.17
redis-server /usr/local/redis_cluster/7004/redis.conf
redis-server /usr/local/redis_cluster/7005/redis.conf

创建集群

/usr/local/redis/src/redis-trib.rb create --replicas 1 10.0.0.15:7000 \
10.0.0.15:7001 10.0.0.16:7002 10.0.0.16:7003 10.0.0.17:7004 10.0.0.17:7005

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.0.15:7000
10.0.0.16:7002
10.0.0.17:7004
Adding replica 10.0.0.16:7003 to 10.0.0.15:7000
Adding replica 10.0.0.15:7001 to 10.0.0.16:7002
Adding replica 10.0.0.17:7005 to 10.0.0.17:7004
M: 5c7abc77cc35032a1ecf5b7f25301336dce8a4dc 10.0.0.15:7000
   slots:0-5460 (5461 slots) master
S: 8683a7e9bb9fcb435a77b54dcfdcb31eb1efcc9f 10.0.0.15:7001
   replicates 9fa8b7143f87b7326a35d5a1108b554afaf6e37a
M: 9fa8b7143f87b7326a35d5a1108b554afaf6e37a 10.0.0.16:7002
   slots:5461-10922 (5462 slots) master
S: c32f1532f8cdf76876d46b84b4fcb284d4bda1d7 10.0.0.16:7003
   replicates 5c7abc77cc35032a1ecf5b7f25301336dce8a4dc
M: b6a45a8dfc746997e481c3cb8bd6ef544db693f0 10.0.0.17:7004
   slots:10923-16383 (5461 slots) master
S: 4c266ca5b75544eb231aaf4c7ff659c3a16fe46e 10.0.0.17:7005
   replicates b6a45a8dfc746997e481c3cb8bd6ef544db693f0
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 10.0.0.15:7000)
M: 5c7abc77cc35032a1ecf5b7f25301336dce8a4dc 10.0.0.15:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 9fa8b7143f87b7326a35d5a1108b554afaf6e37a 10.0.0.16:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 4c266ca5b75544eb231aaf4c7ff659c3a16fe46e 10.0.0.17:7005
   slots: (0 slots) slave
   replicates b6a45a8dfc746997e481c3cb8bd6ef544db693f0
M: b6a45a8dfc746997e481c3cb8bd6ef544db693f0 10.0.0.17:7004
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 8683a7e9bb9fcb435a77b54dcfdcb31eb1efcc9f 10.0.0.15:7001
   slots: (0 slots) slave
   replicates 9fa8b7143f87b7326a35d5a1108b554afaf6e37a
S: c32f1532f8cdf76876d46b84b4fcb284d4bda1d7 10.0.0.16:7003
   slots: (0 slots) slave
   replicates 5c7abc77cc35032a1ecf5b7f25301336dce8a4dc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

# 登录集群中某一个节点
redis-cli -h 10.0.0.15 -c -p 7000
# 查看集群节点
redis-cli -p 7000 -h 10.0.0.25 cluster nodes
# 当数据分布不均匀时,可以重新分片
/usr/local/redis/src/redis-trib.rb reshard 10.0.0.15:7000

  需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败;并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了.

 

Redis集群搭建与简单使用:https://www.cnblogs.com/wuxl360/p/5920330.html

redis三主三从搭建:http://blog.51cto.com/13520772/2316992

Redis API-PHP连接redisPython连接redisredis cluster的连接与操作sentinel集群连接并操作:http://blog.51cto.com/13520772/2109405

 

posted @ 2019-02-16 16:30  法外狂徒  阅读(265)  评论(0编辑  收藏  举报