前言:
因为对于低版本的 redis 来说,在部署集群时,redis 官方提供了 redis 集群方式的工具:redis-trib.rb,位于 "redis-4.x.x/src" 目录下,它是用 ruby 写的一个程序,所以在部署 redis 集群之前,需要安装 ruby 环境,本次讲解通过在线的方式部署 "redis-4.0.2" 集群。
官方下载网址:https://download.redis.io/releases/
关闭防火墙:
[root@localhost ~]# setenforce 0 # 关闭 Selinux
[root@localhost ~]# systemctl stop firewalld.service # 关闭 firewall 防火墙
1、安装 ruby 工具:
CentOS7 库中的红宝石的版本支持到 2.0.0,我们安装的redis 4.0.2 要求ruby 最低版本为 2.3.0,所以这里采用 rvm 来安装 ruby,如果服务器中已经存在旧版本的 ruby,请先卸载了再进行安装。
[root@localhost ~]# gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
下载并安装 rvm:
[root@localhost ~]# vim /etc/hosts # 配置一下域名,不然执行下面下载 rvm 命令时会提示报错
添加一行:199.232.68.133 raw.githubusercontent.com
[root@localhost ~]# curl -L get.rvm.io | bash -s stable
查找 rvm 安装路径,并查看 RVM 库中 ruby 的版本:
[root@localhost ~]# find / -name rvm -print
[root@localhost ~]# source /usr/local/rvm/scripts/rvm # 在当前 bash 环境下读取并执行 rvm 中的命令
[root@localhost ~]# rvm list known # 在RVM库中查看 ruby 版本
这里我们选择安装 2.3.8 这个版本的 ruby,这个过程比较久,耐心等待执行完成即可(建议换个较好的网络再执行):
[root@localhost ~]# rvm install 2.3.8 # 安装ruby 2.3.8
安装 redis 与 ruby 的接口包:
[root@localhost ~]# gem install redis
2、安装 redis:
解压安装文件:
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# tar -zxf redis-4.0.2.tar.gz
安装 redis 4.0.2:
[root@localhost src]# cd redis-4.0.2/
[root@localhost redis-4.0.2]# make PREFIX=/usr/local/redis install
设置环境变量:
[root@localhost redis-4.0.2]# vim /etc/profile
在最底下添加一行:
export PATH=$PATH:/usr/local/redis/bin
[root@localhost redis-4.0.2]# source /etc/profile # 使配置立即生效
配置 redis 集群,因为使用 "redis-trib.rb" 命令创建 redis 集群时候,没有 "-a" 参数传递密码,所以这里暂时不配置 "masterauth" 和 "requirepass" 参数,创建完集群之后再去设置密码。注意删掉注释:
[root@localhost redis-4.0.2]# cd /usr/local/redis/
[root@localhost redis]# mkdir redis-cluster && cd redis-cluster
[root@localhost redis-cluster]# mkdir 638{1,2,3,4,5,6}
[root@localhost redis-cluster]# cat << EOF > 6381/redis.conf
protected-mode no
bind 0.0.0.0
port 6381 # 服务监听端口
daemonize yes # 后台启动
dir /usr/local/redis/redis-cluster/6381/
pidfile /usr/local/redis/redis-cluster/6381/redis.pid
appendonly yes # 启用守护进程
cluster-enabled yes # 启用集群
cluster-config-file "nodes.conf" # 关联集群的配置文件
cluster-node-timeout 5000 # 集群超时时间
cluster-require-full-coverage no # 只要有结点宕机导致 16384 个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为 no
EOF
[root@localhost redis-cluster]# cat << EOF > 6382/redis.conf
protected-mode no
bind 0.0.0.0
port 6382
daemonize yes
dir /usr/local/redis/redis-cluster/6382/
pidfile /usr/local/redis/redis-cluster/6382/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 5000
cluster-require-full-coverage no
EOF
[root@localhost redis-cluster]# cat << EOF > 6383/redis.conf
protected-mode no
bind 0.0.0.0
port 6383
daemonize yes
dir /usr/local/redis/redis-cluster/6383/
pidfile /usr/local/redis/redis-cluster/6383/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 5000
cluster-require-full-coverage no
EOF
[root@localhost redis-cluster]# cat << EOF > 6384/redis.conf
protected-mode no
bind 0.0.0.0
port 6384
daemonize yes
dir /usr/local/redis/redis-cluster/6384/
pidfile /usr/local/redis/redis-cluster/6384/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 5000
cluster-require-full-coverage no
EOF
[root@localhost redis-cluster]# cat << EOF > 6385/redis.conf
protected-mode no
bind 0.0.0.0
port 6385
daemonize yes
dir /usr/local/redis/redis-cluster/6385/
pidfile /usr/local/redis/redis-cluster/6385/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 5000
cluster-require-full-coverage no
EOF
[root@localhost redis-cluster]# cat << EOF > 6386/redis.conf
protected-mode no
bind 0.0.0.0
port 6386
daemonize yes
dir /usr/local/redis/redis-cluster/6386/
pidfile /usr/local/redis/redis-cluster/6386/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file "nodes.conf"
cluster-node-timeout 5000
cluster-require-full-coverage no
EOF
启动 redis 集群服务:
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6381/redis.conf
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6382/redis.conf
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6383/redis.conf
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6384/redis.conf
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6385/redis.conf
[root@localhost redis-cluster]# redis-server /usr/local/redis/redis-cluster/6386/redis.conf
查看 redis 启动进程:
[root@localhost redis-cluster]# ps aux | grep redis
[root@localhost redis-cluster]# netstat -anltp | grep redis
3、创建 redis 集群:
将安装包目录下的 src/redis-trib.rb 文件拷贝到 redis 安装目录下,并创建 redis 集群:
[root@localhost redis-cluster]# cd /usr/local/src/redis-4.0.2/
[root@localhost redis-4.0.2]# cp src/redis-trib.rb /usr/local/redis/bin/
[root@localhost redis-4.0.2]# redis-trib.rb create --replicas 1 192.168.109.135:6381 192.168.109.135:6382 192.168.109.135:6383 192.168.109.135:6384 192.168.109.135:6385 192.168.109.135:6386
集群验证:
[root@localhost redis-4.0.2]# redis-cli -h 192.168.109.135 -c -p 6381
192.168.109.135:6381> SET hello world
OK
192.168.109.135:6381> exit
[root@localhost redis-4.0.2]# redis-cli -h 192.168.109.135 -c -p 6385
192.168.109.135:6385> get hello
-> Redirected to slot [866] located at 192.168.109.135:6381
"world"
192.168.109.135:6381> exit
4、设置 redis 集群密码:
redis集群节点密码设置有两种方式:
方式1:修改所有 redis 集群节点中的 redis.conf 配置文件,添加下面两行配置,并重启 redis 集群所有节点:
# 建议 masterauth 和 requirepass 的密码设置成一样
masterauth <密码>
requirepass <密码>
方式2:进入各个实例通过命令的方式进行设置,推荐使用这种方式来给集群设置密码,该方式会把密码写入到 redis.conf 里面去,且不用重启,命令如下所示:
config set masterauth <密码>
config set requirepass <密码>
auth <密码>
config rewrite