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

  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/charon2/p/10349835.html
Copyright © 2011-2022 走看看