天天看點

Redis主從配置總結

Redis的主從配置相對于MySQL來說确實是非常簡單,不過我們這裡還是簡單總結一下,僅供參考和學習,如有不足之處,敬請指正。

Redis的編譯安裝

# wget http://download.redis.io/releases/redis-6.0.8.tar.gz           
# tar -xzvf redis-6.0.8.tar.gz           
# cd redis-6.0.8           
# make -j 4           
# make PREFIX=/usr/local/redis install           

如下所示,編譯安裝後,你可以看到下面目錄和檔案

Redis主從配置總結

建立下面目錄,用來存放日志檔案、配置檔案(redis.conf)、pidfile檔案,資料庫dump.rdb檔案

# mkdir -p /usr/local/redis/data           
# mkdir -p /usr/local/redis/log           
# mkdir -p /usr/local/redis/run           
# mkdir -p /usr/local/redis/conf           
# cp /tmp/redis-6.0.8/redis.conf  /usr/local/redis/conf           

修改部分參數,根據實際情況修改。大部分參數選擇預設參數即可。

bind 127.0.0.1 192.168.27.115           
daemonize yes           
port 6666           
logfile "/usr/local/redis/log/redis.log"           
dir /usr/local/redis/data           
pidfile /usr/local/redis/redis_6666.pid  這裡指定pidfile跟監聽端口一緻,例如,監聽端口為6666,那麼pidfile設定為redis_6666.pid           
protected-mode no           
requirepass 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28           

檢視redis.conf的配置參數

# grep '^[a-Z]' /usr/local/redis/conf/redis.conf           
bind 127.0.0.1 192.168.27.115           
protected-mode no           
port 6666           
tcp-backlog 511           
timeout 0           
tcp-keepalive 300           
daemonize yes           
supervised no           
pidfile /usr/local/redis/redis_6666.pid           
loglevel notice           
logfile "/usr/local/redis/log/redis.log"           
databases 16           
always-show-logo yes           
save 900 1           
save 300 10           
save 60 10000           
stop-writes-on-bgsave-error yes           
rdbcompression yes           
rdbchecksum yes           
dbfilename dump.rdb           
rdb-del-sync-files no           
dir /usr/local/redis/data           
replica-serve-stale-data yes           
replica-read-only yes           
repl-diskless-sync no           
repl-diskless-sync-delay 5           
repl-diskless-load disabled           
repl-disable-tcp-nodelay no           
replica-priority 100           
acllog-max-len 128           
requirepass 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28           
lazyfree-lazy-eviction no           
lazyfree-lazy-expire no           
lazyfree-lazy-server-del no           
replica-lazy-flush no           
lazyfree-lazy-user-del no           
oom-score-adj no           
oom-score-adj-values 0 200 800           
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           
aof-use-rdb-preamble 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           
stream-node-max-bytes 4096           
stream-node-max-entries 100           
activerehashing yes           
client-output-buffer-limit normal 0 0 0           
client-output-buffer-limit replica 256mb 64mb 60           
client-output-buffer-limit pubsub 32mb 8mb 60           
hz 10           
dynamic-hz yes           
aof-rewrite-incremental-fsync yes           
rdb-save-incremental-fsync yes           
jemalloc-bg-thread yes           

建立普通使用者

# groupadd redis           
# useradd redis -g redis -s /sbin/nologin           

修改目錄的Owner

# chown -R redis:redis /usr/local/redis/           
# ls -lrt /usr/local/redis/           

限制redis檔案目錄通路權限

設定redis的主目錄權限為700;

# chmod -R 700 /usr/local/redis/           

Redis主從的配置

關于Redis的主伺服器的配置如上所示,而Redis的從伺服器配置也差不多,可以将/usr/local/redis/目錄拷貝到從伺服器去,也可以直接在從伺服器按照上面步驟安裝即可,當然也要建立redis使用者、修改目錄的owner、限制redis檔案夾權限等等。

Redis從伺服器的redis.conf還需要額外增加兩個參數,如下所示,如果Redis主伺服器沒有配置requirepass,那麼從伺服器無需配置masterauth參數

slaveof 192.168.27.115 6666           
masterauth 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28           

Redis的主從同步很簡單,隻需要啟動Slave執行個體,會自動将主節點已有的資料同步到從節點。另外,在主節點寫入資料也會自動同步到從節點,是以從節點不需要做資料還原的步驟。另外,slave是不允許寫入的,在加入了slaveof  之後,執行個體就成為了隻讀的。

防火牆配置

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.20.57.24" port protocol="tcp" port="6666" accept"           
# systemctl restart firewalld.service           

啟動Redis的主節點

sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

啟動Redis的從節點

Redis主從測試同步

[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.27.115 -p 6666           
192.168.27.115:6666> auth 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28           
OK           
192.168.27.115:6666> set test1 "it's ok"           
OK           
192.168.27.115:6666> get test1           
"it's ok           
[root@KerryDB ~]# /usr/local/redis/bin/redis-cli  -h 10.20.57.24 -p 6666           
10.20.57.24:6666> get test1           
"it's ok"           
192.168.27.115:6666> info replication           
# Replication           
role:master           
connected_slaves:1           
slave0:ip=10.20.57.24,port=6666,state=online,offset=2526,lag=1           
master_replid:b30f19ff9f5e9c852636b07248f1e3b3fb8ea71b           
master_replid2:0000000000000000000000000000000000000000           
master_repl_offset:2526           
second_repl_offset:-1           
repl_backlog_active:1           
repl_backlog_size:1048576           
repl_backlog_first_byte_offset:1           
repl_backlog_histlen:2526           
Redis主從配置總結
127.0.0.1:6666> info replication           
# Replication           
role:slave           
master_host:192.168.27.115           
master_port:6666           
master_link_status:up           
master_last_io_seconds_ago:1           
master_sync_in_progress:0           
slave_repl_offset:557           
slave_priority:100           
slave_read_only:1           
connected_slaves:0           
master_replid:b30f19ff9f5e9c852636b07248f1e3b3fb8ea71b           
master_replid2:0000000000000000000000000000000000000000           
master_repl_offset:557           
second_repl_offset:-1           
repl_backlog_active:1           
repl_backlog_size:1048576           
repl_backlog_first_byte_offset:1           
repl_backlog_histlen:557           
Redis主從配置總結

正常情況下,主從同步正常,但是也會由于配置原因,導緻主從同步異常的情況,需要詳細分析日志找出主從同步的原因,當然也有主從不一緻等問題,後續篇幅再做介紹。

參考資料: