zoukankan      html  css  js  c++  java
  • redsi一主两从三哨兵

    1.前提准备

    防火墙,selinux,主机名解析,所有主机安装gcc

    [root@localhost ~]# vim /etc/hosts

    192.168.122.135  redis_master

    192.168.122.136  redis_slave01

    192.168.122.137  redis_slave02

    192.168.122.138  sentinel01

    192.168.122.139  sentinel02

    192.168.122.140  sentinel03

    [root@localhost ~]# for i in 135 136 137 138 139 140

    > do

    > rsync /etc/hosts 192.168.122.$i:/etc/hosts

    > done

    以192.168.122.135位例

    [root@redis_master soft]# tar zxf redis-4.0.11.tar.gz

    [root@redis_master soft]# cd redis-4.0.11/

    [root@redis_master redis-4.0.11]# make MALLOC=libc

    [root@redis_master redis-4.0.11]# make PREFIX=/soft/redis install

    [root@redis_master redis-4.0.11]# mkdir -p /soft/redis/conf/

    [root@redis_master redis-4.0.11]# cp redis.conf /soft/redis/conf/

    <三台哨兵[root@redis_master redis-4.0.11]# cp sentinel.conf /soft/redis/conf/

    >

    2.主从配置

    192.168.122.135(master)

    [root@redis_master redis]# mkdir data

    [root@redis_master redis]# mkdir logs

    [root@redis_master conf]# vim redis.conf 

    bind 192.168.122.135

    #支持内网/本地访问,比如 bind 172.31.175.142 127.0.0.1

    protected-mode no

    是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no。

    port 6379

    #端口号

    daemonize yes

    #是否在后台执行,yes:后台运行;no:不是后台运行

    pidfile /var/run/redis_6379.pid

    #redis的进程文件

    logfile /soft/redis/logs

    #指定了记录日志的文件。

    dir /soft/redis/data

    #数据目录,数据库的写入会在这个目录。

    slave-read-only yes

    #作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写

    slave-priority 100

    #当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。

    appendonly yes

    #redisrdbredissaveAppend Only FileRedis appendonly.aof RedisRDBappendfilename "appendonly.aof"

    #aof文件名

    appendfsync everysec

    #aof持久化策略的配置

    #no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。

    #always表示每次写入都执行fsync,以保证数据同步到磁盘。

    #everysec表示每秒执行一次fsync,可能会导致丢失这1s数据

    192.168.122.136(slave01)

    [root@redis_slave01 redis]# mkdir data

    [root@redis_slave01 redis]# mkdir logs

    [root@redis_slave01 conf]# vim redis.conf 

    bind 192.168.122.136

    protected-mode no

    port 6379

    daemonize yes

    pidfile /var/run/redis_6379.pid

    logfile /soft/redis/logs

    dir /soft/redis/data

    slave-read-only yes

    slaveof 192.168.122.135 6379

    #复制选项,slave复制对应的master。

    slave-priority 90

    appendonly yes

    appendfilename "appendonly.aof"

    appendfsync everysec

    192.168.122.137(slave02)

    [root@redis_slave02 redis]# mkdir data

    [root@redis_slave02 redis]# mkdir logs

    [root@redis_slave02 conf]# vim redis.conf 

    bind 0.0.0.0

    protected-mode no

    port 6379

    daemonize yes

    pidfile /var/run/redis_6379.pid

    logfile /soft/redis/logs

    dir /soft/redis/data

    slave-read-only yes

    slaveof 192.168.122.135 6379

    slave-priority 80

    appendonly yes

    appendfilename "appendonly.aof"

    appendfsync everysec

    3.哨兵配置

    192.138.122.138(sentinel01)

    [root@sentinel01 redis]# mkdir temp

    [root@sentinel01 redis]# mkdir logs

    [root@sentinel01 conf]# vim sentinel.conf 

    protected-mode no

    port 26379

    dir /soft/redis/temp

    daemonize yes

    logfile "/soft/redis/logs/sentinel_log.log"

    sentinel monitor redis1 192.168.122.135 6379 2

    sentinelmaster,192.168.122.135:63792sentinelmaster redissentinelsentinelmaster22sentinelmastermastersentinel parallel-syncs redis1 1

    failoverslavemasterfailoverslavereplication 1 slavesentinel down-after-milliseconds redis1 10000

    会向发送心跳来确认是否存活,如果在一定时间范围内不回应或者是回复了一个错误消息,那么这个会主观地单方面地认为这个已经不可用了也简称为。而这个就是用来指定这个一定时间范围的,单位是毫秒。

    sentinel failover-timeout redis1 60000

    #failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel  将会认为此次failover失败

    192.168.122.139(sentinel02)

    [root@sentinel02 redis]# mkdir temp

    [root@sentinel02 redis]# mkdir logs

    [root@sentinel02 conf]# vim sentinel.conf 

    protected-mode no

    port 26379

    dir /soft/redis/temp

    daemonize yes

    logfile "/soft/redis/logs/sentinel_log.log"

    sentinel monitor redis1 192.168.122.135 6379 2

    sentinel parallel-syncs redis1 1

    sentinel down-after-milliseconds redis1 10000

    sentinel failover-timeout redis1 60000

    192.168.122.140(sentinel03)

    [root@sentinel03 redis]# mkdir logs

    [root@sentinel03 redis]# mkdir temp

    [root@sentinel03 conf]# vim sentinel.conf 

    protected-mode no

    port 26379

    dir /soft/redis/temp

    daemonize yes

    logfile "/soft/redis/logs/sentinel_log.log"

    sentinel monitor redis1 192.168.122.135 6379 2

    sentinel parallel-syncs redis1 1

    sentinel down-after-milliseconds redis1 10000

    sentinel failover-timeout redis1 60000

    4.启动redis主从,哨兵

    [root@redis_master bin]# ./redis-server ../conf/redis.conf 

    [root@redis_slave01 bin]# ./redis-server ../conf/redis.conf

    [root@redis_slave02 bin]# ./redis-server ../conf/redis.conf

    [root@sentinel01 bin]# ./redis-server ../conf/sentinel.conf --sentinel

    [root@sentinel02 bin]# ./redis-server ../conf/sentinel.conf --sentinel

    [root@sentinel03 bin]# ./redis-server ../conf/sentinel.conf --sentinel

    附一:错误

    redisError condition on socket for SYNC: No route to host

    redis问题解决:Error condition on socket for SYNC: No route to host

    第一种方案:

    1.telnet ip port 是否通

    2.使用netstat -tnlp 查询IP地址是127.0.0.1而不是0.0.0.0或者本机ip(127.0.0.1代表只能本机使用)

    3.修改master中redis.conf中bind绑定0.0.0.0或者本机ip

    2.重启master服务

    如果第一种方案行不通,那就使用第二种方案;

    第二种方案:

    1.关闭防火墙:service iptables stop

    2.如果出现以下异常

    Redirecting to /bin/systemctl stop iptables.service

    Failed to stop iptables.service: Unit iptables.service not loaded.

    (其他异常也可以试下)

    3.进入/etc/sysconfig/目录下查询有没有iptables文件

    4.如果没有,使用systemctl stop firewalld 关闭防火墙

    5.使用yum install iptables-services 安装或者更新服务

    6.service iptables stop尝试下关闭服务器

    7.关闭成功无异常,重启maste和slave,进入redis-cli 输入info就能看到maste和slave信息了

    5.验证redis:master-slave(info replication)

    [root@redis_master bin]# ./redis-cli -h 192.168.122.135 

    192.168.122.135:6379> SET age 23

    OK

    192.168.122.135:6379> get age

    "23"

    192.168.122.136:6379> get age

    "23"

    192.168.122.137:6379> get age

    "23"

    6.验证哨兵集群(反客为主)

    这时我们让master挂掉,查看哨兵日志

    tail -50f sentinel_log.log 按照我们配置的 “slave-priority”的值,值小的192.168.122.137(slave02)将成为新的master.192.168.122.136成为192.168.122.137的slave. 在将192.168.122.135这台机器的redis服务起来后发现变成了新master的slave

  • 相关阅读:
    Java内存模型之从JMM角度分析DCL
    MySQL系列(九)--InnoDB索引原理
    MySQL系列(一)--基础知识(转载)
    MySQL系列(八)--数据库分库分表
    MySQL系列(七)--SQL优化的步骤
    MySQL系列(六)--索引优化
    MySQL系列(五)--二进制日志对主从复制的影响
    Java集合(七)--基于jdk1.8的HashMap源码
    Java数据结构和算法(八)--红黑树与2-3树
    Java数据结构和算法(七)--AVL树
  • 原文地址:https://www.cnblogs.com/charon2/p/10349835.html
Copyright © 2011-2022 走看看