1、单个redis服务搭建请参考:redis服务搭建
2、在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379、6380、6381三个目录,每个目录下,创建 data、temp 目录
# cd /usr/local # mkdir redis-cluster
--其他文件创建类似,此处不一一写出
3、复制安装后的redis的配置文件(我的在/etc/目录下)的redis.conf 和 sentinel.conf文件到 6379、6380、6381目录中.
# cp /etc/redis.conf /usr/local/redis-cluster/6379 # cp /etc/redis-sentinel.conf /usr/local/redis-cluster/6379
--6380和6379类似,此处不一一写出
4、主从配置,修改 redis.conf文件
主redis 6379目录:
protected-mode yes port 6379 daemonize yes pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis_6379.log
dir /usr/local/redis-cluster/6379/data
slave-read-only yes
requirepass foo(设置访问登录密码)
从slave1 6380:
protected-mode yes port 6380 daemonize yes pidfile /var/run/redis_6380.pid logfile /var/log/redis/redis_6380.log dir /usr/local/redis-cluster/6380/data slaveof 127.0.0.1 6379
#若主服务设置了密码需要加上
masterauth foo #从服务密码设置
requirepass foo
从slave2 6381:
protected-mode yes port 6381 daemonize yes pidfile /var/run/redis_6381.pid logfile /var/log/redis/redis_6381.log dir /usr/local/redis-cluster/6381/data slaveof 127.0.0.1 6379 #若主服务设置了密码需要加上 masterauth foo #从服务密码设置 requirepass foo
master既可以读,也可以写,而 从服务器是只可以读,不可写的.
5、哨兵配置.
主redis 6379 sentinel.conf
protected-mode yes port 26379 dir "/usr/local/redis-cluster/6379/temp" sentinel monitor redis1 127.0.0.1 6379 2 sentinel down-after-milliseconds redis1 10000 sentinel failover-timeout redis1 60000
其中redis1可自定义
从slave1 6380 centinel.conf
protected-mode yes port 26380 dir "/usr/local/redis-cluster/6380/temp" sentinel monitor redis1 127.0.0.1 6379 2 sentinel down-after-milliseconds redis1 10000 sentinel failover-timeout redis1 60000
从slave2 7003 sentinel.conf
protected-mode yes port 26381 dir "/home/redis/redis-cluster/6381/temp" sentinel monitor redis1 127.0.0.1 6381 2 sentinel down-after-milliseconds redis1 10000 sentinel failover-timeout redis1 60000
哨兵配置完成.
6、启动
启动redis
分别到6379、6380、6381的目录下执行启动命令:
redis-server ./redis.conf
启动哨兵
redis-server ./sentinel.conf
7、查看主从信息:
127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=420,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=420,lag=1 master_repl_offset:434 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:433
127.0.0.1:6380> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:168 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:406 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
8、验证
127.0.0.1:6379> set test 123 OK
127.0.0.1:6380> get test "123" 127.0.0.1:6380> set hh 6380 (error) READONLY You can't write against a read only slave.
127.0.0.1:6381> get test "123" 127.0.0.1:6381> set xx 6381 (error) READONLY You can't write against a read only slave.
此时,我们可以把主服务或者从服务停掉进行测试来看看效果