redis供应了一个master,多个slave的做事。

准备三个redis做事,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不滋扰原来的redis做事,我们master利用6000端口。

配置文件(redis.conf)

phpredis读写分离类Redis设置装备摆设读写分别 RESTful API

master配置修正端口:

port 6000

requirepass 123456

slave1修正配置:

1

2

3

4

5

6

7

port 6001

slaveof 127.0.0.1 6000

masterauth 123456

requirepass 123456

slave2修正配置:

1

2

3

4

5

6

7

port 6002

slaveof 127.0.0.1 6000

masterauth 123456

requirepass 123456

requirepass是认证密码,该当之后要作主从切换,以是建议所有的密码都同等, masterauth是从机对主机验证时,所需的密码。
(即主机的requirepass)

启动主机

1

redis-server redis.conf

启动从机:

redis-server redis1.conf

redis-server redis2.conf

输入:

ps -ef |grep redis

root 6617 1 0 18:34 ? 00:00:01 redis-server :6000

root 6647 1 0 18:43 ? 00:00:00 redis-server :6001

root 6653 1 0 18:43 ? 00:00:00 redis-server :6002

root 6658 6570 0 18:43 pts/0 00:00:00 grep redis

可以看到主从机的redis已经相应启动。

我们来验证下 主从复制。

master:

1

2

3

4

5

[root@localhost master]# redis-cli -p 6000

127.0.0.1:6000> auth 123456

OK

127.0.0.1:6000> set test chenqm

OK

slave1:

1

2

3

4

5

[root@localhost slave2]# redis-cli -p 6001

127.0.0.1:6001> auth 123456

OK

127.0.0.1:6001> get test

\"大众chenqm\公众

slave2:

1

2

3

4

5

[root@localhost slave2]# redis-cli -p 6002

127.0.0.1:6002> auth 123456

OK

127.0.0.1:6002> get test

\"大众chenqm\公众

可以看到主机实行写命令,从性能同步主机的值,主从复制,读写分离就实现了。

但是万一主机挂了怎么办,这是个麻烦事情,以是redis供应了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper.

我们配置两个sentinel进程:

vi sentinel.conf

1

2

3

4

5

6

port 26379

sentinel monitor mymaster 127.0.0.1 6000 2

<br data-filtered=\"大众filtered\"大众>sentinel auth-pass mymaster 123456

1

vi sentinel.conf

1

2

3

4

5

port 26479

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

启动sentinel做事(到对应的目录实行相应的命令):

1

redis-server sentinel.conf --sentinel

查看日志:

[7014] 11 Jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2

[7014] 11 Jan 19:42:30.923 +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000[7014] 11 Jan 19:42:30.925 +slave slave 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000

从对应的日志不雅观察到,一个master做事,两个slave做事

我们现在来kill master进程

1

2

3

4

5

6

7

8

[root@localhost slave1]# ps -ef|grep redis

root 6960 1 0 19:29 ? 00:00:02 redis-server :6000

root 6968 1 0 19:30 ? 00:00:01 redis-server :6001

root 6975 1 0 19:30 ? 00:00:01 redis-server :6002

root 7014 6570 0 19:42 pts/0 00:00:01 redis-server :26479

root 7017 6789 0 19:42 pts/5 00:00:01 redis-server :26379

root 7021 6729 0 19:46 pts/3 00:00:00 grep redis

[root@localhost slave1]# kill -9 6960

 我们不雅观察日志:

1

2

[7014] 11 Jan 19:43:41.463 # +sdown master mymaster 127.0.0.1 6000

[7014] 11 Jan 19:46:42.379 # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001

master切换了,当6000端口的这个做事重启的时候,他会变成6001端口做事的slave。

由于sentinel在切换master的时候,把对应的sentinel.conf和redis.conf文件的配置修正。

期间我们还须要关注的一个问题:sentinel做事本身也不是万能的,也会宕机,以是我们还得支配sentinel集群,象我这样多启动几个sentinel。

关注这个配置:

1

sentinel monitor mymaster 127.0.0.1 6000 2<br data-filtered=\公众filtered\"大众><br data-filtered=\"大众filtered\"大众><br data-filtered=\公众filtered\"大众>这个后面的数字2,是指当有两个及以上的sentinel做事检测到master宕机,才会去实行主从切换的功能。