MENU

linux 下 redis 集群

2016 年 07 月 27 日 • 应用服务器

最近开发的大哥说缓存要用redis,让我搞一个出来,然后我就开始搞,搞出了一个单机版的,效果还不错,只是有一次redis崩了,然后想办法解决这个问题,我刚开始打算用keepalive的,但是我查了一下,redis能做集群,既然如此,那就做个集群吧,大概查了一下,搭建起来也不是很困难,最少需要6个节点才可以,我用的两台服务器,用一台可以,具体步骤如下。
下载redis及安装,两台服务器同时进行。
注意:只有redis3.0及以上版本才支持集群,我使用的是3.0.5版本
下载地址:http://download.redis.io/releases/

安装阶段

1.下载redis,解包
[root@10-10-79-128 ~]# cd /usr/local/src/
[root@10-10-79-128 src]# wget http://download.redis.io/releases/redis-3.0.5.tar.gz #下载软件包
[root@10-10-79-128 src]# tar zxf redis-3.0.5.tar.gz -C /usr/local/                #解压到/usr/local/
[root@10-10-79-128 src]# cd /usr/local/
[root@10-10-79-128 local]# mv redis-3.0.5/ redis                                  #重命名
2.编译安装redis
[root@10-10-79-128 ~]# cd /usr/local/redis/
[root@10-10-79-128 redis]# make
[root@10-10-79-128 redis]# make install

看到下图为安装成功

配置阶段

1. 创建 redis 节点, 集群节点最低 6 个
[root@10-10-79-128 ~]# cd /usr/local/
[root@10-10-79-128 local]# mkdir redis-cluster
[root@10-10-79-128 redis-cluster]# mkdir 700{0..2}

说明一下,我所使用的端口是从7000-7005,所以文件夹也是这样创建的,第二台服务器分别创建7003 7004 7005即可。这个你自己看着来,怎么着都可以。

2.编写配置文件

分享一个redis配置文件吧,这是我们现在线上用的,之前调试了很长时间,可以参考一下,这是以7000端口为例。

daemonize yes                        //允许后台运行
pidfile /var/run/redis-7000.pid      //pid文件位置
port 7000                            //监听端口
tcp-backlog 511                      //TCP连接中已完成队列的长度
timeout 0
tcp-keepalive 60                    
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
maxclients 10000
logfile /var/log/redis/redis7000.log
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 0
repl-disable-tcp-nodelay yes
repl-backlog-size 5mb
slave-priority 100
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes                          //开启集群
cluster-config-file nodes-7000.conf          //集群配置文件,首次启动自动生成
cluster-node-timeout 5000                    //请求超时  设置5秒够了
cluster-require-full-coverage no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 256
hash-max-ziplist-value 32
list-max-ziplist-entries 256
list-max-ziplist-value 32
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 512mb 128mb 120
client-output-buffer-limit pubsub 64mb 16mb 120
hz 10
aof-rewrite-incremental-fsync yes

6个节点改一下相对的端口日志路径,pid文件路径即可,然后复制到各个文件夹中,启动,启动命令使用redis-server redis.conf 即可。redis.conf配置文件详解:http://www.cnblogs.com/zhang-ke/p/5981108.html,最后启动redis。

for i in `ls -ld /usr/local/redis-cluster/700* | awk {'print $NF'}`
> do
>   redis-server $i/redis.conf
> done

创建集群

1.安装软件包,Debian和CentOS要安装的软件包名称不一样,具体如下。
Debian
[root@10-10-79-128 ~]# apt-get install ruby rubygems
[root@10-10-79-128 ~]# gem install redis
CentOS
[root@10-10-79-128 ~]# yum -y install ruby ruby-devel rubygems rpm-build
[root@10-10-79-128 ~]# gem install redis

如果在运行gem install redis出现错误,多数是无法连接到gem服务器,需要手动下载安装。

[root@10-10-79-128 ~]# wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem && gem install -l ./redis-3.2.1.gem
创建集群

注意,如果你开了iptables,或是云服务器有安全组,你的操作是不但要开放所有的redis端口,而且也要开放集群之间的通讯端口,端口是+10000,譬如说我现在7000端口要做集群,就要开放17000端口,以此类推,如果不开就会卡到Waiting for the cluster to join ,然后无限省略号。

[root@10-10-79-128 ~]# cd /usr/local/redis/src/
[root@10-10-79-128 src]# ./redis-trib.rb create --replicas 1 10.10.79.128:7000 10.10.79.128:7001 10.10.79.128:7002 10.10.79.129:7003 10.10.79.129:7004 10.10.79.129:7005

注意,不要照搬,本机的尽量不要写127.0.0.1,而是写内网地址,看到下图及创建成功。

查看对应关系

因为是三主三从,对应关系上张图就能看懂了。下面的命令是查看对应关系的。

[root@10-10-79-128 ~]# redis-cli -c -p 7000
127.0.0.1:7000> cluster nodes
9b275c01482d3066a4b19bf9a511a984aa88e997 10.10.79.129:7004 slave 3e80e2444d243178fb8cb2a8ee028f91e56bb01c 0 1495161973394 5 connected
7308e357953f478fb4c4fe7c027cfbc2cbd51a4a 10.10.79.128:7002 slave 583484d0f773f62b9e4486630ee19b62dd21c41b 0 1495161974400 4 connected
f36c9b5146fc6d3d90e756dfe54ad4f469f9a719 10.10.79.129:7005 slave 3e07a556f9a80779ade5d9695aaea3c770e52f24 0 1495161973897 6 connected
3e80e2444d243178fb8cb2a8ee028f91e56bb01c 10.10.79.128:7000 myself,master - 0 0 1 connected 0-5460
3e07a556f9a80779ade5d9695aaea3c770e52f24 10.10.79.128:7001 master - 0 1495161972890 2 connected 10923-16383
583484d0f773f62b9e4486630ee19b62dd21c41b 10.10.79.129:7003 master - 0 1495161974401 4 connected 5461-10922

查看集群状态
127.0.0.1:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:4461
cluster_stats_messages_received:4461
127.0.0.1:7000>

这样就阔以用了,结束

最后编辑于: 2019 年 08 月 27 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码