技术 思绪 摘录 旅行
Redis单机版本安装已经在之前文章说过了,但是业务量一旦大起来之后,你不得不考虑高可用性,Redis提供了主从同步、哨兵、集群,这篇文章暂不介绍集群。

首先说下几个基本概念

主从同步:就是有一个Redis是主库,其他一个或者多个实例被设置为从库,那么主库数据发生改变之后,会自动同步到从库去,主要应用在读写分离中,据不完全统计,读写比例大概是10:1,所以从库默认是只读的,当然你也可以开启可写。我们主库写,从库读,自然就提高了效率。

哨兵:哨兵从字面意思也能理解,他就是监管Redis服务的,比如我1个主库+2个从库,再整3个哨兵服务监管这3个Redis实例,当主库挂掉之后,哨兵们自动在从库中选一个主库出来,这个操作,配置文件也会自动改变。但是挂掉的主库再次启动后,不会加入他们,也不会恢复主库身份,需要手动加入到从库中。

集群:就是多个实例同时运行,数据同步,都可以读可以写,完全一样。有兴趣可以继续了解。

1、下载Windows版本的Redis安装包,因为Redis官网没有Win版本的安装包,微软官网就自己维护了一个Win版本的

https://github.com/microsoftarchive/redis/releases

解压到安装的目录下,大概长这样

image.png

其中,redis.windows.conf这个文件是他的配置文件,我们待会配置的就是这个文件里面的内容

简单介绍下配置项,#号为注释,没有的#号的行是生效的。

port 6379      //当前实例的端口号
bind 0.0.0.0   //绑定当前实例的可访问ip  0.0.0.0表示不限制IP
databases 16    //数据库个数 默认16个 0-15号库
slaveof <masterip> <masterport>    //从库配置,隶属于哪个主库实例  slaveof 127.0.0.1 6000
masterauth <master-password>        //从库配置 主库的密码 因为同步的时候需要订阅主库的数据 masterauth 123456
slave-read-only yes            //从库配置 从库是否只读 默认是的
requirepass foobared      //当前实例的密码 requirepass 123456

2、目标是搭建1主2从3个哨兵,首先模拟三台电脑,我把安装包文件夹复制三份,分别命名文件夹为6000、6001、6002

6000:主库

6001:从库

6002:从库

待会儿要启动三个实例,模拟三台电脑上的三个实例。

3、修改6000文件夹的配置,我没有设置密码

port 6000    //当前实例的端口号
bind 0.0.0.0   //绑定当前实例的可访问ip  0.0.0.0表示不限制IP

4、修改6001文件夹的配置,我也不给当前实例设置密码

port 6001    //当前实例的端口号
bind 0.0.0.0   //绑定当前实例的可访问ip  0.0.0.0表示不限制IP
slaveof 127.0.0.1 6000    //从库配置,隶属于哪个主库实例  slaveof 127.0.0.1 6000

5、修改6002文件夹的配置,同上

port 6002    //当前实例的端口号
bind 0.0.0.0   //绑定当前实例的可访问ip  0.0.0.0表示不限制IP
slaveof 127.0.0.1 6000    //从库配置,隶属于哪个主库实例  slaveof 127.0.0.1 6000

6、可以启动了,cd到三个目录,执行以下将实例以服务形式运行

redis-server --service-install redis.windows.conf --loglevel verbose  --service-name redis6000
redis-server --service-install redis.windows.conf --loglevel verbose  --service-name redis6001
redis-server --service-install redis.windows.conf --loglevel verbose  --service-name redis6002

执行完成之后,我们去服务中看,发现多了三个服务,直接可以手动启起来。

image.png

7、这时候你可以用工具连接到三个实例,给6000端口的实例,手动添加一个数据,你会发现,6001和6002也会同步过去,但是当6000的实例挂了之后,整个写库就凉了,因为没有哨兵服务来监听。

8、在6000文件夹下增加一个配置文件sentinel.conf,写以下配置内容

port 60000 //哨兵端口 6万
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6000 2 //监控主库地址
sentinel down-after-milliseconds mymaster 5000 //5秒连不上主库 判定为挂了
sentinel failover-timeout mymaster 15000 
sentinel auth-pass mymaster '' //主库密码

9、给从库也分别增加哨兵配置,分别修改配置项如下

port 60001 //哨兵端口
sentinel monitor mymaster 127.0.0.1 6001 2 //监控地址
port 60002 //哨兵端口
sentinel monitor mymaster 127.0.0.1 6002 2 //监控地址

10、将三个哨兵配置以服务形式运行

redis-server --service-install sentinel.conf --sentinel  --loglevel verbose  --service-name redissentinel60000
redis-server --service-install sentinel.conf --sentinel  --loglevel verbose  --service-name redissentinel60001
redis-server --service-install sentinel.conf --sentinel  --loglevel verbose  --service-name redissentinel60002

就出现了这个情况

image.png

我们一样的把哨兵服务都启动起来。

11、到这里哨兵配置已经完成了

redis-cli -p 6000  //进入6000端口实例 cmd cd到根目录,执行命令进入实例
info replication    //查看状态 你会发现有两个从库正在运行
exit //退出连接

image.png

当你把主库6000的服务停了,你再查看6001和6002的状态,你会发现,有一个被选为主库了。你再看配置文件,都发生了变化

CarsonIT 微信扫码关注公众号 策略、创意、技术

留下您的脚步

 

最近评论

查看更多>>

热点推荐

友情打赏

请打开您的微信,扫一扫