Docker可以很方便的进行服务部署和管理,下面我们通过docker来搭建Redis的单机模式、Redis主从复制、Redis哨兵模式、Redis-Cluster模式
首先需要先在服务器上安装docker Docker安装教程 、Docker命令快速入门;
docker pull redis
docker run -d -v $PWD/data:/data --name redis -p 6379:6379 redis redis-server --requirepass "123456" --appendonly yes
启动命令说明:
$PWD/data:/data
: 映射redis的data目录到当前目录下的data目录--requirepass
: 是设置redis的密码--appendonly yes
: 启用持久化存储例如:
docker run -d -v /home/app/redis/data:/data --name redis -p 6379:6379 redis redis-server --requirepass "123456" --appendonly yes
如果需要使用配置文件,则需要做个文件映射;注意所在目录下必须要有redis.conf这个文件,否则将启动失败。
docker run -d -v /home/app/redis/data:/data -v /home/app/redis/conf:/usr/local/etc/redis --name redis -p 6379:6379 redis redis-server /usr/local/etc/redis/redis.conf
redis的这个配置文件可以到官方的这个地址上去获取 http://download.redis.io/redis-stable
# 查看防火墙状态
systemctl status firewalld
# 禁用防火墙
systemctl disable firewalld
# 开启防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 查看已开启的端口
firewall-cmd --zone=public --list-ports
# 添加端口
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload
Redis主从复制模式就是采用读写分离的模式,因为通常读取数据的时候比较多,写入数据的时候少以此来提高性能;但是一旦主节点挂了,整个集群就只能提供读取的服务了,因此缺乏高可用性。
搭建步骤和上面单机版的一样,只是后面需要做相关的集群配置
分别在3台服务器上启动redis容器,端口号为6379
mkdir -p /home/app/redis-rw/data
docker run -d -v /home/app/redis-rw/data:/data --name redis-rw -p 6379:6379 redis redis-server --requirepass "123456" --appendonly yes --masterauth "123456"
需要让容器间可以相互访问,好像需要在防火墙上开启对应的端口号;但是不建议这样搞,只是实验可以试哈,实际使用不要这样弄(因为这样的集群没有意义)。
在一台机器上做的话,就像需要使用docker给容器分配的IP;通过如下命令查看容器的IP:
docker inspect 容器ID
里面的IPAddress就是容器的IP;我这里的是如下所示的
redis-c1 172.17.0.2
redis-c1 172.17.0.3
redis-c1 172.17.0.4
通过docker交互命令登陆redis;为了方便这里直接用容器名称(可以使用容器ID)
docker exec -it redis-rw redis-cli
如果redis设置了认证密码,则登陆进去了使用
auth 密码
进行认证;然后使用info replication
命令查看redis的信息,可以看到都是master节点
现在我们将其中一台服务器作为master节点;因此我们分别登陆到其它的redis容器中执行如下命令(下面的命令就相当于在配置文件中添加相关配置):
# 这里是设置跟随哪台机器
SLAVEOF 192.168.56.102 6379
设置主节点访问密码;由于我们在启动参数上已经设置了--masterauth
参数,因此这里就不用再设置
# 由于我们设置了访问密码,因此需要设置主节点的访问密码;否则从节点将无法访问主节点信息
config set masterauth 123456
# 如果是使用配置文件来启动,再加上下面的这条命令将其重新写入配置文件中
config rewrite
# 如果修改或设置密码可以使用这个命令
config set requirepass 密码
如果设置redis密码,就是必须设置masterauth的值;否则将出现这个错误:
Master does not understand REPLCONF listening-port: -NOAUTH Authentication required.
文章参考:https://blog.csdn.net/miss1181248983/article/details/90056960
主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生。
Sentinel即哨兵,它主要是用来监控redis主从节点的运行状态,用于解决在master节点挂了后选举出新的主节点,保证整个集群可以继续提供写数据的能力。
Sentinel模式具有以下特点:
Sentinel模式的工作机制:
down-after-milliseconds
选项所指定的值, 则这个实例会被sentinel标记为主观下线;当使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。
现在准备一个主从模式的集群,然后开始搭建Sentinel服务;为了保证高可用我们将Sentinel也是使用集群模式搭建,使用3台服务器来搭建集群,在每台机器上都部署一台。
mkdir -p /home/app/redis/conf
cd /home/app/redis/conf
wget http://download.redis.io/redis-stable/sentinel.conf
修改sentinel.conf
配置文件
# 配置主节点的信息
sentinel monitor mymaster 192.168.56.105 6379 2
# sentinel的访问地址
requirepass 123456
# 配置主节点的访问密码
sentinel auth-pass mymaster 123456
docker run -d -v /home/app/redis-sentinel/data:/data -v /home/app/redis/conf:/usr/local/etc/redis --name redis-sentinel -p 26379:26379 redis redis-sentinel /usr/local/etc/redis/sentinel.conf --appendonly yes
启动成功后就可以直接通过Sentinel的端口进行链接了,Sentinel会返回当前主节点信息
我们使用Sentinel模式搭建的redis集群虽然解决了高可用的问题,但是最终也只有一个主节点;
当业务量大的时候会产生如下问题:
由此单个主从复制就无法满足需求了,因此Redis Cluster模式登场了;
Redis Cluster是分布式架构:即Redis Cluster中有多个节点(主从复制节点),每个节点都负责进行数据读写操作;每个节点之间会进行通信。简单来说就是多个主从复制节点集群提供服务。
我们在每台机器上执行如下命令来创建6个redis服务
docker run -d -v /home/app/redis-cluster/data:/data --name redis-cluster -p 6379:6379 -p 16379:16379 redis redis-server --requirepass "123456" --appendonly yes --masterauth "123456" --cluster-enabled yes
后面这个16379端口使用redis集群间进行数据通讯的端口,它是在你设置的redis访问端口上+10000;
如果向使用配置文件实现可以修改redis.conf配置中集群相关配置即可,获取redis.conf配置:
wget http://download.redis.io/redis-stable/sentinel.conf
在上面的命令需要加上配置文件路径映射,下面是示例命令
docker run -d -v /home/app/redis-cluster/data:/data -v /home/app/redis/conf:/usr/local/etc/redis --name redis-c1 -p 6381:6379 -p 16379:16379 redis redis-server /usr/local/etc/redis/redis.conf
下面开始集群的配置,直接使用redis-cli创建集群即可;
docker exec -it redis-cluster /bin/bash
redis-cli --cluster create 192.168.56.101:6379 192.168.56.102:6379 192.168.56.103:6379 192.168.56.104:6379 192.168.56.105:6379 192.168.56.106:6379 --cluster-replicas 1 -a 123456
参数最后加
-a
是因为我们设置了密码,因此需要加上访问密码;之后输入yes即可。
注意如果在一台机器上搞的docker需要使用host模式的网络连接类型才行,在创建的时候需要使用docker容器的IP;我们通过docker inspect 容器ID
命令获取容器的IP。
关注微信订阅号‘起岸星辰’获取最新资讯
原文:https://www.cnblogs.com/vchar/p/14347260.html