、单个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(设置访问登录密码)
#从服务设置了密码需要加上
masterauth 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 no
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 no
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 no
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.
此时,我们可以把主服务或者从服务停掉进行测试来看看效果
停掉主服务6379:
复制代码
[root@VM_0_15_centos 6379]# ps -ef |grep redis
root 10690 30720 0 18:24 pts/4 00:00:00 tailf -n 200 /var/log/redis/sentinel.log
root 15650 1 0 19:01 ? 00:00:01 redis-sentinel *:26379 [sentinel]
root 16404 1 0 19:06 ? 00:00:00 redis-sentinel *:26381 [sentinel]
root 16565 1 0 19:07 ? 00:00:00 redis-sentinel *:26380 [sentinel]
root 17248 28933 0 19:12 pts/0 00:00:00 grep --color=auto redis
root 31060 1 0 16:55 ? 00:00:06 redis-server *:6379
root 31488 1 0 16:58 ? 00:00:06 redis-server *:6380
root 31563 29043 0 16:58 pts/1 00:00:00 redis-cli -c -p 6380 -a foo
root 31952 1 0 17:01 ? 00:00:06 redis-server *:6381
root 32057 29125 0 17:02 pts/2 00:00:00 redis-cli -c -p 6381 -a foo
[root@VM_0_15_centos 6379]# kill 31060
复制代码
sentinel日志:
复制代码
15650:X 18 Dec 19:13:44.834 # +sdown master mymaster 127.0.0.1 6379
16565:X 18 Dec 19:13:44.852 # +sdown master mymaster 127.0.0.1 6379
16404:X 18 Dec 19:13:44.861 # +sdown master mymaster 127.0.0.1 6379
16404:X 18 Dec 19:13:44.920 # +odown master mymaster 127.0.0.1 6379 #quorum 3/2
16404:X 18 Dec 19:13:44.920 # +new-epoch 1
16404:X 18 Dec 19:13:44.920 # +try-failover master mymaster 127.0.0.1 6379
16404:X 18 Dec 19:13:44.927 # +vote-for-leader 6d5a34396cd5912cbfe1134a70cd3e14338ebf24 1
15650:X 18 Dec 19:13:44.934 # +new-epoch 1
16565:X 18 Dec 19:13:44.934 # +new-epoch 1
16565:X 18 Dec 19:13:44.940 # +vote-for-leader