美文网首页
Redis主从集群

Redis主从集群

作者: 学编程的小屁孩 | 来源:发表于2020-04-06 15:56 被阅读0次

安装 docker

[修订]docker 已分为 ce/ee 直接yum版本较低 请使用下方安装最新版

docker-ce yum 安装:https://www.cnblogs.com/Peter...(转)或使用 daocloud 安装:http://get.daocloud.io/#insta...

# 2019-1-24 注明:#安装 docker
yum install docker -y systemctl start docker.service 

获取 redis 镜像

docker search redis docker pull redis:latest docker images

创建容器

创建宿主机 redis 容器的数据和配置文件目录

# 这里我们在 /home/docker 下创建
mkdir /home/docker/redis/{conf,data} -pcd /home/docker/redis

获取 redis 的默认配置模版

获取 redis 的默认配置模版
这里主要是想设置下 redis 的 log / password / appendonly
redis 的 docker 运行参数提供了 --appendonly yes 但没 password

wget https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf -O conf/redis.conf

直接替换编辑

sed -i 's/logfile ""/logfile "access.log"/' conf/redis.conf
sed -i 's/# requirepass foobared/requirepass 123456/' conf/redis.conf
sed -i 's/appendonly no/appendonly yes/' conf/redis.conf 

这里可能还需配置一些 bind protected-mode
protected-mode no
requirepass a1s2W3l4%G

加载配置文件
./redis-server /usr/local/redis/redis.conf &

protected-mode 是在没有显示定义 bind 地址(即监听全网断),又没有设置密码 requirepass
时,protected-mode 只允许本地回环 127.0.0.1 访问。
也就是说当开启了 protected-mode 时,如果你既没有显示的定义了 bind 监听的地址,同时又没有设置 auth 密码。那你只能通过 127.0.0.1 来访问 redis 服务。

创建并运行一个名为 myredis 的容器

docker run \
-p 6379:6379 \
-v $PWD/data:/data \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
--privileged=true \
--name myredis \
-d redis redis-server /etc/redis/redis.conf 

命令分解docker

run -p 6379:6379 \ # 端口映射 宿主机:容器
-v $PWD/data:/data:rw \ # 映射数据目录 rw 为读写
-v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro \ # 挂载配置文件 ro 为readonly
--privileged=true \ # 给与一些权限
--name myredis \ # 给容器起个名字
-d redis redis-server /etc/redis/redis.conf # deamon 运行容器 并使用配置文件启动容器内的 redis-server

查看活跃的容器

# 查看活跃的容器docker ps# 如果没有 myredis 说明启动失败 查看错误日志docker logs myredis# 查看 myredis 的 ip 挂载 端口映射等信息docker inspect myredis# 查看 myredis 的端口映射docker port myredis 

外部访问 redis 容器服务

# redis-cli 访问docker run -it --link myredis:redis --rm redis redis-cli -h redis -p 6379# -it 交互的虚拟终端# --rm 退出是删除此容器

或者使用 shell 登录容器内操作

docker exec -it myredis bashredis-cli

配置完成

主从配置

新建容器 redis-slave
查看 redis master 的内部 ip

docker inspect redis #Networks可以得到 redis master 的 ip 地址"NetworkSettings": {            "Ports": {                "6379/tcp": [                    {                        "HostIp": "0.0.0.0",                        "HostPort": "6379"                    }                ]            },            ...            "Gateway": "192.168.0.1",            ...            "IPAddress": "192.168.0.3",#ip            ...            "Networks": {                "bridge": {                    ...                    "Gateway": "192.168.0.1",                    "IPAddress": "192.168.0.3",#ip                    ...                }            }        }  修改 redis-slave 的配置文件# 主地址slaveof master-ip master-port# 主认证masterauth

重启 redis-slave

docker restart redis-slave

登录 redis master 使用 info 命令查看从的状态

如果配置不成功记得检查 redis master 的 bind 和 protected-mode 的设置,看下有没有监听内网地址,否则 redis-slave 没办法通过 redis master 的地址做数据同步

Redis 5.0之后版本的高可用集群搭建

Redis系统介绍:

Redis的基础介绍与安装使用步骤:https://www.jianshu.com/p/2a23257af57b
Redis的基础数据结构与使用:https://www.jianshu.com/p/c95c8450c5b6
Redis核心原理:https://www.jianshu.com/p/4e6b7809e10a
Redis 5 之后版本的高可用集群搭建:https://www.jianshu.com/p/8045b92fafb2
Redis 5 版本的高可用集群的水平扩展:https://www.jianshu.com/p/6355d0827aea
Redis 5 集群选举原理分析:https://www.jianshu.com/p/e6894713a6d5
Redis 5 通信协议解析以及手写一个Jedis客户端:https://www.jianshu.com/p/575544f68615


集群方案比较:
redis3.0版本的集群模式
哨兵模式:

在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

image
高可用集群模式:

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

image
开始搭建
一、安装redis

参考之前博客:Redis的基础介绍与安装使用步骤:https://www.jianshu.com/p/2a23257af57b

下载地址:http://redis.io/download
1、安装gcc
yum install gcc

2、把下载好的redis-5.0.2.tar.gz放在/usr/local文件夹下,并解压
wget http://download.redis.io/releases/redis-5.0.2.tar.gz

tar xzf redis-5.0.2.tar.gz

cd redis-5.0.2

3、进入到解压好的redis-5.0.2目录下,进行编译与安装
make & make install

4、启动并指定配置文件
src/redis-server redis.conf

(注意要使用后台启动,所以修改redis.conf里的daemonize改为yes)

5、验证启动是否成功
ps -ef | grep redis 

6、进入redis客户端
cd /usr/local/redis/redis-5.0.2/src
./redis-cli 

7、退出客户端
exit

8、退出redis服务:
pkill redis-server

kill 进程号

src/redis-cli shutdown


二、开始集群搭建

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从,搭建集群的步骤如下:

第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面创建6个文件夾如下:
mkdir -p /usr/local/redis-cluster

mkdir 8001 8002 8003 8004 8005 8006

第二步:把之前的redis.conf配置文件copy到8001下,修改如下内容:

1)daemonize yes

2)port 8001(分别对每个机器的端口号进行设置)

3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

4)cluster-enabled yes(启动集群模式)

5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

6)cluster-node-timeout 5000

  1. bind 127.0.0.1(去掉bind绑定访问ip信息)

  2. protected-mode no (关闭保护模式)

9)appendonly yes

如果要设置密码需要增加如下配置:

10)requirepass xxx (设置redis访问密码)

11)masterauth xxx (设置集群节点间访问密码,跟上面一致)

第三步:把修改后的配置文件,copy到8002-8006,修改第2、3、5项里的端口号,可以用批量替换:
%s/源字符串/目的字符串/g 

第四步:分别启动6个redis实例,然后检查是否启动成功
/usr/local/redis/redis-5.0.2/src/redis-server /usr/local/redis-cluster/800*/redis.conf

image
查看是否启动成功
ps -ef | grep redis 

image
第五步:用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
/usr/local/redis/redis-5.0.2/src/redis-cli -a xxx --cluster create --cluster-replicas 1 192.168.5.100:8001 192.168.5.100:8002 192.168.5.100:8003 192.168.5.100:8004 192.168.5.100:8005 192.168.5.100:8006

image image

代表为每个创建的主服务器节点创建一个从服务器节点

第七步:验证集群:

1)连接任意一个客户端即可:

./redis-cli -c -a xxx -h 192.168.5.100 -p 8001

提示:-a访问服务端密码,-c表示集群模式,指定ip地址和端口号

例如:

/usr/local/redis-5.0.2/src/redis-cli -a xxx -c -h 192.168.5.100 -p 8001

image

注意这里进入到8002了,redirected。

2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)

image image

3)进行数据操作验证

4)关闭集群则需要逐个进行关闭,使用命令:

/usr/local/redis/src/redis-cli -a xxx -c -h 192.168.0.60 -p 8001 shutdown

image image

作者:挂机的啊洋zzZ
链接:https://www.jianshu.com/p/8045b92fafb2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • Redis集群部署

    Redis集群部署 Redis集群有多种部署模式,包括主从模式、哨兵模式、集群模式 主从模式   主从模式可以是一...

  • redis集群

    本章要点 Redis主从 Redis哨兵 Redis集群 主从复制原理 1. Redis 主从 比较简单在redi...

  • Docker环境搭建redis集群(主从模式)

    Docker环境搭建redis集群(主从模式) 序 本文将介绍如何在docker中部署redis集群(主从模式)。...

  • Redis的高可用

    Redis主从复制 什么是主从复制 Redis有三种集群方案,主从复制,哨兵,cluster集群,主从复制是指将一...

  • redis的三种集群方式

    redis的三种集群方式 redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服...

  • 【5分钟背八股】redis集群方案有哪些?

    常见集群分类 主从复制集群 分片集群 redis有那些: 主从复制集群,手动切换 带有哨兵的HA的主从复制集群 客...

  • Redis04——五分钟明白Redis的哨兵模式

    和所有的数据库一样,Redis也支持集群化,Redis的集群分为分布式集群和主从集群。大部分公司采取的都是主从集群...

  • 17.redis集群

    Redis集群 本章是基于CentOS7下的Redis集群教程,包括: 单机安装Redis Redis主从 Red...

  • 11.Redis集群入门

    本主题,介绍了Redis的集群配置与编程入门,其实Redis的集群还包含主从集群模式,哨兵集群模式(Redis 5...

  • redis集群模式:redis单点、redis主从、redis哨

    目录 redis单点、redis主从、redis哨兵 sentinel,redis集群cluster配置搭建与使用...

网友评论

      本文标题:Redis主从集群

      本文链接:https://www.haomeiwen.com/subject/edsbphtx.html