redis集群实战
redis集群master节点必须在3个以上,所以官方建议启动6个节点,3个作为master,3个最为slave
本示例会安装端口为7000到7005这6个redis节点
一、安装
官网https://redis.io/download中有如下脚本,跟着执行就行了。需要注意的是版本号,每次安装最好去这个网页看看最新的版本号
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make
安装好后测试一下是否成功
执行src/redis-server &命令会启动redis服务端
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
按照上方代码执行,如果结果一致则安装成功。
在继续集群部署前,先把刚刚启动的这个服务端停止,方法就是用kill命令
二、集群
官网地址https://redis.io/topics/cluster-tutorial,这里对集群的配置做了详细的说明。
注意:在网页的最后部分,提供一种用于测试的快速集群脚本,但生产环境尽量不要这样做。
实现步骤:
1.为6个节点分别创建对应的目录
mkdir cluster-node
cd cluster-node
mkdir 7000 7001 7002 7003 7004 7005
2.在每个目录中创建redis.cnf配置文件,内容如下。注意,根据对应端口设置port(7000到7005)
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
3.将6个redis节点都启动起来
进入每个目录下,执行下面的命令
../redis-server ./redis.conf &
注意redis-server前面的相对路径要指定到redis安装目录下的src路径中
6个都启动后,使用ps -ef | grep redis命令应该可以看到有6条不同端口的redis记录
4.安装gem工具
redis集群有个脚本,但是要执行那个脚本就必须安装gem工具
安装gem工具就要安装ruby
1.先卸载本机的ruby因为可能版本太老
yum remove ruby
2.安装ruby
yum install ruby
3.安装RubyRem
yum install rubygems
4.安装redis的rem文件
redis的官网提供gem install redis这样一条命令自动安装,但是实际使用的时候发现基本两部上下载服务器,可能被墙了,使用下面的方法。
在网站https://rubygems.org上搜索redis,点击第一条记录进入,这是可以看到版本列表,我第一次用的最新版4.0.0,后来发现4.0.0需要ruby2.2以上,
但是我上面用yum命令装的ruby貌似是1.8几的,所以使用了前一个稳定版本3.3.3
wget https://rubygems.org/downloads/redis-3.3.3.gem
gem install redis-3.3.3.gem
5.创建集群
进入src目录,执行下方命令
./redis-trib.rb create --replicas 1 172.26.46.115:7000 172.26.46.115:7001 172.26.46.115:7002 172.26.46.115:7003 172.26.46.115:7004 172.26.46.115:7005 &
注意:官方文档中ip都写的是127.0.0.1,千万不要这样设置,否则java客户端连接的时候会报Could not get a resource from the pool错误
6.验证集群是否生效
官方给出几行命令用户验证
./redis-cli -c -p 7000
redis 127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
redis 127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
redis 127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
redis 127.0.0.1:7000> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
注意:端口要跟上面一样才能验证出效果,如果发现端口不一样,用第一条命令打开指定的端口
如果跟上方输出一直,说明集群已经生效
除此之外,还可以通过./redis-trib.rb check 127.0.0.1:7000来验证
三、注意事项
1.配置文件中的bind
bind的作用是服务端绑定的域名,默认配置中和官方的演示中配的都是127.0.0.1,但是如果这样配的话,那么以后就只能本机才能访问,所以不写这个或者注释掉
2.配置文件中的protected-mode
protected-mode默认是yes,启用的话就只有bind绑定的域名或者设置了密码的客户端能访问,所以我们这里设置成no
3.如何重启单个节点
ps查出pid后直接kill就行了,kill的时候集群会检测服务器状态所以会输出一些日志。
4.如何重启或者重新配置集群
没有简单的命令来完成这个操作,只能把6个节点的服务都kill掉,然后进入7000到7005目录,把里面除了redis.cnf外的其他文件都删掉,然后配置好每个节点后,
把所有节点都启动起来,然后再执行一次
./redis-trib.rb create --replicas 1 172.26.46.115:7000 172.26.46.115:7001 172.26.46.115:7002 172.26.46.115:7003 172.26.46.115:7004 172.26.46.115:7005 &
5.遇到问题怎么办
尽量去到官方查文档,这里是最权威并且和当前安装的版本最匹配的,如果在网上搜索,一方面可能不全另一方面有可能根本就用不了