一、redis主從複製 主從複製:是存儲數據的服務結構 主伺服器:接受客戶端連接的伺服器 從伺服器:自動與主伺服器保持數據一致的伺服器 配置主從複製 1、環境準備 主伺服器 主機名:master IP地址:192.168.11.101/24 從伺服器 主機名:node01 IP地址:192.168. ...
一、redis主從複製
主從複製:是存儲數據的服務結構
主伺服器:接受客戶端連接的伺服器
從伺服器:自動與主伺服器保持數據一致的伺服器
配置主從複製
1、環境準備
主伺服器 主機名:master IP地址:192.168.11.101/24
從伺服器 主機名:node01 IP地址:192.168.11.102/24
客戶端 主機名:node02 IP地址:192.168.11.103/24
主從伺服器都要安裝redis服務,分別修改redis監聽的地址為192.168.11.101,192.168.11.102
2、192.168.11.101主伺服器,修改監聽的IP地址
root@Master:~# ss -lntup | grep 6379
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=1147,fd=6))
root@Master:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
root@Master:~# ss -lntup | grep 6379
root@Master:~# vim /etc/redis/6379.conf
bind 192.168.11.101
3、修改完配置文件重啟服務
root@Master:~# /etc/init.d/redis_6379 start
Starting Redis server...
4、登錄資料庫
root@Master:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
5、查看當期伺服器主從信息
192.168.11.101:6379> INFO replication
# Replication
role:master # 主節點
connected_slaves:0
master_replid:88c2e017cb0ea8cbd01a4f3874b314f8de1775b2
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:0
192.168.11.101:6379>
6、node01從伺服器
修改監聽的IP地址
# 先停伺服器
root@node01:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
# 修改配置文件
root@node01:~# vim /etc/redis/6379.conf
# 修改客戶端連接redis服務的IP地址
bind 192.168.11.102
7、重啟服務檢查埠監聽
root@node01:~# /etc/init.d/redis_6379 start
Starting Redis server...
root@node01:~# ss -lntup |grep 6379
tcp LISTEN 0 128 192.168.11.102:6379 0.0.0.0:* users:(("redis-server",pid=7978,fd=6))
8、連接主機檢查主從信息
PS:在這還沒添加從伺服器信息,所以看到是master是正常的!!!
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:f151ec960f14af322c6b07946a074a30a4c2c731
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:0
9、添加slave節點,將本機設置為node01的從伺服器,node01埠號為6379
192.168.11.102:6379> SLAVEOF 192.168.11.101 6379
OK
192.168.11.102:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:down
錯誤信息:
解決方法:
關閉防火牆和selinux
root@Master:~# systemctl is-active firewalld.service
active
root@Master:~# systemctl stop firewalld.service
root@Master:~# systemctl disable firewalld.service
root@Master:~# setenforce 0
關閉連接 重啟服務
# 第一次做忘了這條關閉連接命令 苦
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~#
root@node01:~# /etc/init.d/redis_6379 restart
/var/run/redis_6379.pid does not exist, process is not running
Starting Redis server...
10、以上是臨時配置,修改配置文件,將本機永久配置為node01的從伺服器
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf
slaveof 192.168.11.101 6379 #修改,指定主伺服器的IP地址和埠號
11、重啟服務
root@node01:~# /etc/init.d/redis_6379 start
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> info replication #查看slave伺服器的主從信息
# Replication
role:slave #從伺服器
master_host:192.168.11.101 #主伺服器IP地址
master_port:6379 #主伺服器埠號
master_link_status:up #和主伺服器的連接狀態:up
12、驗證查看主伺服器主從配置信息
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1330,lag=0
master_replid:ecc43c0169695c02204b624365e75859defc0aec
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1330
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1330
13、測試主從同步,插入數據
# 添加數據
192.168.11.101:6379> set school qinghua
OK
# 查看數據
192.168.11.101:6379> GET school
"qinghua"
192.168.11.102:6379> KEYS *
1) "school"
192.168.11.102:6379> GET school
"qinghua"
14、反客為主:將從庫恢復為主庫,在node01上操作
root@node01:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
192.168.11.101:6379> SLAVEOF no one
OK
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1853,lag=0
192.168.11.101:6379> exit
二、redis主從複製
主伺服器 主機名:master IP地址:192.168.11.101/24
從伺服器 主機名:node01 IP地址:192.168.11.102/24
從伺服器 主機名:node02 IP地址:192.168.11.103/24
1、三台都要安裝redis服務,分別修改redis監聽的地址為
192.168.11.101 192.168.11.102 192.168.11.103
2、由於之前master和node01做實驗已經修改過,所以這次直接修改node02即可
# 停止服務
root@node02:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
# 修改配置文件
root@node02:~# vim /etc/redis/6379.conf
bind 192.168.11.103
3、重啟服務並監聽埠
root@node02:~# /etc/init.d/redis_6379 start
Starting Redis server...
root@node02:~# ss -lntup |grep redis
tcp LISTEN 0 128 192.168.11.103:6379 0.0.0.0:* users:(("redis-server",pid=9860,fd=6))
4、master設置連接密碼
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 shutdown
501 requirepass plj123
root@Master:~# /etc/init.d/redis_6379 start
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 -a plj123
192.168.4.51:6379> info replication
# Replication
role:master
192.168.11.101:6379> set a 1
192.168.11.101:6379> set b 1
192.168.11.101:6379> set c 1
5、node01|2主機設置帶驗證的從庫(從庫配置一樣,截取數據倆邊混著搞得,看對應的主機信息即可)
192.168.11.103:6379>
192.168.11.103:6379> SLAVEOF 192.168.11.101 6379
6、關掉連接,添加密碼
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf
289 masterauth plj123
7、重啟服務
root@node01:~# /etc/init.d/redis_6379 start
192.168.11.102:6379> info replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up
8、查看數據是否同步
192.168.11.103:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up
192.168.11.103:6379> KEYS *
1) "school" # 數據已經同步
9、測試當其中的一臺從伺服器停止,另外一臺還能繼續同步數據,
模擬node01宕機
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdow
10、master存數據
192.168.11.101:6379> set AAA CCC
OK
192.168.11.101:6379> KEYS *
1) "school"
2) "AAA"
11、node02查看
192.168.11.103:6379> KEYS *
1) "AAA"
2) "school"
12、node01機器恢復
root@node01:~# /etc/init.d/redis_6379 restart
root@node01:~# ss -lntup |grep redis
tcp LISTEN 0 128 192.168.11.102:6379 0.0.0.0:* users:(("redis-server",pid=15384,fd=6))
13、測試數據是否同步
#宕機期間的數據自動同步
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> KEYS *
1) "AAA"
2) "school"
作者:ChAn
出處:http://www.cnblogs.com/sre-chan/
-------------------------------------------
個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什麼贏!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!