redis主從複製搭建

環境背景

centos 6.5
redis 4.0.14

注意:redis不同版本,配置文件裏面命令不一樣

節點信息

master
node01 192.168.71.101 6379
slave1
node02 192.168.71.102 6379
slave2
node03 192.168.71.103 6379

安裝redis

我是把redis安裝在opt目錄,安裝過程很簡單,分下載解壓和編譯具體命令如下

cd /opt
//下載安裝
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar zxvf redis-4.0.14.tar.gz
//重命名
mv redis-4.0.14 redis
//編譯
cd redis/src
make

如果編譯報錯,根據報錯日誌需要安裝gcc,用一下命令

yum install gcc -y

安裝完再執行編譯make,如果還報 Newer version of jemalloc required,再執行下面命令

make MALLOC=libc

如果海報 You need tcl 8.5 or newer in order to run the Redis test,就再安裝tcl

yum install tcl -y

至此redis已經就緒準備客戶端的連接,當然此時的redis是沒有設置密碼的,如果你想設置密碼,可以修改

redis.conf文件requirepass 後面就是你的密碼值。比如我設置爲123456,現在開啓redis,並用redis-cli連接

[root@node01 ~]# cd /opt/redis/src
[root@node01 src]# ./redis-server ../redis.conf 
[root@node01 src]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379>

用同樣的步驟在node02和node03節點都裝上redis。

搭建主從

master

打開master節點也就是node01的redis.conf配置文件,需要修改以下幾處

開啓守護進程

daemonize yes

關閉保護模式

protected-mode no

允許其他服務器訪問

bind 0.0.0.0

打開端口,我這裏簡單粗暴直接關閉防火牆

service iptables stop
slave

打開node02和node03的redis.conf配置文件,需要修改以下幾處

開啓守護進程

daemonize yes

關閉保護模式

protected-mode no

指定master

slaveof 192.168.101 6379

這裏說明以下我的redis是4X版本,命令是slaveof ,redis 5X版本後是replicaof所以redis版本一定要指定

指定master密碼(如果master節點沒有設置密碼,可省略)

masterauth 123456

驗證階段

開啓master然後開啓slave節點的redis服務,成功後用redis-cli連接master用info replication查看

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.71.103,port=6379,state=online,offset=19699,lag=1
slave1:ip=192.168.71.102,port=6379,state=online,offset=19699,lag=0
master_replid:86456c0c31afb5ae304dc58fe336c2cc7166ee0b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:19699
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:19699
127.0.0.1:6379> 

去slave節點查看

[root@node02 src]# ./redis-server ../redis.conf 
[root@node02 src]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.71.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:19895
slave_priority:100
slave_read_only:0
connected_slaves:0
master_replid:86456c0c31afb5ae304dc58fe336c2cc7166ee0b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:19895
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:19895
127.0.0.1:6379> 

如果master_link_status狀態是down,自己檢查一下redis日誌,很可能是你master節點沒有很好執行我上面的bind 0.0.0.0 和開啓6379端口。不信你可以用telnet 192.168.71.101 6379試試看。

如果你的master_link_status狀態跟我一樣是up,那麼恭喜你,redis主從複製搭建你已經成功完成了,是不是很簡單哈哈。

回到正題,我們知道redis從節點會通過增量或者快照的方式同步master節點的數據。我們測試一下,去master節點設置一些key值,看從節點有沒有同步過來。

[root@node01 src]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set hello redis
OK
127.0.0.1:6379> 

我們在master節點設置hello 值爲redis,再去從節點看看有沒有hello這個值

[root@node02 src]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "hello"
127.0.0.1:6379> get hello
"redis"
127.0.0.1:6379> 

另外一臺也是一樣

[root@node03 redis]# cd src
[root@node03 src]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "hello"
127.0.0.1:6379> get hello
"redis"
127.0.0.1:6379>

完結撒花!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章