Redis是一個開源,先進的key-value存儲,並用於構建高性能,可擴展的Web應用程序的完美解決方案。
Redis從它的許多競爭繼承來的三個主要特點:
Redis數據庫完全在內存中,使用磁盤僅用於持久性。
相比許多鍵值數據存儲,Redis擁有一套較為豐富的數據類型。
Redis可以將數據復制到任意數量的從服務器。
REDIS優勢
異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。
支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數據類型更好。
操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。
多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發布/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。
REDIS安裝
在redis官網下載最新的源碼包
http://download.redis.io/releases/redis-2.8.3.tar.gz
- 解壓
# tar xzf redis-3.0.0.tar.gz
- 拷貝目錄
# mv redis-3.0.0 /usr/local/redis
- 進入目錄
# cd /usr/local/redis
- 編譯
# make && make install
- 查看命令運行結果,如果是0則是成功
# echo $?
REDIS啟動
# redis-server
第一次啟動時可能會有提示的warning信息;可以忽略,但最好是按照提示的處理辦法修改。
REDIS客戶端啟動
# redis-cli
驗證客戶端操作
# redis> set iom dtsoft
OK
# redis> get iom
“dtsoft”
REDIS主從同步
編輯主機配置文件
# vim redis.conf
daemonize yes –進程后台啟動
logfile /usr/local/redis/redis.log –日志文件
syslog-enabled no –日志不寫進系統日志
dir /usr/local/redis/data –數據文件存放
requirepass system –認證密碼
編輯從機配置文件
# vim redis.conf
daemonize yes
logfile /usr/local/redis/redis.log
syslog-enabled no
dir /usr/local/redis/data
slaveof 192.168.10.5 6379 –主服務器的IP地址和端口
masterauth system –主服務器上的認證密碼
啟動服務
1、主機節點:
# cd /usr/local/redis/src/
# ./redis-server ../redis.conf –后面的配置文件一定要加上
2、從機節點:
# cd /usr/local/redis/src/
# ./redis-server ../redis.conf –后面的配置文件一定要加上
3、檢查端口
分別在主從機上執行,查看兩機相連端口是否是ESTABLISHED狀態。
# netstat -antp | grep 6379
4、驗證同步
主機節點:
# ./redis-cli
127.0.0.1:6379> set iom 123456
(error) NOAUTH Authentication required. –需要認證權限
127.0.0.1:6379> auth system
OK
127.0.0.1:6379> set iom 123456
OK
127.0.0.1:6379> get iom
“123456”
從機節點:
# ./redis-cli
127.0.0.1:6379> get iom –在從服務器不需要認證權限
“123456”
keepalived配置
路由機配置
編輯/etc/keepalived/keepalived.cnf文件
global_defs {
router_id LVS_MASTER #BACKUP上修改為LVS_BACKUP
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.252 #redis
}
}
virtual_server 192.168.10.252 6379 {
delay_loop 6
lb_algo rr
lb_kind DR
#lb_kind NAT
# persistence_timeout 3
protocol TCP
real_server 192.168.10.3 6379 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}
real_server 192.168.10.5 6379 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 6379
}
}
}
重啟keepalived服務
# service keepalived restart
redis主從機配置
編寫執行腳本
#vi lvs_real
- #!/bin/bash
- #description:startrealserver
- VIP=192.168.10.252
- case “$1” in
- start)
- echo “startLVSofREALServer”
- /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
- echo “1”>/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo “2”>/proc/sys/net/ipv4/conf/lo/arp_announce
- echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore
- echo “2”>/proc/sys/net/ipv4/conf/all/arp_announce
- sysctl –p >/dev/null 2>&1
- ;;
- stop)d
- /sbin/ifconfig lo:0 down
- echo “closeLVSDirectorserver”
- echo “0”>/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo “0”>/proc/sys/net/ipv4/conf/lo/arp_announce
- echo “0”>/proc/sys/net/ipv4/conf/all/arp_ignore
- echo “0”>/proc/sys/net/ipv4/conf/all/arp_announce
- ;;
- *)
- echo “Usage:$0{start|stop}”
- exit 1
- esac
執行腳本
# /lvs_real start
系統測試
1、測試環境
VIP/路由機:192.168.10.252
redis主:192.168.10.3
redis備:192.168.10.4
客戶機:192.168.10.1
2、測試過程
客戶機運行redis客戶端:
# redis-cli –h 192.168.10.252 –p 6379
redis:6379> auth system –第一次需要輸入密碼
OK
redis:6379> get iom
“123456”
關掉redis主機
客戶機運行redis客戶端
redis:6379> get iom
“123456” –仍能得到iom值
啟動redis主機
客戶機重啟redis客戶端
# redis-cli –h 192.168.10.252 –p 6379
路由機運行lvs監控命令。
# watch ipvsadm –lc
可以看到destination顯示的是主節點IP。
每次客戶機重啟redis客戶端,destination顯示IP在主備節點替換(lvs路由配置為輪詢,即lb_algo rr
)。
3、測試注意
- redis從節點默認配置為只讀,客戶機連接分配到從節點后只能執行查詢操作,不能增刪。從節點若想也可執行修改操作需將redis配置文件的slave-read-only選項改為no。
- 客戶機只要沒退出redis客戶端,將一直固定連接同個redis節點。
- redis節點故障恢復后keepalived會立刻將其並入redis集群,但此時有可能恢復的redis節點數據比其它節點舊,一定要先同步數據再將其並入集群。