redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用
小小經(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)。
作用
使用主從復(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)再次查詢,發(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-clustercd 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 yespidfile "/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实现 主从,单例,集群,哨兵,配置应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 结构体数组 定义_一篇文章
- 下一篇: usb接口电路_RS232接口与RS48