redis主從切換介紹
1、這次案例的是選擇windows版本,把redis複製三份,監聽埠分別是6379、6380、6381
分別複製2份,修改redis.conf的埠port 為6380 6381,並新增master服務說明:slaveof 127.0.0.1 6379
啟動主節點,然後再分別啟動分節點,如果是在正式環境,分節點的啟動間隔時間不宜太短,同時啟動,master需要把資料同步到各個slave,造成資源消耗大,所以會間隔兩分鐘左右啟動slave。
啟動的時候,可以直接進入軟體目錄,使用dos命令啟動,如果直接點選redis-server.exe,啟動配置預設埠還是6379,所以用dos命令啟動。
依次進入master和2個slave的目錄下,啟動redis服務:redis-server.exe redis.conf
master
slave
使用Jedis進行連線檢視,測試資訊
6379資訊:redis_version:2.4.5 redis_git_sha1:00000000 redis_git_dirty:0 arch_bits:64 multiplexing_api:winsock2 process_id:14532 uptime_in_seconds:1439 uptime_in_days:0 lru_clock:1022289 used_cpu_sys:0.51 used_cpu_user:0.30 used_cpu_sys_children:0.00 used_cpu_user_children:0.00 connected_clients:1 connected_slaves:2 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 used_memory:1211928 used_memory_human:1.16M used_memory_rss:1211928 used_memory_peak:1211872 used_memory_peak_human:1.16M mem_fragmentation_ratio:1.00 mem_allocator:libc loading:0 aof_enabled:0 changes_since_last_save:0 bgsave_in_progress:0 last_save_time:1541142748 bgrewriteaof_in_progress:0 total_connections_received:7 total_commands_processed:40 expired_keys:0 evicted_keys:0 keyspace_hits:36 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 vm_enabled:0 role:master db0:keys=19,expires=0 db6:keys=1,expires=0
6380資訊:redis_version:2.4.5 redis_git_sha1:00000000 redis_git_dirty:0 arch_bits:64 multiplexing_api:winsock2 process_id:14548 uptime_in_seconds:1423 uptime_in_days:0 lru_clock:1022289 used_cpu_sys:0.51 used_cpu_user:0.14 used_cpu_sys_children:0.00 used_cpu_user_children:0.00 connected_clients:2 connected_slaves:0 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 used_memory:1203480 used_memory_human:1.15M used_memory_rss:1203480 used_memory_peak:1203424 used_memory_peak_human:1.15M mem_fragmentation_ratio:1.00 mem_allocator:libc loading:0 aof_enabled:0 changes_since_last_save:0 bgsave_in_progress:0 last_save_time:1541143334 bgrewriteaof_in_progress:0 total_connections_received:4 total_commands_processed:131 expired_keys:0 evicted_keys:0 keyspace_hits:14 keyspace_misses:2 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 vm_enabled:0 role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 db0:keys=20,expires=0 db6:keys=1,expires=0
如果此時停止6379,那麼就剩兩個從節點,要使6380成為新的節點,就要啟動redis-cli.exe,
slaveof no one,設定成新的節點。
這樣就可以在6380新的主節點上操作
當原來的主節點恢復啟動後,先將原來的主節點設定為從節點,這樣就可以從當前主節點獲取最新的資料。當前主節點是6380,所以先將6379設定為從節點,這樣可以從主節點獲取
6380的資料也就恢復過來了,然後將6380設定為從節點,6379設定為主節點
Redis主從複製(一主兩從/一主多從)的分析
IO劇增 每次slave斷開以後(無論是主動斷開,還是網路故障)再連線master都要將master全部dump出來rdb,在aof,即同步的過程都要重新執行一遍;所以要記住多臺slave不要一下都啟動起來,否則master可能IO劇增(間隔1-2分)
複製延遲 由於所有的寫操作都是先在Master上操作,然後同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。
可用性不高 當有主節點發生異常情況,就會導致不能寫入,導致業務出錯!
1、redis的複製功能是支援多個數據庫之間的資料同步。一類是主資料庫(master)一類是從資料庫(slave),主資料庫可以進行讀寫操作,當發生寫操作的時候自動將資料同步到從資料庫,而從資料庫一般是隻讀的,並接收主資料庫同步過來的資料,一個主資料庫可以有多個從資料庫,而一個從資料庫只能有一個主資料庫。
2、通過redis的複製功能可以很好的實現資料庫的讀寫分離,提高伺服器的負載能力。主資料庫主要進行寫操作,而從資料庫負責讀操作。