Redis-4.0.14 Cluster 安装部署
本教程安装环境是阿里云,nat模式下内网环境。生产环境大流量下请勿将多台Redis实例部署到一台Linux服务器上(小流量也不推荐一机多redis实例)。idc机器环境下要保证网卡的并发性、云主机要选用内存型(或者内存io型)。毕竟Redis是高io服务。
Tips:如果Redis是3主3从及以上规模集群建议关闭主服务器上的bgsave操作,改为在从上进行。降低流量高峰时bgsave产生延时影响IO吞吐量。(虽然只有短短的30ms影响)
服务器命名规则建议采用redis—业务名称-集群role名称
即resdis-lc-m001、redis-lc-s001
其中lc是该redis的调用方,m001 s001是该redis在集群中的角色
m mster
s slave
端口采用9710,跟非集群redis 6379区分开
2核16G
172.27.11.111 hostname redis-lc-m001
172.27.11.112 hostname redis-lc-m002
172.27.11.113 hostname redis-lc-m003
172.27.11.114 hostname redis-lc-s001
172.27.11.115 hostname redis-lc-s002
172.27.11.116 hostname redis-lc-s003
cd ~
yum install gcc gcc-c++ -y
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar -zxf redis-4.0.14.tar.gz
cd redis-4.0.14
cd deps
make hiredis jemalloc linenoise lua geohash-int
cd ..
make PREFIX=/app/sina/redis-cluster install
make install
[root@redis-lc-m001 ~]# cp /app/sina/redis-cluster/bin/redis-cli /usr/local/bin/redis-cli
[root@redis-lc-m001 ~]# redis-cli --version
redis-cli 4.0.14
- 修改配置文件
redis.conf
修改、开启以下几项
bind 192.168.100.214
port 9710
daemonize yes
pidfile /app/sina/redis-cluster/conf/redis_9710.pid
logfile "/data/sina/redis-cluster/redis.log"
dir /data/sina/redis-cluster/
maxmemory 1200M #系统预留4G
cluster-enabled yes
cluster-config-file /app/sina/redis-cluster/conf/nodes-9710.conf
配置文件可以使用redis源码包里的redis.conf模板文件
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
cp ~/redis/redis-4.0.14/src/redis-trib.rb /usr/local/bin/
cat /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.core_uses_pid = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_orphan_retries = 2
kernel.core_pattern = /data/sina/core/core_%e_%p
vm.overcommit_memory = 1
kernel.sysrq = 1
chown -R sina:sina /app/sina/redis* /data/sina/
su - sina
/app/sina/redis-cluster/bin/redis-server /app/sina/redis-cluster/conf/redis.conf
- 配置
ruby
环境RVM方式 集群创建工具redis-trib.rb是基于ruby开发的
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 install 2.6.4
rvm 2.6.4 --default
gem install redis #安装redis插件
cp ~/redis/redis-4.0.14/src/redis-trib.rb /usr/local/bin/
redis-trib.rb create --replicas 0 172.27.11.111:9710 172.27.11.112:97010 172.27.11.113:9710 #3主模式,最小节点集群,无法提供高可用.
redis-trib.rb create --replicas 1 172.27.11.111:9710 172.27.11.112:9710 172.27.11.113:9710 172.27.11.114:9710 172.27.11.115:9710 172.27.11.116:9710 #主从模式,Slave从节点即是Master的备用节点也是数据的读取节点
[root@redis-lc-m001 bin]# redis-trib.rb create --replicas 0 172.27.11.111:9710 172.27.11.112:9710 172.27.11.113:9710
>>> Creating cluster
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
172.27.11.111:9710
172.27.11.112:9710
172.27.11.113:9710
M: fa820855aeebad6551d09d0cd6063aeaefc8f4f9 172.27.11.111:9710
slots:0-5460 (5461 slots) master
M: 517fd7f65b7e653a91b24aa7a06f1ec360bd8220 172.27.11.112:9710
slots:5461-10922 (5462 slots) master
M: ccf082f6516ec23c1aee891358a3daf47d2b5ca7 172.27.11.113:9710
slots:10923-16383 (5461 slots) master
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 172.27.11.111:9710)
M: fa820855aeebad6551d09d0cd6063aeaefc8f4f9 172.27.11.111:9710
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: 517fd7f65b7e653a91b24aa7a06f1ec360bd8220 172.27.11.112:9710
slots:5461-10922 (5462 slots) master
0 additional replica(s)
M: ccf082f6516ec23c1aee891358a3daf47d2b5ca7 172.27.11.113:9710
slots:10923-16383 (5461 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@redis-lc-m001 bin]# redis-cli -h 172.27.11.111 -p 9710 -c
192.168.100.214:9710> cluster nodes
517fd7f65b7e653a91b24aa7a06f1ec360bd8220 172.27.11.112:9710@19710 master - 0 1568616352578 2 connected 5461-10922
ccf082f6516ec23c1aee891358a3daf47d2b5ca7 172.27.11.111:9710@19710 master - 0 1568616353579 3 connected 10923-16383
fa820855aeebad6551d09d0cd6063aeaefc8f4f9 172.27.11.113:9710@19710 myself,master - 0 1568616352000 1 connected 0-5460
172.27.11.111:9710>
redis-trib.rb add-node --slave --master-id id new-ip:port old-ip:port
--slave 指定添加的节点角色是slave
--master 指定该slave的mater节点id
new-ip:port 要添加的从节点IP及端口号
old-ip:port 要加入集群的ip及端口号
[root@redis-lc-m001 sina]# redis-trib.rb add-node --slave --master-id fa820855aeebad6551d09d0cd6063aeaefc8f4f9 172.27.11.114:9710 172.27.11.111:9710
[root@redis-lc-m001 sina]# redis-trib.rb add-node --slave --master-id 517fd7f65b7e653a91b24aa7a06f1ec360bd8220 172.27.11.115:9710 172.27.11.111:9710
[root@redis-lc-m001 sina]# redis-trib.rb add-node --slave --master-id ccf082f6516ec23c1aee891358a3daf47d2b5ca7 172.27.11.116:9710 172.27.11.111:9710
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。