1. 程式人生 > >centos6.8 安裝redis 4.0 搭建主從

centos6.8 安裝redis 4.0 搭建主從

entos 取數 cas ras isp role while tar.gz con

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會將快照文件和緩存的命令發給從數據庫,從數據庫收到數據後,會載入快照文件並執行緩存的命令。以上過程稱為復制初始化。復制初始化之結束後,主數據庫每收到寫命令時就會將命令同步給從數據庫,從而保證主從數據庫數據一致,這一過程稱為復制同步階段。

centos6.8 安裝redis 4.0 搭建主從