1.簡介
Redis 是一個開源,高級的鍵值存儲和一個適用的解決方案,用於構建高性能,可擴展的 Web
應用程序。它有三個主要特點,使其優越於其它鍵值數據存儲系統:
- Redis 將其數據庫完全保存在內存中,僅使用磁盤進行持久化。
- 與其它鍵值數據存儲相比,Redis 有一組相對豐富的數據類型。
- Redis 可以將數據複製到任意數量的從機中。
2.部署條件
本次Redis部署基於 Centos7 系統,會分四篇手記講解單機模式、主從模式、哨兵模式、集羣模式。
需注意,由於虛擬機開不了多臺,所以在同一臺 Centos 機器上的進行不同模式實驗(通過不同的服務端口區分不同的 Redis 實例)。實際使用時,一般會使用多臺機器部署,此時只需要對應修改 IP 即可,部署過程是一樣的。
3.前置環境部署
如果只是部署 Redis(單機模式/主從模式/哨兵模式),是不需要安裝這個前置環境的。如果要部署 Redis(集羣模式(Redis Cluster)),建議先裝完這個前置環境才往下做實驗。這是因爲 Redis Cluster 需要使用 ruby 腳本構建。雖然 Centos7 自帶了 ruby 支持庫的安裝源,但是版本過低(只是 2.0.0 版本),Redis 要求 ruby 的版本至少爲 2.2.2。安裝方法如下:
先更換 yum 源安裝 2.3 版本的 ruby:
#yum install centos-release-scl-rh # 會在/etc/yum.repos.d/目錄多出一個CentOS-SCLo-scl-rh.repo 源
通過 yum 安裝 ruby:
#yum install rh-ruby23 -y
#scl enable rh-ruby23 bash # 臨時變更當前環境變量的 ruby 版本爲 2.3(重啓後失效)
注:這種安裝方式是使得 ruby2.0 和 2.3 版本並存,並非升級 ruby。之後若要再使用 2.3 版本的 ruby,需再次執scl enable rh-ruby23 bash
查看 ruby 版本:
#ruby -v
ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-linux]
安裝 gem:
#yum -y install rubygems
安裝 ruby 的 redis 包(用於 redis之間的通信):
#gem install redis
# 若前面安裝 ruby 版本過低就會報錯:
# ERROR:
#Error installing redis:
redis requires Ruby version >= 2.2.2
查看 gem 版本:
#gem -v
2.5.2.3
至此前置環境就安裝完成了,下面開始展示Redis 四種模式的部署。
一、單機模式
1.1簡介
單機模式是 Redis 最基本的模式,之後的主從、哨兵、集羣模式都是據此擴展而來。而且在
開發環境下,出於方便起見,一般部署單機模式即可滿足調試要求。
1.2 安裝
到官網下載redis,本實驗下載的版本是 redis-4.0.11.tar.gz :
中文官網:http://www.redis.cn/
英文官網:https://redis.io/
上傳到 Centos 服務器,本次實驗上傳位置爲:usr/local/redis-4.0.11.tar.gz
解壓安裝包:
#tar -zxvf redis-4.0.11.tar.gz
由於 Redis 需要編譯安裝,先安裝 gcc 編譯環境:
#yum -y install gcc
進入 Redis 安裝目錄:
cd /usr/local/redis-4.0.11/
編譯:
#make MALLOC=libc
編譯完成後,進入 src 目錄:
#cd /usr/local/redis-4.0.11/src/
把 src 目錄下的文件安裝到 /usr/local/bin :
#make install
1.3部署
默認情況下,Redis 是通過以下方式啓動/停止的:
#cd /usr/local/redis-4.0.10/src/ # 切換到啓動腳本目錄
#./redis-server ../redis.conf # 啓動 Redis
Ctrl + C # 停止 Redis
這種啓動方式非但無法在後臺運行,而且也不符合使用習慣。另外默認情況下 Redis 也不直接支持開機自啓,爲此要對其進行改善。
通過命令 vi /usr/local/redis-4.0.10/redis.conf
編輯 Redis 配置文件,爲支持後臺啓動
daemonize yes # 後臺啓動模式
# 修改一下其他配置項
maxmemory 536870912 # 最大內存(單位 byte),需根據實際配置,建議爲當前空閒內存的 50%左右
dir /tmp/redis # Redis的工作目錄(若不存在需手建否則無法啓動),默認值爲[./],logfile 與 dbfilename 受其影響
logfile "" # Redis 日誌名稱(默認不配置,表示輸出到 stdout),正式部署請設置爲合適的名稱
dbfilename dump.rdb # Redis 數據持久化時的存儲位置,正式部署請設置爲合適的名稱
建上面配置的 Redis 工作目錄:
#mkdir /tmp/redis
然後在/etc 目錄下新建 redis 目錄:
#mkdir /etc/redis
拷貝 redis.conf 配置文件到/etc/redis 目錄下,並重命名爲 6379.conf(取的是 Redis 默認端口
名稱,Redis 啓動腳本里的變量會讀取這個名稱,因此若 redis 的端口號改了,這個文件名也要修
改):
#cp /usr/local/redis-4.0.11/redis.conf /etc/redis/6379.conf
拷貝 Redis 的啓動腳本到/etc/init.d 目錄下,並重命名爲 redisd:
#cp /usr/local/redis-4.0.11/utils/redis_init_script /etc/init.d/redisd
通過vi /etc/init.d/redisd
命令修改 redisd 文件,在首行#!/bin/sh
下面添加兩行(其含義是 Redis服務必須在運行級 2,3,4,5 下被啓動或關閉,啓動的優先級是 90,關閉的優先級是 10):
#!/bin/sh
# chkconfig:2345 90 10
# description: Redis is a persistent key-value database
切換到/etc/init.d 目錄:
#cd /etc/init.d
設置爲開機自啓:
#chkconfig redisd on #若不需要自啓則執行 chkconfig redisd off
現在可以直接以服務的形式啓動 Redis 了:
#service redisd start
1.4測試
通過 Redis 測試客戶端命令 redis-cli 分別連接到 Redis 實例:
#cd /usr/local/redis-4.0.11/src/ # 切換到啓動腳本目錄
[root@localhost src]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
# Server
redis_version:4.0.11
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dcb7502714117eda
redis_mode:standalone
os:Linux 3.10.0-123.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:5733
run_id:308fbc71ec2d48c346f3b937023c46e96c05cadb
tcp_port:6379
uptime_in_seconds:244
uptime_in_days:0
hz:10
lru_clock:10414214
executable:/usr/local/bin/redis-server
config_file:/etc/redis/6379.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:903737
used_memory_human:882.56K
used_memory_rss:2019328
used_memory_rss_human:1.93M
used_memory_peak:903737
used_memory_peak_human:882.56K
used_memory_peak_perc:100.11%
used_memory_overhead:902277
used_memory_startup:852647
used_memory_dataset:1460
used_memory_dataset_perc:2.86%
total_system_memory:1915682816
total_system_memory_human:1.78G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.23
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1587472274
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
# Stats
total_connections_received:1
total_commands_processed:1
instantaneous_ops_per_sec:0
total_net_input_bytes:31
total_net_output_bytes:10163
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:0
master_replid:552fd682b8b91f80122e782f8bb799803b901538
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
# CPU
used_cpu_sys:0.26
used_cpu_user:0.00
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
127.0.0.1:6379>
至此 Redis 單機模式部署完成。
爲了部署後面幾種模式,現在先停止這個 Redis 進程:
#service redisd stop