首先说下几个基本概念
主从同步:就是有一个Redis是主库,其他一个或者多个实例被设置为从库,那么主库数据发生改变之后,会自动同步到从库去,主要应用在读写分离中,据不完全统计,读写比例大概是10:1,所以从库默认是只读的,当然你也可以开启可写。我们主库写,从库读,自然就提高了效率。
哨兵:哨兵从字面意思也能理解,他就是监管Redis服务的,比如我1个主库+2个从库,再整3个哨兵服务监管这3个Redis实例,当主库挂掉之后,哨兵们自动在从库中选一个主库出来,这个操作,配置文件也会自动改变。但是挂掉的主库再次启动后,不会加入他们,也不会恢复主库身份,需要手动加入到从库中。
集群:就是多个实例同时运行,数据同步,都可以读可以写,完全一样。有兴趣可以继续了解。
1、下载Windows版本的Redis安装包,因为Redis官网没有Win版本的安装包,微软官网就自己维护了一个Win版本的
https://github.com/microsoftarchive/redis/releases
解压到安装的目录下,大概长这样
其中,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
执行完成之后,我们去服务中看,发现多了三个服务,直接可以手动启起来。
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
就出现了这个情况
我们一样的把哨兵服务都启动起来。
11、到这里哨兵配置已经完成了
redis-cli -p 6000 //进入6000端口实例 cmd cd到根目录,执行命令进入实例 info replication //查看状态 你会发现有两个从库正在运行 exit //退出连接
当你把主库6000的服务停了,你再查看6001和6002的状态,你会发现,有一个被选为主库了。你再看配置文件,都发生了变化
留下您的脚步
最近评论