大家好,我是星仔。本博客收录于华星详谈-学习中心。本学习中心收集了Java整个技术体系的所有技术要点。每篇博客后面或者知识点结尾都附带有面试题,提供给大家巩固本章内容。
为各位同胞们能够系统性的掌握整个Java技术体系而建立的学习中心。星仔正在努力的更新学习中心中的内容。望诸君共勉!!!
生产环境使用三台服务器搭建redis哨兵集群,3个redis实例(1主2从)+ 3个哨兵实例。生产环境能够保证在哨兵存活两台的情况下,只有一台redis也能够继续提供服务(一主两从三哨兵)。
主服务器 |
从服务器1 |
从服务器2 |
10.200.14.201 |
10.200.14.202 |
10.200.14.203 |
执行如下命令,获取Redis源码。如果服务器在内网无法访问的话则用一台能够访问的服务器先把redis-4.0.9.tar.gz包下载下来,在用xftp上传上去。
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
分别在三台服务器上安装并启动Redis单机版,先确保单机版的Redis是部署成功的。
由于篇幅有限,具体的安装步骤又前面的博客中有写。故Redis单机版安装步骤请移步《05_Linux RAM架构-安装Redis 单机版-银河麒麟V10操作系统》https://blog.csdn.net/a767815662/article/details/122138388
在上面的步骤中,我们确保了三台服务器各自的Redis单机版是部署成功的之后,接下来就要把上述三台Redis单机模式改为集群模式。
a、进入到redis文件夹
cd /usr/local/redis-4.0.9/
b、修改redis.conf配置
vim redis.conf
redis.conf文件修改如下配置
# 修改redis配置文件:/usr/local/redis-4.0.9/redis.conf
# 1. 修改绑定ip为服务器内网ip地址,做绑定,三台各自填写各自的ip地址
bind 10.200.14.201
# 2. 保护模式修改为否,允许远程连接
protected-mode no
# 4. 设定密码
requirepass "Geostar@2022"
# 5. 设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "Geostar@2022"
# 6. 打开AOF持久化支持
appendonly yes
c、启动主服务器redis节点
cd src
./redis-server ../redis.conf
d、验证是否启动成功
[root@app--0002 ~]# ps -ef|grep redis
root 621729 1 0 19:10 ? 00:00:04 ./redis-server 10.200.14.201:6379
root 631933 631886 0 21:09 pts/2 00:00:00 grep redis
说明主服务器的Redis节点启动成功。
a、进入到redis文件夹
cd /usr/local/redis-4.0.9/
b、修改redis.conf配置
从库基本配置和主库相同,bind ip地址各自对应各自的。唯一区别是从库需要添加主库同步配置(步骤7)。
vim redis.conf
redis.conf文件修改如下配置
# 修改redis配置文件:/usr/local/redis-4.0.9/redis.conf
# 1. 修改绑定ip为服务器内网ip地址,做绑定,三台各自填写各自的ip地址
bind 10.200.14.202
# 2. 保护模式修改为否,允许远程连接
protected-mode no
# 4. 设定密码
requirepass "Geostar@2022"
# 5. 设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "Geostar@2022"
# 6. 打开AOF持久化支持
appendonly yes
# 7. 指定master主库
slaveof 10.200.14.201 6379
c、启动从服务器redis节点
cd src
./redis-server ../redis.conf
d、验证是否启动成功
[root@app--0002 ~]# ps -ef|grep redis
root 621729 1 0 19:10 ? 00:00:04 ./redis-server 10.200.14.201:6379
root 631933 631886 0 21:09 pts/2 00:00:00 grep redis
说明从服务器的Redis节点启动成功,另一个按照这四个步骤部署就好。
查看redis主从情况命令:redis -cli -h {IP} -p 6379 -a {password} info replication
redis-cli -h 10.200.14.201 -p 6379 -a Geostar@2022 info replication
如下图是部署成功之后主从配置信息。
哨兵配置三台服务器中的配置基本相同,唯一不同的是 bind 绑定的ip不同。
a、进入到redis文件夹
cd /usr/local/redis-4.0.9/
b、修改sentinel.conf配置
vim sentinel.conf
sentinel.conf文件修改如下配置
# 修改redis-sentinel配置文件
# 1. 绑定的地址 支持内网/本地访问,比如 bind 10.100.14.201 127.0.0.1
bind 10.100.14.201 127.0.0.1
# 2. 保护模式修改为否,允许远程连接
protected-mode no
# 3. 设定sentinel myid 每个都不一样,安装的时候默认就有生成
sentinel myid 04d9d3fef5508f60498ac014388571e719188527
# 4. 设定监控地址,为对应的主redis库的内网地址
sentinel monitor mymaster 10.100.14.201 6379 1
# 5. 设定5秒内没有响应,说明服务器挂了,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
sentinel down-after-milliseconds mymaster 5000
# 6. 设定15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000
# 7. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1
# 8. 主数据库密码,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
sentinel auth-pass mymaster 123456789
# 9. 配置后台启动,默认的是前台启动方式
daemonize yes
c、依次启动三台服务器中的redis哨兵节点
cd src
./redis-sentinel ../sentinel.conf
d、验证单台服务器的哨兵端口是否启动成功
26379 为哨兵的默认端口,以下日志则说明单台服务器的哨兵端口启动成功
[root@app--0002 redis-4.0.9]# ps -ef|grep redis
root 621729 1 0 19:10 ? 00:00:10 ./redis-server 10.200.14.201:6379
root 624253 1 0 19:39 ? 00:00:13 ./redis-sentinel 10.200.14.201:26379 [sentinel]
root 645013 643737 0 23:45 pts/0 00:00:00 grep redis
查看redis哨兵情况命令:redis-cli -h {IP} -p 26379 -a {password} info sentinel
redis-cli -h {IP} -p 26379 -a {password} info sentinel
如下图是部署成功之后的哨兵配置信息。
至此,Redis的集群(一主两从三哨兵)模式配置成功。
注意事项:
1、Redis集群启动时遵循先启动主节点,然后启动从节点,最后启动哨兵端口的规则:按照Master->Slave->Sentinel的顺序进行启动
# 主服务器
redis-cli -h 10.200.14.201 -p 6379 -a Geostar@2022
# 从服务器1
redis-cli -h 10.200.14.202 -p 6379 -a Geostar@2022
# 从服务器2
redis-cli -h 10.200.14.203 -p 6379 -a Geostar@2022
主库set数据
set huaxing huaxingxiangtan
从库读取数据
keys *
get huaxing
插入的时候出现以下错误提示,则说明从库只读。
10.200.14.202:6379> set huaxing1 huaxing1
(error) READONLY You can't write against a read only slave.