Redis主从复制的搭建与.哨兵.数据持久
目錄
一.redis主從復制
1.主從復制的概述
2.一主一從結構的配置
二.哨兵服務
1. 哨兵服務的簡單介紹
2.配置哨兵服務
三.數據持久化
1.RedisDataBase(RDB)
2.Append Only File(AOF)
一.redis主從復制
1.主從復制的概述
????????- slave向master發送sync命令
????????- master啟動后臺存盤進程,并收集所有修改數據命令- master完成后臺存盤后,傳送整個數據文件到s lave
????????- slave接收數據文件,加載到內存中完成首次完全同步
????????-后續有新數據產生時,master繼續收集數據修改命令依次傳給slave,完成同步
2.一主一從結構的配置
????????redis1:192.168.1.11
????????redis2:192.168.1.12
redis安裝配置參考
NOSQL的Redis的基礎_kali_yao的博客-CSDN博客
如果已經安裝就需要配置如下:
1)恢復redis1和redis2的redis默認配置
[root@redis1 ~]# vim /etc/redis/6379.conf # cluster-enabled yes # cluster-config-file nodes-6379.conf # cluster-node-timeout 5000 ? [root@redis1 ~]# service redis_6379 stop [root@redis1 ~]# rm -f /var/lib/redis/6379/* [root@redis1 ~]# service redis_6379 start ? [root@redis2 ~]# vim /etc/redis/6379.conf # cluster-enabled yes # cluster-config-file nodes-6379.conf # cluster-node-timeout 5000 ? [root@redis2 ~]# service redis_6379 stop [root@redis2 ~]# rm -f /var/lib/redis/6379/* [root@redis2 ~]# service redis_6379 start2)默認redis都是主服務器,所以無需配置
[root@redis1 ~]# redis-cli 127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:0 master_replid:a839f0060f5e8d9894a1fafeeea973c3c52e5e71 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:03)配置redis2(192.168.1.12)為redis1的從服務器
[root@redis2 ~]# redis-cli 127.0.0.1:6379> SLAVEOF 192.168.1.11 6379 OK ? 127.0.0.1:6379> INFO replication # Replication role:slave master_host:192.168.1.11 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:7a4326738b63379fc5def4177a1ba6fff33d0a98 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14 [root@redis2 ~]# vim /etc/redis/6379.conf slaveof 192.168.1.11 63794)通過命令進行配置(臨時生效)
-
永久生效
-
測試配置
5)配置主服務器redis1的連接密碼為tedu.cn
# 設置密碼 [root@redis1 ~]# vim +501 /etc/redis/6379.conf requirepass tedu.cn ? # 修改服務腳本 [root@redis1 ~]# vim +43 /etc/init.d/redis_6379$CLIEXEC -p $REDISPORT -a tedu.cn shutdown# 重啟服務 [root@redis1 ~]# service redis_6379 restart Stopping ... Redis stopped Starting Redis server...6)配置從服務器
# 修改配置文件,設置主服務器連接密碼 [root@redis2 ~]# vim +289 /etc/redis/6379.conf masterauth tedu.cn# 重啟服務 [root@redis2 ~]# service redis_6379 restart Stopping ... Redis stopped Starting Redis server...7)在從服務器本機連接服務,查看復制信息
[root@redis2 ~]# redis-cli
127.0.0.1:6379> info replication # Replication role:slave # 角色為從服務器 master_host:192.168.1.11 # 主服務器地址 master_port:6379 # 主服務器端口 master_link_status:up # 到主服務器的連接狀態 master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:70 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:94e2bea7fc81fa71b1193df29b0984190c01bacc master_replid2:0000000000000000000000000000000000000000 master_repl_offset:70 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:70二.哨兵服務
1. 哨兵服務的簡單介紹
?監視master服務器
????????發現master宕機后,將從服務器升級為主服務器
2.配置哨兵服務
1)準備
cluster
redis2:192.168.1.12
redis1:192.168.1.11
192.168.1.19
基于以上示例【配置帶驗證的主從復制】,配置哨兵服務
2)配置哨兵服務
# 在redis服務器(如redis1)上,拷貝哨兵程序到哨兵服務器 [root@redis1 ~]# scp -r /usr/local/redis 192.168.1.19:/usr/local# 在sentinel1上,將redis命令目錄添加至PATH環境變量 [root@sentinel1 ~]# echo 'export PATH=$PATH:/usr/local/redis/bin' >> /etc/bashrc [root@sentinel1 ~]# source /etc/bashrc# 創建哨兵配置文件 [root@sentinel1 ~]# vim /etc/sentinel.conf sentinel monitor redis1 192.168.1.11 6379 1 # 監視主服務器 bind 0.0.0.0 # 哨兵服務運行地址 sentinel auth-pass redis1 tedu.cn # 連接主服務器的密碼3)啟動哨兵服務
[root@sentinel1 ~]# redis-sentinel /etc/sentinel.conf 30557:X 12 May 10:12:44.026 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 30557:X 12 May 10:12:44.026 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=30557, just started 30557:X 12 May 10:12:44.026 # Configuration loaded 30557:X 12 May 10:12:44.028 * Increased maximum number of open files to 10032 (it was originally set to 1024)._.__.-``__ ''-.__.-`` `. `_. ''-._ Redis 4.0.8 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 26379 | `-._ `._ / _.-' | PID: 30557`-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io`-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' |`-._ `-._`-.__.-'_.-' _.-'`-._ `-.__.-' _.-'`-._ _.-'`-.__.-'30557:X 12 May 10:12:44.033 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 30557:X 12 May 10:12:44.049 # Sentinel ID is 40460aaa4df5543a000bf8f464c6698a712d2697 30557:X 12 May 10:12:44.049 # +monitor master redis1 192.168.1.11 6379 quorum 1 30557:X 12 May 10:12:44.051 * +slave slave 192.168.1.12:6379 192.168.1.12 6379 @ redis1 192.168.1.11 63794)測試配置
# 停止主服務器redis1的redis服務 [root@redis1 ~]# service redis_6379 stop Stopping ... Redis stopped# 在redis2上查看redis服務狀態 [root@redis2 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:master # 已經變為主服務器 connected_slaves:0 master_replid:da33c07e16dc1b90d14a20004e9f5d9b3a7b9081 master_replid2:94e2bea7fc81fa71b1193df29b0984190c01bacc master_repl_offset:10054 second_repl_offset:8936 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:100545)啟動redis1,查看redis1信息
[root@redis1 ~]# service redis_6379 start Starting Redis server...[root@redis1 ~]# redis-cli -a tedu.cn 127.0.0.1:6379> info replication # Replication role:slave # 角色為從服務器 master_host:192.168.1.12 # 主服務器地址 master_port:6379 # 主服務器端口 master_link_status:up # 到主服務器的連接狀態 master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:62014 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:da33c07e16dc1b90d14a20004e9f5d9b3a7b9081 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:62014 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:61430 repl_backlog_histlen:585三.數據持久化
1.RedisDataBase(RDB)
1)RDB的概述
-
數據持久化方式之一
-
數據持久化默認方式
-
按照指定時間間隔,將內存中的數據集快照寫入硬盤
-
通過RDB進行備份還原,只要拷貝RDB文件即可
-
數據從內存保存到磁盤的頻率設置
save 900 1????????????? //15分鐘內有1個key改變即存盤?
save 300 10????????????? //5分鐘內有10個key改變即存盤
save 60 10000??????????? //1分鐘內有10000個key改變即存盤
-
也可以進行手動存盤
save?????????? //阻塞寫存盤
bgsave???? //不阻塞寫存盤
2)RDB的優缺點
-
優點:
-
高性能的持久化實現:創建一個子進程來執行持久化,先將數據寫入臨時文件,持久化過程結束后,再用這個臨時文件替換上次持久化好的文件
-
過程中主進程不做任何IO操作
-
比較適合大規模數據恢復,且對數據完整性要求不是非常高的場合
-
-
缺點:
-
意外宕機時,丟失最后一次持久化的所有數據
-
3)配置RDB
-
配置RDB參數
-
清空rdb數據
-
存儲數據
-
驗證備份還原
2.Append Only File(AOF)
1)AOF的概述
-
追加方式記錄寫操作的文件
-
記錄redis服務所有寫操作
-
不斷的將新的寫操作,追加到文件的末尾
-
默認沒有啟用
-
使用cat命令可以查看文件內容
2)AOF文件記錄寫操作的方式
-
appendfsync always:時時記錄,并完成磁盤同步
-
appendfsync everysec :每秒記錄一次,并完成磁盤同步
-
appendfsync no:寫入aof ,不執行磁盤同步
3)AOF優點與缺點
-
優點:
-
可以靈活設置持久化方式
-
出現意外宕機時,僅可能丟失1秒的數據
-
-
缺點:
-
持久化文件的體積通常會大于RDB方式
-
執行fsync策略時的速度可能會比RDB方式慢
-
4)配置AOF
-
修改配置文件
-
驗證備份還原
總結
以上是生活随笔為你收集整理的Redis主从复制的搭建与.哨兵.数据持久的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NOSQL的Redis的基础
- 下一篇: Redis集群的基本配置