centos6.8 安裝redis 4.0 搭建主從
環境:
master:172.17.165.245
slave :172.17.165.230
redis 版本:redis 4.0
1.下載下傳并進行安裝包
[root@iZ2zejbqrpwrmr4mjy0u9fZ ~]#wget http://download.redis.io/releases/redis-4.0.8.tar.gz
[root@iZ2zejbqrpwrmr4mjy0u9fZ ~]#tar zxvf redis-4.0.8.tar.gz -C /usr/local/
[root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# cd !$
[root@iZ2zejbqrpwrmr4mjy0u9fZ redis-4.0.8]# ls
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
[root@iZ2zejbqrpwrmr4mjy0u9fZ redis-4.0.8]#make
2.修改配置檔案
[root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# cp redis.conf /etc/redis/
[root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# cp utils/redis_init_script /etc/init.d/redis
[root@iZ2zejbqrpwrmr4mjy0u9fZ redis]# mv redis.conf 6379.conf
[root@iZ2zegc312qxcxs61cotxlZ ~]# vim /etc/redis/6379.conf
修改守護程序
#daemonize no
#修改為yes
daemonize yes #Redis預設不是以守護程序的方式運作,可以通過該配置項修改,使用yes啟用守護程序
綁定的主機位址
bind 127.0.0.1 172.17.165.245 #bind後面再添加主機的ip,後面主從複制 從Redis需要通過IP連接配接。
端口号
port 6379
開啟AOF
appendonly yes
3.修改啟動檔案
REDISPORT=6379
#EXEC=/usr/local/bin/redis-server
EXEC=/usr/local/redis-4.0.8/src/redis-server #服務端絕對位址
#CLIEXEC=/usr/local/bin/redis-cli
CLIEXEC=/usr/local/redis-4.0.8/src/redis-cli #用戶端端絕對位址
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf" #配置檔案
#CONF="/etc/redis/redis-master.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF & #背景啟動
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart) #自己添加的重新開機動選擇
if [ -f $PIDFILE ]
then
$CLIEXEC -p $REDISPORT shutdown
$EXEC $CONF
echo "Waiting for Reids is restart ..."
else
$EXEC $CONF
#echo "Please use start or stop as first argument"
echo "Waiting for Reids is restart ..."
fi
;;
esac
4.配置主從
從slave上修改配置檔案
[root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# vim /etc/redis/6379.conf
# slaveof <masterip> <masterport>
slaveof 172.17.165.245 6379
5.主master 上進行檢視狀态
[root@iZ2zegc312qxcxs61cotxlZ ~]# redis-cli
127.0.0.1:6379>info
...
# Replication
role:master #節點狀态master
connected_slaves:1 #連結slave數為1
slave0:ip=172.17.165.230,port=6379,state=online,offset=588,lag=0 #slave節點
master_replid:f7a4830f3b523187d959b4929dcb79f6cfca7c37
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:588
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:588
...
6.從slave 上進行檢視狀态
[root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# redis-cli
127.0.0.1:6379> info
...
# Replication
role:slave #節點狀态slave
master_host:172.17.165.245 #連結到master 位址為172.17.165.245
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:140
slave_priority:100
slave_read_only:1
connected_slaves:0 #連結slave的數目為0
master_replid:f7a4830f3b523187d959b4929dcb79f6cfca7c37
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140
...
7.主從同步進行測試
主master 進行設定一個鍵值:
[root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# redis-cli
127.0.0.1:6379> SET test-sync wiwiiwi20180217
OK
從slave 檢查是否已經自動同步到了從庫:
127.0.0.1:6379> get test-sync
"wiwiiwi20180217"
可以看到,資料确實是從主庫同步到了從庫。
當一個從資料庫啟動時,會向主資料庫發送SYNC指令,主資料庫收到指令後會開始在背景儲存快照(即RDB持久化過程),并将儲存快照期間接收到的指令緩存起來。當快照完成後,Redis會将快照檔案和緩存的指令發給從資料庫,從資料庫收到資料後,會載入快照檔案并執行緩存的指令。以上過程稱為複制初始化。複制初始化之結束後,主資料庫每收到寫指令時就會将指令同步給從資料庫,進而保證主從資料庫資料一緻,這一過程稱為複制同步階段。