zoukankan      html  css  js  c++  java
  • 使用consul实现分布式服务注册和发现--redis篇

    安装consul client
    consul 客户端检脚本
    =============================================================================================
    在192.168.56.122服务器上
    =============================================================================================
    1、安装redis
    yum intstall redis -y
    2、配置redis  为主
    cat >/etc/redis.conf<<EOF
    bind 192.168.56.122 127.0.0.1
    protected-mode yes
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile /var/run/redis_6379.pid
    loglevel notice
    logfile /var/log/redis/redis.log
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /var/lib/redis
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    requirepass password
    appendonly no
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    EOF
    
    
    3、启动redis
    service redis start
    
    4、配置consul服务
    [root@MySQL-slave /etc/consul]# cat >redis-master.json<<EOF 
    { 
      "service": [
      {
        "name": "6379-redis-m",
        "tags": ["master"],
        "address": "192.168.56.132",
        "port": 6379,
        "checks": [
          { 
            "args": ["/data/consul/check_master.sh","0"],
            "interval": "5s"
          }
        ]
      }
     ] 
    }
    EOF
    
    [root@MySQL-slave /etc/consul]# cat >redis-slave.json<<EOF 
    { 
      "service": [
      {
        "name": "6379-redis-s",
        "tags": ["slave"],
        "address": "192.168.56.132",
        "port": 6379,
        "checks": [
          { 
            "args": ["/data/consul/check_slave.sh","0"],
            "interval": "5s"
          }
        ]
      }
     ] 
    }
    EOF
    
    5、主从检测脚本
    [root@tomcat103 17:30:04 consul]/#cat  >/data/consul/check_master.sh<<EOF 
    #!/bin/bash
    /usr/bin/redis-cli -h 127.0.0.1 -p 6379 -a password info | grep role:master
    a=$?
    if [ $a == 1 ];then
      exit 2
    fi
    EOF
    
    [root@tomcat103 17:30:18 consul]/#cat >/data/consul/check_slave.sh<<EOF
    #!/bin/bash
    /usr/bin/redis-cli -h 127.0.0.1 -p 6379 -a password info | grep role:slave
    a=$?
    if [ $a == 1 ];then
      exit 2
    fi
    EOF
    
    
    更改启动命令
    nohup /usr/local/bin/consul agent -config-dir=/etc/consul -rejoin -enable-script-checks=true &
    ====================================================================
    在192.168.56.122服务器上
    ====================================================================
    1、安装redis
    yum intstall redis -y
    2、配置192.168.56.132上为192.168.56.122 redis的从
    cat >/etc/redis.conf<<EOF
    bind 192.168.56.132 127.0.0.1
    protected-mode yes
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile /var/run/redis_6379.pid
    loglevel notice
    logfile /var/log/redis/redis.log
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /var/lib/redis
    slaveof 192.168.56.122 6379
    masterauth password
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    requirepass password
    appendonly no
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    EOF
      
    3、配置consul服务
    主从检测脚本
    [root@tomcat103 17:30:04 consul]/#cat  >/data/consul/check_master.sh<<EOF 
    #!/bin/bash
    /usr/bin/redis-cli -h 127.0.0.1 -p 6379 -a password info | grep role:master
    a=$?
    if [ $a == 1 ];then
      exit 2
    fi
    EOF
    
    [root@tomcat103 17:30:18 consul]/#cat >/data/consul/check_slave.sh<<EOF
    #!/bin/bash
    /usr/bin/redis-cli -h 127.0.0.1 -p 6379 -a password info | grep role:slave
    a=$?
    if [ $a == 1 ];then
      exit 2
    fi
    EOF
    
    4、consul配置文件
    [root@MySQL-slave /etc/consul]# cat >/etc/consul/consul_config.json<<EOF 
    {
        "advertise_addr": "192.168.56.132",
        "bind_addr": "192.168.56.132",
        "domain": "consul",
        "datacenter": "consul-cluster",
        "data_dir": "/data/consul/data",
        "enable_syslog": true,
        "performance": {
          "raft_multiplier": 1
        },
        "dns_config": {
            "allow_stale": true,
            "max_stale": "15s"
        },
        "retry_join": [
            "192.168.56.120",
            "192.168.56.121",
            "192.168.56.122"
        ],
    
        "retry_interval": "10s",
        "skip_leave_on_interrupt": true,
        "leave_on_terminate": false,
        "ports": {
            "dns": 53,
            "http": 80
        },
        "rejoin_after_leave": true,
        "addresses": {
            "http": "0.0.0.0",
            "dns": "0.0.0.0"
        }
    }
    EOF
    
    [root@MySQL-slave /etc/consul]# cat >/etc/consul/redis-master.json<<EOF 
    { 
      "service": [
      {
        "name": "6379-redis-m",
        "tags": ["master"],
        "address": "192.168.56.132",
        "port": 6379,
        "checks": [
          { 
            "args": ["/data/consul/check_master.sh","0"],
            "interval": "5s"
          }
        ]
      }
     ] 
    }
    EOF
    
    [root@MySQL-slave /etc/consul]# cat >/etc/consul/redis-slave.json<<EOF 
    { 
      "service": [
      {
        "name": "6379-redis-s",
        "tags": ["slave"],
        "address": "192.168.56.132",
        "port": 6379,
        "checks": [
          { 
            "args": ["/data/consul/check_slave.sh","0"],
            "interval": "5s"
          }
        ]
      }
     ] 
    }
    EOF
    5、启动consul客户端服务
    
     nohup consul agent -config-dir /etc/consul/ -data-dir /data/consul/data -enable-script-checks=true -ui &
     
    6、 在122服务器上ping 域名
    测试高可用性 
    ping 6379-redis-m.service.consul
    ping 6379-redis-s.service.consul
    (推荐使用dig @192.168.56.120 -p 53 6379-redis-m.service.consul 命令测试 )
     

    2f670e6f262e826e8094a7553e33f286.png

    ==================================================================================
    更改两个服务器redis配置
     互换主从角色
    在122上打开着两行注释
    slaveof 192.168.56.132 6379
    masterauth password
    重启redis
    service redis restart
    在132上
    #slaveof 192.168.56.122 6379
    
    #masterauth password
    重启服务
    service redis restart
     
    重新测试域名对应的数据库主从地址
     ping 6379-redis-m.service.consul
     ping 6379-redis-s.service.consul
     

    2f8586cc3d8c713a9d25f1447bfb8061.png

    至此consul通过脚本自动发现redis主从高可用完成

  • 相关阅读:
    shell预备知识
    php session和cookie
    php数据库访问抽象层PDO
    递归求斐波那契数
    SqlDataReader的使用
    DataAdapter与DataSet的使用
    CLR
    Android Studio javadoc 生成注释文档
    MySQL教程之concat以及group_concat的用法
    一文读懂MQTT协议
  • 原文地址:https://www.cnblogs.com/ExMan/p/11908382.html
Copyright © 2011-2022 走看看