Redis集群部署

 redis源码包下载地址:http://download.redis.io/releases/

 redis使用手册:http://redisdoc.com/index.html

下载需要注意的是: Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的版本号用来表示非标准版本,例如2.9.x是非稳定版本,它的稳定版本是3.0。


注意:Redis集群至少需要3个master节点,所以现在总共有6个节点,就只能是1master对应1slave这种方式

Redis集群为什么至少需要三个master节点?

因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的

Redis集群为什么推荐master节点数为奇数?

master节点数为奇数不是必须的,但是奇数个master节点可以在满足选举该条件的基础上节省一个节点。

因为master的选举机制,例如:

在9个master的架构中,如果4台master故障,通过过半机制,redis可以选举新的master。如果5台master故障无法选举新的master(9-5<9/2,不满足过半机制)

在10个master的架构中,如果4台master故障,通过过半机制,redis可以选举新的master。如果5台master故障无法选举新的master(10-5=10/2,不满足过半机制)


 Redis集群部署

该部署使用的Red Hat 7为例

下列部署方式采用的是redis-cli方式创建的redis集群,只有redis5.0以后的版本才支持该方式,之前的版本都是使用redis-trib.rb方式,但是需要安装ruby软件相对复杂。

服务规划:

我们使用3台设备进行搭建,每台设备上有两个节点,使用不同的端口进行部署

安装前准备(所有设备):

1.下载所需依赖包

    yum -y install gcc-c++

2.关闭防火墙

    systemctl stop firewalld.service

    systemctl disable firewalld.service

3.关闭SELinux

    setenforce 0               

    vi /etc/selinux/config   

SELINUX=enforcing改为SELINUX=disabled

安装redis(192.168.36.137)

1.解压安装包

    #将安装包上传至/opt/instll下(个人习惯)

    tar -zxvf /opt/install/redis-6.2.1/tar/gz

    cd /opt/install/redis-6.2.1

    #编译安装至/opt/redis7000下,7000是我们该redis使用的端口

    make && make install PREFIX=/opt/redis7000

2.配置redis配置文件

    mkdir -p /opt/redis7000/conf

    cd /opt/install/redis-6.2.1

    #将redis源码包里的redis.conf配置文件放置到我们redis安装路径下

    mv redis.conf /opt/redis7000/conf/

    vim /opt/redis7000/conf/redis.conf

1.bind 192.168.36.137                      //将bind 127.0.0.1修改为自己本机的IP地址
2.daemonize yes                            //redis放置后台启动
3.port 7000                                //设置端口
4.pidfile /opt/redis7000/redis_7000.pid
5.logfile /opt/redis7000/redis_7000.log
6.dir /opt/redis7000/redis_7000_dir
7.masterauth 123                           //配置密码,所有节点统一
8.requirepass 123                          //配置密码,所有节点统一
9.cluster-enabled yes                      //开启集群
10.cluster-config-file redis.conf          //指定配置文件名称
11.cluster-node-timeout 15000
12.appendonly yes                          //开启aof持久化,要想了解redis持久化,可以看我之前写的redis持久化说明,如果对于redis上的数据不是那么重要的话,也可以不进行redis持久化配置
13.no-appendfsync-on-rewrite yes           //aof重写期间是否同步
14.protected-mode no                       //关闭保护模式
15.maxmemory 4GB                           //设置 Redis 最大使用内存大小,当 Redis 使用的内存超过设置大小时就开始对数据进行淘汰
16.maxmemory-policy volatile-lru           //设置 Redis 的内存淘汰算法为:在设置了过期时间的Keys中,通过LRU算法来进行淘汰
17.若Redis里存放的是一些无关紧要的数据,可以将Redis配置成无持久化,有助于性能提升,将下列项注释即可
   #save 900 1
   #save 300 10
   #save 60 10000

    mkdir /opt/redis7000/redis_7000_dir

扩展说明:

# Redis 内存淘汰算法分为随机、TTL、LRU、LFU四种
1.随机算法很好理解,就是从数据库中随机淘汰一些 Keys
2.TTL 算法就是从设置了过期时间的 Keys 中获取最早过期的 一批 Keys,然后淘汰这些Keys
3.LRU 主要是通过 Key 的最后访问时间来判定哪些 Key 更适合被淘汰
4.LFU算法主要通过 Key 的访问频率来统计哪些 Key 更适合被淘汰
# 我们可以在配置文件中配置 maxmemory-policy 配置项来设置 Redis 的内存淘汰算法, maxmemory-policy 可选值如下所示
1.volatile-lru:在设置了过期时间的Keys中,通过LRU算法来进行淘汰
2.allkeys-lru:在所有的Keys中,通过LRU算法进行淘汰
3.volatile-lfu:在设置了过期时间的Keys中,通过LFU算法来进行淘汰
4.allkeys-lfu:在所有的Keys中,通过LFU算法进行淘汰
5.volatile-random:在设置了过期时间的Keys中,通过随机算法来进行淘汰
6.allkeys-random:在所有的Keys中,通过随机算法进行淘汰
7.volatile-ttl:在设置了过期时间的Keys中,选择过期时间最短的Key进行淘汰
8.noeviction:不对Keys进行淘汰

3.复制redis7000创建第二个节点,使用7001端口

    cp -r /opt/redis7000 /opt/redis7001

    cd /opt/redis7001/conf/

    #文档内容替换,替换7000字符成7001    

    sed -i "s/7000/7001/g" redis.conf

    #修改dir数据文件名称

    cd /opt/redis7001/

    mv redis_7000_dir redis_7001_dir

至此,192.168.36.137设备上的两个redis就已经配置完成了!

4.将redis文件远程拷贝到其它设备上

    scp -r /opt/redis7000 root@192.168.36.138:/opt

    scp -r /opt/redis7000 root@192.168.36.139:/opt

 

然后修改其它两台设备上的redis文件名和dir文件名,并将redis.conf配置文件内容进行替换成对应的内容即可,可以参考我上方所使用的sed命令进行替换。IP也要记得修改

最后再将6个节点的redis全部启动即可。(进入redis的bin目录,使用./redis-cli ../conf/redis.conf命令启动)


创建redis集群

随便登录一台服务器上的一个节点,在此,我以192.168.36.137为例

    cd /opt/redis7000/bin

    #cluster-replicas 1代表1个master后有几个slave节点,1代表1个,所以6个节点将会产生3个master和3个slave,-a 指定redis的密码     

    ./redis-cli --cluster create 192.168.36.137:7000 192.168.36.137:7001 192.168.36.138:7002 192.168.36.138:7003 192.168.36.139:7004 192.168.36.139:7005 --cluster-replicas 1 -a 123

    #该命令只需要执行一次即可,后面哪怕我们重启了整个redis,也不需要执行第二次了

Can I set the above configuration? (type 'yes' to accept): yes    //弹出该项,输入yes即可

连接redis集群

    cd /opt/redis7000/bin

    # -c代表连接集群,-a是我们的redis密码

    ./redis-cli -h 192.168.36.137 -p 7000 -c -a 123 --raw

    #要想不提示下方的警告,在命令后加上 2>/dev/null即可

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.    //该警告是我们的密码明文显示提示的警告

    # 列出集群的节点的信息

192.168.36.137:7000> cluster nodes
1ade62b46631ea9be6c0637df17dfe8098481aec 192.168.36.138:7003@17003 slave 3584cbe89f97020ac8f3a2c9fcfca8b4a78fcc86 0 1645701258000 1 connected
82f2ce489ae537381244f700567792ce5ba803ee 192.168.36.138:7002@17002 master - 0 1645701260457 3 connected 5461-10922
4525f4572ebebf6e795e3b6621e60e3170fec7e7 192.168.36.137:7001@17001 slave 1dcb5a3eb366a5bc4e96ca3c59dd7b2af09b38ac 0 1645701261462 5 connected
3584cbe89f97020ac8f3a2c9fcfca8b4a78fcc86 192.168.36.137:7000@17000 myself,master - 0 1645701261000 1 connected 0-5460
1dcb5a3eb366a5bc4e96ca3c59dd7b2af09b38ac 192.168.36.139:7004@17004 master - 0 1645701260000 5 connected 10923-16383
4c178df9271d6a57c5725c7442d97a6586a35cb6 192.168.36.139:7005@17005 slave 82f2ce489ae537381244f700567792ce5ba803ee 0 1645701259452 3 connected

    # 列出当前节点的信息  

    cluster info 

 

需要特别说明的是,redis集群中插入数据的话是随机存储到集群中的某个节点的,是一个分布式的存储,你只有进入到对应的节点,才可以看到相应的数据


至此,redis集群就部署完成了!

posted @ 2022-02-22 17:10  RFAA  阅读(1101)  评论(0编辑  收藏  举报