日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用

發(fā)布時(shí)間:2025/4/17 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

小小經(jīng)過一天的休整

公眾號(hào)更新規(guī)則:每周六將會(huì)停更一次,進(jìn)行短期的休整,其余時(shí)間繼續(xù)每天一更。

思維導(dǎo)圖如下

Redis 主從配置

這里配置Redis主從

什么是主從

主從復(fù)制,是指把一臺(tái)Redis服務(wù)器上的數(shù)據(jù),復(fù)制到其余Redis服務(wù)器上。前者為主節(jié)點(diǎn),后者為從節(jié)點(diǎn)。

作用

  • 數(shù)據(jù)冗余,用于實(shí)現(xiàn)數(shù)據(jù)的熱備份,屬于一種數(shù)據(jù)冗余的實(shí)現(xiàn)方式。
  • 故障恢復(fù),主節(jié)點(diǎn)出現(xiàn)問題,從節(jié)點(diǎn)提供服務(wù),快速實(shí)現(xiàn)故障恢復(fù),屬于服務(wù)角度的冗余。
  • 負(fù)載均衡,進(jìn)行讀取的時(shí)候,通過多個(gè)主節(jié)點(diǎn),多個(gè)從節(jié)點(diǎn),實(shí)現(xiàn)Redis服務(wù)器的并發(fā)量得以提高。
  • 高可用。主從復(fù)制是實(shí)現(xiàn)哨兵和集群的基礎(chǔ)。
  • 使用主從復(fù)制

    1. 啟動(dòng)兩個(gè)節(jié)點(diǎn)

    這里通過更改配置文件的方式,修改監(jiān)聽的端口號(hào),一個(gè)為6379,一個(gè)為6380,用于監(jiān)聽兩個(gè)端口號(hào)。啟動(dòng)兩個(gè)節(jié)點(diǎn),分別是6379和6380.默認(rèn)啟動(dòng)都是主節(jié)點(diǎn)。

    2. 建立復(fù)制

    這里在6380節(jié)點(diǎn)執(zhí)行復(fù)制命令,讓其變成從節(jié)點(diǎn)。

    3. 觀察

    這里主節(jié)點(diǎn)數(shù)據(jù)會(huì)復(fù)制到從節(jié)點(diǎn)中、

  • 從節(jié)點(diǎn)查詢一個(gè)不存在的key
  • 主節(jié)點(diǎn)增加這個(gè)key

  • 從節(jié)點(diǎn)再次查詢,發(fā)現(xiàn)已經(jīng)完成同步

  • 斷開復(fù)制

    這里使用slaveof no one 進(jìn)行復(fù)制的斷開

    單例

    這里的單例,指的是Redis連接池的單例,這里舉例的語言為Java,使用的連接池為JedisPool 通過 JedisPool 實(shí)現(xiàn)連接池的單例。

    雙鎖機(jī)制

    通過雙重鎖機(jī)制,實(shí)現(xiàn)redis的單例

    /**
    * 雙鎖機(jī)制,安全且在多線程情況下能保持高性能
    */
    public class JedisPoolDoubleCheck {
    private static volatile JedisPool jedisPool = null;
    private JedisPoolDoubleCheck(){}

    public static JedisPool getRedisPoolUtil() {
    if(null == jedisPool ){
    synchronized (JedisPoolDoubleCheck.class){
    if(null == jedisPool){
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    poolConfig.setMaxTotal(100);
    poolConfig.setMaxIdle(10);
    poolConfig.setMaxWaitMillis(100*1000);
    poolConfig.setTestOnBorrow(true);
    jedisPool = new JedisPool(poolConfig,"192.168.10.151",6379);
    }
    }
    }
    return jedisPool;
    }
    }

    classloader

    通過類加載器,實(shí)現(xiàn)單例連接Redis

    /**
    * 登記式/靜態(tài)內(nèi)部類
    *
    */
    public class JedisPoolInnerClass {
    private JedisPoolInnerClass(){}
    private static GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    static {
    poolConfig.setMaxTotal(100);
    poolConfig.setMaxIdle(10);
    poolConfig.setMaxWaitMillis(100*1000);
    poolConfig.setTestOnBorrow(true);
    }
    private static class JedisPoolHolder{
    private static final JedisPool INSTANCE = new JedisPool(poolConfig,"192.168.10.151",6379);
    }

    public final static JedisPool getInstance(){
    return JedisPoolHolder.INSTANCE;
    }
    }

    集群

    這里使用redis 提供的命令行,實(shí)現(xiàn)redis集群的搭建

    redis.conf 文件準(zhǔn)備

    redis server集群模式需要一些特殊的配置,下為參考

    port 7000 # server端口,6臺(tái)server對(duì)應(yīng)7000-7005。
    # bind 127.0.0.1 //這一行要注釋,否則無法遠(yuǎn)程連接
    cluster-enabled yes
    cluster-config-file nodes.conf //node.conf文件不用管。
    cluster-node-timeout 5000
    appendonly yes //aof
    daemonize yes
    protected-mode no

    準(zhǔn)備六臺(tái)sever的配置文件

    mkdir redis-cluster
    cd redis-cluster
    mkdir 7000 7001 7002 7003 7004 7005

    然后將redis.conf文件拷貝到 7000 到 7005 目錄里面(每個(gè)redis.conf的只有端口不同)

    啟動(dòng)服務(wù)器

    對(duì)應(yīng)每一個(gè)目錄,啟動(dòng)一個(gè)服務(wù)器

    redis-server redis.conf

    到這里我們就有以集群模式啟動(dòng)的6臺(tái)(端口7000-7005)redis server,但是每臺(tái)服務(wù)器還沒有進(jìn)行slot指派,此時(shí)是不能對(duì)外提供服務(wù)的。

    搭建集群(slot指派)

    下面的命令將7000-7005的六臺(tái)服務(wù)器組成一個(gè)集群 其中復(fù)制因子為1所,以會(huì)有3臺(tái)master,另外3臺(tái)為slave。16384個(gè)slot會(huì)盡可能均勻的指派給3臺(tái)master, 而3臺(tái)slave異步的從其master進(jìn)行復(fù)制。

    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

    密碼設(shè)置

    通過redis-cli連接每一臺(tái)server,然后設(shè)置密碼

    config set masterauth [password]
    config set requirepass [password]

    哨兵機(jī)制

    這里基于哨兵,實(shí)現(xiàn)redis的高可用

    機(jī)器規(guī)劃

    集群配置

    redis.conf配置

    Master(192.168.50.100)機(jī)器配置如下:

    #后臺(tái)啟動(dòng)
    daemonize yes
    pidfile "/home/redis/redis/redisRun/redis_6379.pid"
    port 6379
    timeout 0
    tcp-keepalive 0
    loglevel notice
    logfile "/home/redis/redislog/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 "/home/redis/redisdb"
    #如果做故障切換,不論主從節(jié)點(diǎn)都要填寫密碼且要保持一致
    masterauth "123456"
    slave-serve-stale-data yes
    slave-read-only yes
    repl-disable-tcp-nodelay no
    slave-priority 98
    #當(dāng)前redis密碼
    requirepass "123456"
    appendonly yes
    # appendfsync always
    appendfsync everysec
    # appendfsync no
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    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
    # Generated by CONFIG REWRITE

    Slave(192.168.50.101-103)機(jī)器配置如下:

    daemonize yes
    pidfile "/home/redis/redis/redisRun/redis_6379.pid"
    port 6379
    timeout 0
    tcp-keepalive 0
    loglevel notice
    logfile "/home/redis/redislog/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 "/home/redis/redisdb"
    #主節(jié)點(diǎn)密碼
    masterauth "123456"
    slave-serve-stale-data yes
    slave-read-only yes
    repl-disable-tcp-nodelay no
    slave-priority 98
    requirepass "123456"
    appendonly yes
    # appendfsync always
    appendfsync everysec
    # appendfsync no
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    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
    # Generated by CONFIG REWRITE
    #配置主節(jié)點(diǎn)信息
    slaveof 192.168.50.100 6379

    哨兵配置如下

    Master(192.168.50.100)機(jī)器配置如下:

    port 26379
    #1表示在sentinel集群中只要有兩個(gè)節(jié)點(diǎn)檢測(cè)到redis主節(jié)點(diǎn)出故障就進(jìn)行切換,單sentinel節(jié)點(diǎn)無效(自己測(cè)試發(fā)現(xiàn)的)
    #如果3s內(nèi)mymaster無響應(yīng),則認(rèn)為mymaster宕機(jī)了
    #如果10秒后,mysater仍沒活過來,則啟動(dòng)failover
    sentinel monitor mymaster 192.168.50.100 6379 1
    sentinel down-after-milliseconds mymaster 3000
    sentinel failover-timeout mymaster 10000
    daemonize yes
    #指定工作目錄
    dir "/home/redis/sentinel-work"
    protected-mode no
    logfile "/home/redis/sentinellog/sentinel.log"
    #redis主節(jié)點(diǎn)密碼
    sentinel auth-pass mymaster 123456
    # Generated by CONFIG REWRITE

    Slave(192.168.50.100-102)機(jī)器配置同上

    啟動(dòng)集群

    啟動(dòng)192.168.50.100-103各機(jī)器Redis節(jié)點(diǎn)命令如下:

    redis-server /home/redis/redis/redis.conf

    在192.168.50.100啟動(dòng)Redis哨兵節(jié)點(diǎn)命令如下:

    redis-sentinel /home/redis/redis/sentinel.conf

    啟動(dòng)后效果

    哨兵節(jié)點(diǎn)

    單節(jié)點(diǎn)效果

    多節(jié)點(diǎn)

    登錄Master(192.168.50.100)的redis查看Master的情況:

    執(zhí)行登錄命令如下:

    redis-cli -h 192.168.50.100 -p 6379 -a 123456

    列出Master的信息:

    info Replication

    登錄Slave(192.168.50.101)的redis查看Slave的情況:

    執(zhí)行登錄命令如下:

    redis-cli -h 192.168.50.101 -p 6379 -a 123456

    列出Slave的信息:

    info Replication

    登錄Slave(192.168.50.102)的redis查看Slave的情況:

    執(zhí)行登錄命令如下:

    redis-cli -h 192.168.50.102 -p 6379 -a 123456

    列出Slave的信息:

    info Replication

    登錄Slave(192.168.50.103)的redis查看Slave的情況:

    執(zhí)行登錄命令如下:

    redis-cli -h 192.168.50.103 -p 6379 -a 123456

    列出Slave的信息:

    info Replication

    效果如圖:

    小明菜市場(chǎng)

    推薦閱讀

    ●?實(shí)戰(zhàn) | 后端日志的前世今生

    ●?實(shí)戰(zhàn) | Java 流之Stream,Lambda以及日期

    ●?理論 | 優(yōu)雅的構(gòu)建一個(gè)健壯的API接口

    ●?實(shí)戰(zhàn) | webmagic爬取實(shí)戰(zhàn)之爬取保險(xiǎn)經(jīng)紀(jì)人信息

    ●?實(shí)戰(zhàn) | WebMagic 爬取某保險(xiǎn)經(jīng)紀(jì)人網(wǎng)站經(jīng)紀(jì)人列表之網(wǎng)站列表爬取

    總結(jié)

    以上是生活随笔為你收集整理的redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。