Redis集群部署——去中心化
一、redis安装环境和版本
redis版本:redis-3.2.9
虚拟机:192.168.80.11(redis1)、192.168.80.12(redis2)、192.168.80.13(redis3)模拟6个节点,一台机器2个节点,创建3个master,3个slave环境。
master对应的slave不要在一台服务器上
二、安装过程(三台机器)
1、去官方网站 https://redis.io
历史版本http://download.redis.io/releases/
下载解压redis-3.2.9.tar.gz
[root@redis1 ~]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz #下载
[root@redis1 ~]# mkdir -p /data/application/
[root@redis1 ~]# tar -xvzf redis-3.2.9.tar.gz -C /data/application/ #解压缩
2、编译安装redis
redis编译安装需要先安装gcc环境
(编译Redis6.0.0,make && make install 失败)>[往下翻]
gcc –v 检查客户环境是否已经预装gcc,如果没有需要,需要先安装
[root@redis1 ~]# yum -y install gcc gcc-c++ autoconf automake #下载编译工具
离线环境部署gcc环境
在能上网的对应系统版本服务器中执行下面语句,将依赖包下载下来
[root@redis1 ~]# cd /data/application/
[root@redis1 ~]# gcc -v #验证gcc编译工具安装成功,下图回显为成功
[root@redis1 ~]# cd /data/application/redis-3.2.9
[root@redis1 redis-3.2.9]# make && make install #编译安装Redis
[root@redis1 ~]# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/data/application/redis-3.2.9/src
export PATH
[root@redis1 ~]# source ~/.bash_profile
[root@redis1 ~]# mkdir /data/application/redis-3.2.9/redis_cluster
[root@redis1 ~]# cd /data/application/redis-3.2.9/redis_cluster
[root@redis1 ~]# mkdir 7001 7002 #在 redis_cluster 目录下,创建名为7001、7002的目录
[root@redis1 ~]# cp /data/application/redis-3.2.9/redis.conf /data/application/redis-3.2.9/redis_cluster/7001
[root@redis1 ~]# cp /data/application/redis-3.2.9/redis.conf /data/application/redis-3.2.9/redis_cluster/7002 将/data/application/redis-3.2.9/redis_cluster拷贝到这两个目录中
[root@redis1 ~]# vim /data/application/redis-3.2.9/redis_cluster/7001/redis.conf #分别修改7001和7002这两个配置文件redis.conf
port 7001 //每个配置文件都需要修改成对应的端口
bind 192.168.80.11 //需要改为其他节点机器可访问的ip为192.168.80.12,192.168.80.13
daemonize yes //redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件对应端口
maxmemory-policy volatile-lru
cluster-enabled yes //必须开启集群,把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置,对应端口
cluster-node-timeout 15000 //请求超时,默认15秒,可自行设置
appendonly no //aof日志开启,有需要就开启,它会每次写操作都记录一条日志
save “”
#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端
速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说
大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,
然后在终端中执行sysctl -p
tcp-backlog 511
net.core.somaxconn = 2048
在Redis1、Redis2和Redis3,重复以上步骤,把目录改为7001,7002,对应的配置文件也按照这个规则修改即可。
启动Redis1、Redis2和Redis3各个节点
[root@redis1 ~]# cd /data/application/redis-3.2.9/redis_cluster/7001
[root@redis1 ~]# redis-server redis.conf
[root@redis1 ~]# cd /data/application/redis-3.2.9/redis_cluster/7002
[root@redis1 ~]# redis-server redis.conf
[root@redis1 ~]# ps -ef | grep redis 检查Redis各个节点启动情况
root 6813 1 0 04:46 ? 00:00:05 redis-server 192.168.80.11:7001 [cluster]
root 6820 1 0 04:47 ? 00:00:05 redis-server 192.168.80.11:7002 [cluster]
root 40472 39796 0 08:03 pts/0 00:00:00 grep --color=auto redis
创建集群
[root@redis1 ~]# yum -y install ruby ruby-devel rubygems rpm-build
集群方式是通过Redis安装目录下的redis-trib.rb脚本搭建。这个脚本是用Ruby编写的,所以要先安装Ruby环境
[root@redis1 ~]# gem install redis #使用gem这个命令来安装redis接口
Successfully installed redis-4.2.1
Parsing documentation for redis-4.2.1
Done installing documentation for redis after 0 seconds
1 gem installed
以上回显为成功,如果ERROE报错,请看文档最后
[root@redis1 ~]# cd /data/application/redis-3.2.9/src/
#在一台机器上运行下面命令
[root@redis1 src ]# ./redis-trib.rb create --replicas 1 192.168.80.11:7001 192.168.80.12:7001 192.168.80.13:7001 192.168.80.11:7002 192.168.80.12:7002 192.168.80.13:7002
然后会出现一个提示 Can I set the above configuration? (type 'yes' to accept):yes
输入yes回车
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
在Redis1、Redis2和Redis3进行登录测试
[root@redis1 src]# redis-cli -c -h 192.168.80.13 -p 7001
192.168.80.13:7001> set zh zhang
-> Redirected to slot [11826] located at 192.168.80.13:7001
OK
192.168.80.13:7001> get zh
"zhang"
查看Redis去中心化状态
[root@redis1 src]# redis-cli -c -h 192.168.80.13 -p 7001
192.168.80.13:7001> cluster nodes #查看去中心化状态
951fb3b6163e9690c9f1bfa7282ac73c3ee2afe5 192.168.1.106:7002 slave 67b182c52303eca62b98180f82908ea20ee6abe4 0 1599731203885 6 connected
bb1480f19725632f380903607601532bd425945a 192.168.1.125:7002 slave 2b7c7ebdfed022bb3891cfc6ff2a5e027f3bc907 0 1599731206944 4 connected
87433f617da8cf42871783370f79bd3bdefc2be0 192.168.1.125:7001 myself,slave b3ff025c85645d4ed67aa54d7f4ce7f0f47b77d2 0 0 1 connected
b3ff025c85645d4ed67aa54d7f4ce7f0f47b77d2 192.168.1.126:7002 master - 0 1599731207970 7 connected 0-5460
2b7c7ebdfed022bb3891cfc6ff2a5e027f3bc907 192.168.1.126:7001 master - 0 1599731204902 2 connected 5461-10922
67b182c52303eca62b98180f82908ea20ee6abe4 192.168.1.106:7001 master - 0 1599731205924 3 connected 10923-16383
Redis去中心化不重启添加密码
执行以下命令
redis-cli -c -h 192.168.80.13 -p 7001
192.168.80.13:7001> config set masterauth 123456 #
192.168.80.13:7001> config set requirepass 123456 #临时修改密码
192.168.80.13:7001> auth 123456 #登陆输入密码
192.168.80.13:7001> config rewrite #把修改写到配置文件中
192.168.80.13:7001> exit
192.168.80.13:7001> config get requirepass #查看密码
执行成功后配置文件会增加两行
*此时再登陆时(未授权)会报错误
需要授权登陆 -a 密码或者登陆后 auth输入密码
redis-cli -c -h 192.168.80.13 -p 7001 -a '123456' #方法一登陆
192.168.80.13:7001>
redis-cli -c -h 192.168.80.13 -p 7001 #方法二登陆
192.168.80.13:7001> auth 123456
redisset.txt 文件内容
config set masterauth 123456
config set requirepass 123456
auth 123456
config rewrite
setauth.sh 文件内容
#/bin/bash
cat redisset.txt | redis-cli -c -h 192.168.80.11 -p 7301
cat redisset.txt | redis-cli -c -h 192.168.80.12 -p 7301
cat redisset.txt | redis-cli -c -h 192.168.80.13-p 7301
cat redisset.txt | redis-cli -c -h 192.168.80.11 -p 7302
cat redisset.txt | redis-cli -c -h 192.168.80.12 -p 7302
cat redisset.txt | redis-cli -c -h 192.168.80.13 -p 7302
报错为以下信息,是因为ruby过低
[root@localhost 7002]# gem install redis
Fetching: redis-4.2.1.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.
报错
报错
↓ ↓ ↓ ↓ ↓ ↓
gem install redis,ERROE报错,一般为Ruby版本过低导致的
方法一:
#查看版本信息
[root@redis1 ~]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
RVM是一个命令行工具,可以提供一个便捷的多#版本Ruby环境的管理和切换。下载RVM需要先下载CRIL(linux下的文件传输工具)
[root@redis1 ~]# yum -y install curl
[root@redis1 ~]# curl -sSL https://get.rvm.io | bash -s stable
[root@redis1 ~]# vim /etc/hosts #上一步失败,在本机上做一个解析
151.101.76.133 raw.githubusercontent.com
151.101.228.133 raw.githubusercontent.com
151.101.108.133 raw.githubusercontent.com
以上解析写一个就可以
[root@redis1 ~]# gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
#运行下图回显
显示成功
[root@redis1 ~]# curl -sSL https://get.rvm.io | bash -s stable #再次运行下载命令
[root@redis1 ~]# source /usr/local/rvm/scripts/rvm
[root@redis1 ~]# rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.9]
[ruby-]2.5[.7]
[ruby-]2.6[.5]
[ruby-]2.7[.0]
ruby-head
.....
#选择自己要下载的版本
[root@redis1 ~]# rvm install 2.4.9
修改 RVM 的 Ruby 安装源到 Ruby China 的 Ruby 镜像服务器,这样能提高安装速度
[root@redis1 ~]# echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > /usr/local/rvm/user/db
[root@redis1 ~]# rvm use 2.4.9 && rvm remove 2.0.0 #运行新版本,移除旧版本
编译Redis6.0.0,make && make install 失败
查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5
gcc -v
升级gcc到5.3及以上,如下:
升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
这样退出shell重新打开就是新版的gcc了
以下其他版本同理,修改devtoolset版本号即可。
方法二:通过下载tar包,源码安装
需要下载ruby、
ruby官方网站
[root@redis1 ~]# wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.8.tar.gz
[root@redis1 ~]# ruby -v #查看ruby版本号
ruby 2.0.0p648 (2015-12-16 revision 67824) [x86_64-linux]