阿里云服务器实战搭建成功,采用3台机器(3个主节点),每台机器2个节点(一个主节点,一个备份节点),共计6节点。
使用redis版本:4.0.11
服务器:centos
相关数据
主机外网ip | 内网地址 | 端口 | 备注 |
---|---|---|---|
out-ip1 | inner-ip1 | 6379,6380 | 每台机器两个节点,端口分别是6379,6380 |
out-ip2 | inner-ip2 | 6379,6380 | 每台机器两个节点,端口分别是6379,6380 |
out-ip3 | inner-ip3 | 6379,6380 | 每台机器两个节点,端口分别是6379,6380 |
redis密码:pwd2019
注意:所有的节点的密码要设置统一。
首先搭建一个单机版的redis,并保证其可用。
此处不详述搭建过程,可参考:[Linux安装搭建redis][https://blog.csdn.net/weixin_43566469/article/details/84889639]
# 1. 创建redis集群目录
mkdir /usr/local/redis-cluster
# 2. 复制redis单机版,因本次搭建每台机器上两个节点,因此复制2份
cp -r /usr/local/redis /usr/local/redis-cluster/redis01
cp -r /usr/local/redis /usr/local/redis-cluster/redis02
# 3. 删除复制后的redis中的数据文件 dump.rdb或appendonly.aof。集群一旦搭建,会规划好所有的slot和redis节点的关系. 原有的数据无法实现CRC16算法计算. 会导致集群搭建失败.
cd /usr/local/redis-cluster/redis01
rm -rvf dump.rdb appendonly.aof
cd /usr/local/redis-cluster/redis02
rm -rvf dump.rdb appendonly.aof
# 4. 修改配置文件redis.conf
vi redis.conf
# 后台启动
daemonize yes
# 如果需要外网访问集群。需将bind 127.0.0.1 这一行注释掉,如下
# bind 127.0.0.1
# 设置端口,6379或6380
port 6379
# 设置访问主节点的密码
masterauth pwd2019
# 设置密码
requirepass pwd2019
# 开启集群
cluster-enabled yes
# 节点配置文件
cluster-config-file nodes-6379.conf
# 节点超时时间
cluster-node-timeout 15000
3台机器上均执行以上操作,就搭好了6个redis节点。配置文件可以写好一份后,进行复制也是也可以的,不过要注意端口号可能要更改一下。
ruby是一个脚本语言. 在redis的集群cluster中,集群的节点之间,是使用ruby脚本实现数据通讯的. redis的集群需要ruby提供数据访问.
yum install -y ruby
因为使用的是redis的较高版本,需要手动安装rvm,然后再安装gem。步骤如下:
# 先获取一个签名认证服务
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
# 安装rvm
curl -sSL https://get.rvm.io | bash -s stable
# 查看rvm库中已知的ruby版本
rvm list known
# 安装一个ruby版本
rvm install 2.5.5
# 设置使用默认版本
rvm use 2.5.5 --default
# 安装gem
gem install redis
注意:如果redis集群需要在外网访问,需要开放端口(如果只在内网访问,忽略该步骤),执行以下操作:
此处使用了6379,6380端口。但实际上,redis还需要16379和16380端口作为总线端口。规则是redis所使用的端口+10000。
因此需要开放6379,6380,16379,16380四个端口。
如果是阿里云服务器,就需要在安全组上开放这些端口。
以下工作只需一台机器上执行即可。
# 找到已编译的源码包下的src目录的redis-trib.rb脚本文件
cd /usr/local/redis-4.0.11/src
# 复制脚本到redis集群工作目录
cp redis-trib.rb /usr/local/redis-cluster
# 修改集群脚本配置,先找到client.rb,这个文件在使用的ruby下的gem包下
find /usr/ -name 'client.rb'
# 如果发现很多,注意一个是ruby版本,比如这里使用的是2.5.5,一个是gems后面是redis
# 比如这里应该是这个文件
/usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
# 修改这个文件
vi /usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
# 找到password一行,修改为正确的密码,然后保存退出
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "pwd2019",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:reconnect_delay => 0,
:reconnect_delay_max => 0.5,
:inherit_socket => false
}
# 启动节点1
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
# 启动节点2
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
可以将上述命令写成一个脚本文件,方便执行
# 创建start-all.sh脚本文件
vi start-all.sh
#!/bin/bash
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
# 添加执行权限
chmod u+x start-all.sh
保证所有的redis集群节点都已启动
然后在集群脚本准备好的机器(步骤5)上执行以下命令
# 使用外网ip创建集群,这样外网才能正常访问。如果不需要外网访问,可以使用内网ip创建集群
cd /usr/local/redis-cluster
./redis-trib.rb create --replicas 1 out-ip1:6379 out-ip2:6379 out-ip3:6379 out-ip3:6380 out-ip1:6380 out-ip2:6380
命令解析:
create - 创建集群
–replicas 1 - 定义备份机数量, 每个主机节点对应一个备份机.
ip:port- 提供redis应用所在的物理位置和端口号.
互动提示,一定要输入yes. 其他任何输入,都代表取消配置.
一般的,前3个节点将成为主节点,后面3个将成为从节点。这里依次输入了ip1,ip2,ip3,ip3,ip1,ip2的顺序,使ip3成为ip1的从节点,ip1成为ip2的从节点,ip2成为ip3的从节点。避免主从节点在同一台机器上。任何一台集群宕机都能保证集群仍能正常工作。