这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
一、Redis下载及安装
)
1、下载地址
distfiles.macports.org/redis/redis…
)
2、解压Redis安装包
1 | csharp复制代码#解压redis |
3、Redis编译安装
1 | csharp复制代码#进入解压包 |
三、集群搭建配置
1、总体构造
Redis高可用集群,一般选三台服务器:这样,我们在一台主节点挂了之后,另外两台可以选举其中一台担任主节点master的角色。
①slave节点配置从master节点同步数据
②哨兵sentinel故障转移机制:每个redis节点搭建一个监控哨兵,当redis的master节点挂掉之后:三个哨兵选举一个slave节点 成为master节点
1 | yaml复制代码#部署在同一台服务器上,使用3个端口对外提供服务 |
2、伪集群
由于现场没有三台服务器,我们就在一台服务器上,使用3个端口,来给他搭一个”伪集群”:
何为”伪集群”呢?
“伪集群” 架构与真正集群完全一样,故障转移、高可用都可以。
只是搭建在一台服务器上,使用3个端口对外提供服务。
生产环境下,集群环境还是需要使用3台不同的服务器,从而保证高可用。这里只是节约资源、方便搭建。
3、主节点redis服务6379配置
完整配置及步骤如下:
1 | bash复制代码1、创建主节点工作目录 redis-6379 |
1 | bash复制代码3、主节点 6379 端口配置 |
4、redis从节点服务 7001/7002配置
注意,从节点与主节点配置的区别主要在两个地方
①配置主节点:replicaof 192.168.154.145 6379
②配置主节点的登录密码masterauth 123456
完整配置及步骤如下:
1 | bash复制代码1、创建从节点工作目录 redis-7001 和 redis-7002 |
1 | bash复制代码2、将配置文件拷贝到工作目录下 |
1 | bash复制代码3、从节点 7001 / 7002 端口配置 |
1 | bash复制代码4、7001 从节点配置,左侧为修改的行数,方便大家查找 |
1 | bash复制代码5、7002 从节点配置,左侧为修改的行数,方便大家查找 |
四、故障转移/高可用配置(哨兵模式sentinel)
1、总体架构
1 | yaml复制代码主节点哨兵: |
2、主节点master配置哨兵sentinel
为了方便管理,我们把哨兵工作目录分别建在对应的redis工作目录下
注意:
①配置master的地址及命名(mymaster为集群名称):sentinel monitor mymaster 192.168.154.145 6379 2
②配置连接redis主节点的密码 sentinel auth-pass mymaster 123456
③日志目录一定要创建,因为出问题,方便查找原因。 logfile “/usr/local/redis-6379/sentinel/redis-sentinel.log”
1 | bash复制代码1、创建主节点 sentinel工作目录 |
1 | bash复制代码2、将配置文件拷贝到sentinel工作目录下 |
1 | bash复制代码3、修改配置文件 左侧为修改的行数,方便大家查找 |
3、从节点slave配置哨兵sentinel
①从节点的配置,除了工作目录不同及端口,其余与主节点完全一致
1 | bash复制代码1、创建从节点 sentinel工作目录 |
1 | bash复制代码2、将配置文件拷贝到sentinel工作目录下 |
1 | bash复制代码3、分别修改slave节点 哨兵配置文件 |
1 | python复制代码4、27001节点哨兵的配置 左侧为修改的行数,方便大家查找 |
1 | python复制代码5、27002哨兵节点的配置 左侧为修改的行数,方便大家查找 |
到此全部配置完成。
五、启动集群
1、启动所有redis服务节点
1 | csharp复制代码#分别启动三个节点的redis服务 |
2、启动所有哨兵sentinel服务
1 | csharp复制代码#启动时,根据配置文件启动 |
3、查看服务进程
1 | yaml复制代码#如下图:三个redis服务+三个哨兵监控 全部启动成功 |
六、测试:数据同步+读写分离+故障转移
1、数据同步测试
测试目标:master主节点 写入/修改/删除数据,slave从节点会自动同步master的数据操作记录。
① redis-cli链接master主节点,写入age和name 两个数据
1 | ruby复制代码#链接redis,设置两个值,如下 |
② 登录slave从节点查看
1 | ruby复制代码#登录slave从节点 |
2、master/slave节点查看
① 链接哨兵:查看master节点和slave节点的分配情况
② 链接命令:redis-cli -a 123456 -p 26379 ,同样使用redis-cli,只是链接到sentinel的端口即可
查看master主节点地址:6379端口服务
1 | ruby复制代码#链接哨兵sentinel 同样使用redis-cli |
③ 查看slave节点地址:两个slave节点分别是7001和7002服务,可以看到两个slave节点指向的master节点为6379
1 | ruby复制代码#命令如下: |
3、故障转移(高可用)测试
测试目的:master主节点挂掉之后,我们的sentinel集群可以通过选举机制,重新在slave节点中选举一个作为新的master节点。
① 关闭主节点6379
1 | csharp复制代码#链接主节点,shutdown关闭主节点 |
② 查看此时的master节点
链接到哨兵,查看主节点:此时,经过三个哨兵的选举,主节点变为 7002
1 | ruby复制代码#链接到哨兵,查看主节点:主节点变为 7002 |
③此时,再查看slave节点的情况
发现slave节点变为:6379和7001两个,而且6379的状态为 “s_down,slave,disconnected”,因为我们关闭了6379
1 | ruby复制代码[root@mail ~]# redis-cli -a 123456 -p 26379 |
④ 所以,故障转移就成功了。
4、读写分离测试
① redis集群开启之后,slave从节点的权限 默认是只读的;当然我们也可以开启slave节点的写入权限。
所以,写数据:链接master主节点;读数据:链接slave从节点。
如下图:slave从节点,没有写入权限
1 | ruby复制代码#登录slave从节点 |
本文转载自: 掘金