先安装好一个redis
我这里安装的是 redis:6.2.6
[root@localhost docker]# mkdir redisCluster
另外复制三份用于搭集群放在docker文件夹下
重新名为 redis-6370 redis-6371 redis-6372
Linux虚拟机下载redis.conf的配置文件(如果没有或者想重新配置)
wget http://download.redis.io/redis-stable/redis.conf
修改配置文件主节点
# 表示Redis可以接受任意ip的连接
bind 0.0.0.0
# 关闭保护模式
protected-mode no
#配置redis数据存储位置
dir /data
# 让redis服务后台运行
daemonize yes
#pid存放目录
pidfile /var/run/redis.pid
# 配置日志路径,为了便于排查问题,指定redis的日志文件目录
logfile "/var/log/redis/redis.log"
#设置redis密码
requirepass 123***
#主从同步master的密码
masterauth 123***
#修改redis监听端口(可以自定义)
port 6370
对于slave而言,配置文件修改以下几项:
# 表示Redis可以接受任意ip的连接
bind 0.0.0.0
#修改redis监听端口(可以自定义)
port 6371
# 关闭保护模式
protected-mode no
#pid存放目录
pidfile /var/run/redis_6370.pid
# 让redis服务后台运行
daemonize yes
# 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码)
requirepass 123***
# 设定主库的密码,用于认证,如果主库开启了requirepass选项这里就必须填相应的密码
masterauth 123***
# 设定master的IP和端口号,redis配置文件中的默认端口号是6379
# 低版本的redis这里会是slaveof,意思是一样的,因为slave是比较敏感的词汇,所以在redis后面的版本中不在使用slave的概念,取而代之的是replica
# 将35.236.172.131做为主,其余两台机器做从。ip和端口号按照机器和配置做相应修改。
replicaof 虚拟机ip 6370
# 配置日志路径,为了便于排查问题,指定redis的日志文件目录
logfile "/var/log/redis/redis.log"
另外一个从节点只需要复制上文改端口号为 6372
启动redis
主节点6370
[root@localhost redis-6370]# vim startRedis6370.sh
docker run -it --name redis-0 -v /usr/local/docker/redisCluster/redis-6370/config/redis.conf:/etc/redis/redis.conf -p 6370:6370 -d redis:6.2.6 /bin/bash
从节点6371
[root@localhost redis-6371]# vim startRedis6371.sh
docker run -it --name redis-1 -v /usr/local/docker/redisCluster/redis-6371/config/redis.conf:/etc/redis/redis.conf -p 6371:6371 -d redis:6.2.6 /bin/bash
从节点6372
[root@localhost redis-6372]# vim startRedis6372.sh
docker run -it --name redis-2 -v /usr/local/docker/redisCluster/redis-6372/config/redis.conf:/etc/redis/redis.conf -p 6372:6372 -d redis:6.2.6 /bin/bash
然后按先主后从的顺序启动节点 6370 –>6371–>6372
docker ps 查看启动状态
查看集群状态
# 以交互模式进入容器redis-0中
$ docker exec -it redis-0 bash
root@5e0a1e884067:/data# mkdir /var/log/redis
root@5e0a1e884067:/data# touch /var/log/redis/redis.log
root@5e0a1e884067:/data# redis-server /etc/redis/redis.conf
root@5e0a1e884067:/data# redis-cli -h 192.***.***.128 -p 6370
192.***.***.128:6370> auth 123***
OK
查看集群信息
192.***.***.128:6370>info replication
# 如果是主,这里的role的值会是master,如果是从,这里的role的值会是slave
role:slave
# 对于slave,还要查看master_link_status这个属性值。slave上这个属性值为up就说明主从复制是OK的,否者就有问题。如果从机状态不为up,首先排查主机的端口是否被限,然后查看redis日志排查原因
master_link_status:up
主从搭建成功后,可以通过在master上写入一个key-value值,查看是否会同步到slave上,来验证主从同步是否能成功。
打开主节点
# 以交互模式进入容器redis-0中
$ docker exec -it redis-0 bash
创建日志目录和文件
root@5e0a1e884067:/data# mkdir /var/log/redis
root@5e0a1e884067:/data# touch /var/log/redis/redis.log
root@5e0a1e884067:/data# redis-server /etc/redis/redis.conf
root@5e0a1e884067:/data# redis-cli -h 192.***.***.128 -p 6370
#redis-cli -h 192.***.***.128 -p 6370 -a 123*** 此方式不用输密码
192.168.227.128:6370> auth 123456
OK
给主节点添加数据
192.***.***.128:6370> set test_key hello-world
OK
查看数据
192.***.***.128:6370> get test_key
"hello-world"
在从节点中查看数据
# 以交互模式进入容器redis-1中
$ docker exec -it redis-1 bash
创建日志目录和文件
root@5e0a1e884067:/data# mkdir /var/log/redis
root@5e0a1e884067:/data# touch /var/log/redis/redis.log
在容器中启动redis服务
root@5e0a1e884067:/data# redis-server /etc/redis/redis.conf
root@5e0a1e884067:/data# redis-cli -h 192.***.***.128 -p 6371
#redis-cli -h 192.***.***.128 -p 6371 -a 123*** 这行命令打开不需要输入密码
192.***.***.128:6371> auth 123***
OK
查看数据
0.0.0.0:6371> get test_key
"hello-world"
主从复制搭建成功
搭建成功后
下载哨兵配置文件
wget http://download.redis.io/redis-stable/sentinel.conf
修改哨兵配置文件
port 26379 #修改Sentinel监听端口
# 让sentinel服务后台运行
daemonize yes
# 修改日志文件的路径
logfile "/var/log/redis/sentinel.log"
# 修改监控的主redis服务器
# 最后一个2表示,两台机器判定主被动下线后,就进行failover(故障转移)
sentinel monitor mymaster 192.***.***.128 6370 2
#配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒
sentinel down-after-milliseconds mymaster 10000
#若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000
#在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2
#设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster 123***
其余两个哨兵配置只需要改哨兵端口号 为26380 26381
启动哨兵sentinel-0
[root@localhost redis-6370]# vim startRedisSentinel6370.sh
配置文件内容
docker run -it --name sentinel-0 -v /usr/local/docker/redisCluster/redis-6370/config/sentinel.conf:/etc/redis/sentinel.conf -p 26379:26379 -d redis:6.2.6 /bin/bash
启动哨兵sentinel-1
[root@localhost redis-6371]# vim startRedisSentinel6371.sh
配置文件内容
docker run -it --name sentinel-1 -v /usr/local/docker/redisCluster/redis-6371/config/sentinel.conf:/etc/redis/sentinel.conf -p 26380:26380 -d redis:6.2.6 /bin/bash
启动哨兵sentinel-2
[root@localhost redis-6372]# vim startRedisSentinel6372.sh
配置文件内容
docker run -it --name sentinel-2 -v /usr/local/docker/redisCluster/redis-6372/config/sentinel.conf:/etc/redis/sentinel.conf -p 26381:26381 -d redis:6.2.6 /bin/bash
运行哨兵
打开主节点
# 以交互模式进入容器redis-1中
$ docker exec -it sentinel-0 bash
创建日志目录和文件
$ mkdir /var/log/redis
$ touch /var/log/redis/sentinel.log
启动哨兵
redis-sentinel /etc/redis/sentinel.conf
查看日志,哨兵成功监听到一主和两从的机器
18:X 11 Jul 2019 13:25:55.416 # +monitor master mymaster 192.***.***.128 6370 quorum 2
18:X 11 Jul 2019 13:25:55.418 * +slave slave 192.***.***.128 6372 @ mymaster 192.168.227.128 6370
18:X 11 Jul 2019 13:25:55.421 * +slave slave 192.***.***.128 6371 @ mymaster 192.168.227.128 6370