Redis运维精讲之集群安装篇

Redis是现网中使用率非常高的中间件,其作用和优势不在本文讨论范围。本系列主要从运维人员角度出发,从安装,集群架构,调优等方面,全面讲解Redis的各种疑难问题及处理方法。字字皆辛苦,且看且珍惜!

这里使用了三台虚拟机,系统为centos7,默认使用root,IP分别为:192.168.8.133;192.168.8.134;192.168.8.135

请关闭防火墙和selinux。

Redis下载地址网上一大把,比较齐全的比如:http://download.redis.io/releases/

强烈建议右键获取下载地址,然后用迅雷下载。

我们本次使用redis-5.0.9.tar

然后将包分别传到3台服务器上,方法不限,高兴就好。

然后开始安装步骤:

yum -y install make makeinstall gcc gcc-c++

[root@localhost ~]# ls
anaconda-ks.cfg  redis-5.0.9.tar.gz
[root@localhost ~]# tar -xf redis-5.0.9.tar.gz
[root@localhost ~]# cd redis-5.0.9/
[root@localhost redis-5.0.9]# make
[root@localhost redis-5.0.9]# cd src/
[root@localhost src]# make install
 

三台都要安装,这样就得到了三台单独运行的Redis。

安装完成之后,就需要起服务了。但是不要着急,让我们来说些深奥的东西。

首先,这个Redis安装目录下,就大有讲究。

默认的目录下,redis.conf是默认的系统配置文件,后续各种优化,都是基于这个文件来修改的。这里暂时不精讲。

src这个目录下,存放的是各种命令,这个文件也很重要。utils这个文件夹很少用到,但最好留着。

但是,除了这三个之外,其余的全部都是废话,让我们来删除他们

[root@localhost redis-5.0.9]# ls | egrep -v 'utils|redis.conf|src' | xargs rm -rf
[root@localhost redis-5.0.9]# ls
redis.conf  src  utils
为了便于存放和管理配置文件、持久化文件和日志,让我们来建两个文件夹,分别为:conf,cluster,logs

[root@localhost redis-5.0.9]# mkdir conf
[root@localhost redis-5.0.9]# mkdir cluster

[root@localhost redis-5.0.9]# mkdir logs
[root@localhost redis-5.0.9]# ls
cluster  conf  redis.conf  src  utils logs
[root@localhost redis-5.0.9]# mv redis.conf conf/
[root@localhost redis-5.0.9]# ls
cluster  conf  src  utils  logs
接下来,重点来了。一个完整的Redis集群,至少需要6个实例。我们现在有三台服务器,那么每台就用2个实例。端口就使用6371和6471,所以,我们要修改conf/redis.conf

[root@localhost conf]#cd ../../

[root@localhost ~]# mv redis-5.0.9 redis

[root@localhost redis]# cd conf/
[root@localhost conf]# cp redis.conf 6371.conf
[root@localhost conf]# cp redis.conf 6471.conf
[root@localhost conf]# ls
6371.conf  6471.conf  redis.conf

让我们开始修改文件:

vim打开,找到

 

[root@localhost conf]# cat 6371.conf | grep -v ^# | grep -v ^$
bind 192.168.8.133  #本机是什么IP就改成什么
protected-mode yes
port 6371 #自定义
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes #可以让redis程序在后台运行
supervised no
pidfile /root/redis/cluster/redis_6371.pid #设置pid路径
loglevel notice
logfile "/root/redis/logs/6371.log"  #设置单独的日志文件目录
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb #默认的配置不用修改,文件默认存放在/root/redis/cluster下面
dir /root/redis/cluster/ #设置上面文件的存放目录
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
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
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
cluster-enabled yes #将实例修改为cluster模式,用来建立集群

cluster-config-file nodes-6371.conf  #每一个单独的cluster实例的配置文件都存放在/root/redis/cluster下面

[root@localhost conf]# cp 6371.conf 6471.conf
cp: overwrite ‘6471.conf’? y
[root@localhost conf]# ls
6371.conf  6471.conf  redis.conf
[root@localhost conf]#
让我们打开6471.conf,修改6371为6471,其余的保持不变

启动Redis:

[root@localhost redis]# /root/redis/src/redis-server /root/redis/conf/6371.conf

[root@localhost redis]# /root/redis/src/redis-server /root/redis/conf/6471.conf
[root@localhost redis]# ps -ef | grep redis
root      50121      1  0 22:52 ?        00:00:02 /root/redis/src/redis-server 192.168.8.135:6371 [cluster]
root      50697      1  0 23:13 ?        00:00:00 /root/redis/src/redis-server 192.168.8.135:6471 [cluster]
root      50702   9672  0 23:14 pts/0    00:00:00 grep --color=auto redis
 

这样,一个拥有两个节点的Redis就搭建好了。

我们来看看cluster目录下有什么?

[root@localhost redis]# ls cluster/
nodes-6471.conf  nodes.conf  redis_6371.pid  redis_6471.pid

接下来,我们将6371.conf和6471.conf拷到其余两台服务器的对应目录下,并检查一下这两台的redis目录下,是否有:conf,cluster,logs这三个目录,如果没有,赶快建吧。

然后修改这两个文件中的bind 192.168.8.133分别为

bind 192.168.8.134

bind 192.168.8.135

其余的内容保持不变即可。

然后分别启动6371和6471,使用ps -ef |grep redis检查一下你的进程有了吗?

我推测,并不是所有人做到这一步的时候,都可以顺利得到3个IP每个IP上有两个redis进程。错误,来源于粗心大意,请往上翻,将我上面讲的步骤再三核对一遍。

这里也列举一些常见的坑:

错误1:

这个问题明细是没有建logs目录,同样,要是报错cluster目录没有,请立马建一个

错误2:

redis启动之后,停留在当前页面,按CTRL+c退出。发现进程没起来,这是咋了?

daemonize yes

修改了吗??

6个进程都有了之后,让我们来建集群,建一个3节点6实例的redis集群。

安装集群,我们选择192.168.8.133作为主节点,一下的操作,都在133上操作,其余两台不用动!!!

[root@localhost redis]# yum install ruby

如果你的yum源安装不了ruby,请使用阿里的源,配置yum源这里不讲。

安装完成之后,我们会得到一个gem命令,注意,一定要有这个命令。不然下面步骤无法操作。

还需要一个文件,请把它传到redis目录下

redis-3.0.0.gem文件

链接:https://pan.baidu.com/s/1IiKDQGxP4XU7wDEKxNoVkw

提取码:ignv

感谢作者 和乐赢 分享

两个必备条件都有了之后,我们开始安装集群。

[root@localhost redis]# ls
cluster  conf  logs  redis-3.0.0.gem  src  utils
[root@localhost redis]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
Parsing documentation for redis-3.0.0
Installing ri documentation for redis-3.0.0
1 gem installed
 

然后使用命令:

echo yes | /root/redis/src/redis-cli --cluster create 192.168.8.133:6371 192.168.8.133:6471 192.168.8.134:6371 192.168.8.134:6471 192.168.8.135:6371 192.168.8.135:6471 --cluster-replicas 1

Redis运维精讲之集群安装篇_第1张图片

 

这个版本使用的集群安装命令和低版本不同,低版本可能要使用

 /root/redis/src/redis-trib.rb create --replicas 1 192.168.8.133:6371 192.168.8.133:6471 192.168.8.134:6371 192.168.8.134:6471 192.168.8.135:6371 192.168.8.135:6471

[root@localhost redis]# /root/redis/src/redis-cli  -h 192.168.8.133 -p 6371 -c

Redis运维精讲之集群安装篇_第2张图片

这里就表示安装好了。

到此为止,一个3节点6实例的redis集群安装成功。我们现在来看下133节点上的cluster目录下有什么?

在这里郑重提示:nodes-6371.conf和nodes-6471.conf,是集群起来之后,保存的该实例的集群连接信息,不能删除,否则重启实例之后,集群必然失败!!建议备份到其他地方。这个坑一旦踩进去,生产环境必然崩溃!

重建集群需要删除所有节点下的这两个文件

然后使用gem install redis-3.0.0.gem

然后在使用 echo yes | /root/redis/src/redis-cli --cluster create 192.168.8.133:6371 192.168.8.133:6471 192.168.8.134:6371 192.168.8.134:6471 192.168.8.135:6371 192.168.8.135:6471 --cluster-replicas 1

一套操作下来,至少需要10分钟,等业务恢复之后,客户早就投诉过来了,后续又要回溯,又要挨叼,还要写各种文档,看各种眼色。亲们,一定要慎重啊!

在看看logs下:

接下来,记录一些坑:

坑1:

如果报错6371不是一个cluster节点,那肯定是你的

cluster-enabled yes 

cluster-config-file nodes-6371.conf

这两句没有按要求改好,请改好后杀掉进程并重启redis

请注意:进程后面一定要带有cluster字样,普通的redis服务,在这个版本是不可以做集群的。

 

你可能感兴趣的:(运维,redis,linux)