前面的文章已經介紹了redis作為緩存資料庫的說明,本文主要說下redis主從複制及叢集管理配置的操作記錄:
Redis主從複制(目前redis僅支援主從複制模式,可以支援線上備份、讀寫分離等功能。)
1
2
3
<code>1)Redis的複制功能是支援多個資料庫之間的資料同步。一類是主資料庫(master),一類是從資料庫(slave),主資料庫可以進行讀寫操作,當發生寫操作的時候自動</code>
<code> </code><code>将資料同步到從資料庫,而從資料庫一般是隻讀的,并接收主資料庫同步過來的資料,一個主資料庫可以有多個從資料庫,而一個從資料庫隻能有一個主資料庫。</code>
<code>2)通過redis的複制功能可以很好的實作資料庫的讀寫分離,提高伺服器的負載能力。主資料庫主要進行寫操作,而從資料庫負責讀操作。</code>
Redis主從複制流程圖

複制過程:
4
<code>1)當一個從資料庫啟動時,會向主資料庫發送</code><code>sync</code><code>指令,</code>
<code>2)主資料庫接收到</code><code>sync</code><code>指令後會開始在背景儲存快照(執行rdb操作),并将儲存期間接收到的指令緩存起來</code>
<code>3)當快照完成後,redis會将快照檔案和所有緩存的指令發送給從資料庫。</code>
<code>4)從資料庫收到後,會載入快照檔案并執行收到的緩存的指令。</code>
下面簡單記錄下Redis主從複制的操作記錄:
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<code>1)機器資訊</code>
<code>Redis主從結構支援一主多從,這裡我使用一主兩從(一主一從也行,配置一樣)</code>
<code>主節點 182.48.115.236 master-node</code>
<code>從節點 182.48.115.237 slave-node1</code>
<code>從節點 182.48.115.238 slave-node2</code>
<code>關閉三個節點機的iptables防火牆和selinux</code>
<code>2)安裝redis</code>
<code>三台節點機的安裝步驟一樣</code>
<code>[root@master-node ~]</code><code># wget http://download.redis.io/redis-stable.tar.gz</code>
<code>[root@master-node ~]</code><code># tar -zvxf redis-stable.tar.gz</code>
<code>[root@master-node ~]</code><code># cd redis-stable</code>
<code>[root@master-node redis-stable]</code><code># make</code>
<code>[root@master-node redis-stable]</code><code># cd src/</code>
<code>[root@master-node src]</code><code># cp redis-server redis-cli redis-check-aof redis-check-rdb redis-sentinel redis-trib.rb /usr/local/bin/</code>
<code>然後建立目錄,存放配置檔案</code>
<code>[root@master-node src]</code><code># mkdir /etc/redis</code>
<code>[root@master-node src]</code><code># mkdir /var/redis</code>
<code>[root@master-node src]</code><code># mkdir /var/redis/log</code>
<code>[root@master-node src]</code><code># mkdir /var/redis/run</code>
<code>[root@master-node src]</code><code># mkdir /var/redis/redis</code>
<code>在redis解壓根目錄中找到配置檔案模闆</code>
<code>[root@master-node src]</code><code># cd ../</code>
<code>[root@master-node redis-stable]</code><code># cp redis.conf /etc/redis/redis.conf</code>
<code>設定啟動腳本</code>
<code>[root@master-node redis-stable]</code><code># cp utils/redis_init_script /etc/init.d/redis</code>
<code>[root@master-node redis-stable]</code><code># chmod 755 /etc/init.d/redis</code>
<code>修改腳本pid及conf路徑為實際路徑</code>
<code>[root@master-node redis-stable]</code><code># vim /etc/init.d/redis</code>
<code>......</code>
<code>REDISPORT=6379</code>
<code>EXEC=</code><code>/usr/local/bin/redis-server</code>
<code>CLIEXEC=</code><code>/usr/local/bin/redis-cli</code>
<code>PIDFILE=</code><code>/var/redis/run/redis_6379</code><code>.pid</code>
<code>CONF=</code><code>"/etc/redis/redis.conf"</code>
<code>.......</code>
<code>3)主從複制配置</code>
<code>master-node</code>
<code>[root@master-node ~]</code><code># vim /etc/redis/redis.conf</code>
<code>port 6379</code>
<code>daemonize </code><code>yes</code> <code>//</code><code>這個修改為</code><code>yes</code>
<code>bind 0.0.0.0 </code><code>//</code><code>綁定的主機位址。說明隻能通過這個ip位址連接配接本機的redis。最好綁定0.0.0.0;注意這個不能配置成127.0.0.1,否則複制會失敗!用0.0.0.0或者本機ip位址都可以</code>
<code>pidfile </code><code>/var/redis/run/redis_6379</code><code>.pid</code>
<code>logfile </code><code>/var/redis/log/redis_6379</code><code>.log</code>
<code>dir</code> <code>/var/redis/redis</code> <code>#redis資料目錄</code>
<code>....... </code>
<code>appendonly </code><code>yes</code> <code>#啟用AOF持久化方式</code>
<code>appendfilename </code><code>"appendonly.aof"</code> <code>#AOF檔案的名稱,預設為appendonly.aof</code>
<code>appendfsync everysec </code><code>#每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,是受推薦的方式。</code>
<code>.....</code>
<code>save 900 1 </code><code>#啟用RDB快照功能,預設就是啟用的</code>
<code>save 300 10</code>
<code>save 60 10000 #即在多少秒的時間内,有多少key被改變的資料添加到.rdb檔案裡</code>
<code>dbfilename dump.rdb #快照檔案名稱</code>
<code>slave-node1和slave-node2兩個從節點相比于master-node主節點的redis.conf配置,隻是多了下面一行配置,其它都一樣:</code>
<code>slaveof 182.48.115.236 6379</code>
<code>啟動三個節點的redis(啟動指令一樣)</code>
<code>[root@master-node ~]</code><code># /etc/init.d/redis start</code>
<code>Starting Redis server...</code>
<code>[root@master-node ~]</code><code># lsof -i:6379</code>
<code>COMMAND PID USER FD TYPE DEVICE SIZE</code><code>/OFF</code> <code>NODE NAME</code>
<code>redis-ser 10475 root 4u IPv4 88640 0t0 TCP localhost:6379 (LISTEN)</code>
<code>登陸主節點master-node的redis,檢視狀态</code>
<code>[root@master-node ~]</code><code># redis-cli -h 127.0.0.1 -p 6379 //使用182.48.115.236也可以登入,或者直接使用redis-cli也可以登入</code>
<code>127.0.0.1:6379> info</code>
<code># Replication</code>
<code>role:master </code><code>//</code><code>節點在叢集中的狀态</code>
<code>connected_slaves:2 </code><code>//slave</code><code>節點的個數</code>
<code>slave0:ip=182.48.115.238,port=6379,state=online,offset=1,lag=1</code>
<code>slave1:ip=182.48.115.237,port=6379,state=online,offset=1,lag=1</code>
<code>........</code>
<code>登入從節點slave-node1的redis,檢視狀态</code>
<code>[root@slave-node1 ~]</code><code># redis-cli -h 127.0.0.1 -p 6379</code>
<code>role:slave</code>
<code>master_host:182.48.115.236</code>
<code>master_port:6379</code>
<code>master_link_status:up</code>
<code>登入從節點slave-node2的redis,檢視狀态</code>
<code>[root@slave-node2 ~]</code><code># redis-cli -h 127.0.0.1 -p 6379</code>
<code>4)測試資料同步</code>
<code>主節點master-node上寫入新資料</code>
<code>[root@master-node ~]</code><code># redis-cli -h 127.0.0.1 -p 6379</code>
<code>127.0.0.1:6379> </code><code>set</code> <code>name wangshibo</code>
<code>OK</code>
<code>127.0.0.1:6379> get name</code>
<code>"wangshibo"</code>
<code>然後到兩台從節點上檢視是否同步了上面寫入的資料</code>
<code>redis主從複制預設是讀寫分離的,即:</code>
<code>主節點上可以讀寫操作;從節點上隻能進行讀操作,不能寫資料</code>
<code>127.0.0.1:6379> </code><code>set</code> <code>name huanqiu</code>
<code>(error) READONLY You can't write against a </code><code>read</code> <code>only slave.</code>
<code>5)主從切換</code>
<code>5.1)停止主節點master-node的redis</code>
<code>[root@master-node ~]</code><code># redis-cli -h 127.0.0.1 -p 6379 shutdown</code>
<code>Could not connect to Redis at 127.0.0.1:6379: Connection refused</code>
<code>将從節點slave-node1的redis設成主redis</code>
<code>[root@slave-node1 ~]</code><code># redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE //這條命了隻是臨時将該節點設定為主節點;當redis重新開機後,就會失效;可以登入redis,通過info資訊檢視!</code>
<code>[root@slave-node1 ~]</code><code># redis-cli -h 127.0.0.1 -p 6379 //變為主redis後,slave-node1就可以進行寫入操作了</code>
<code>role:master </code><code>//</code><code>可知已經變成master主節點了</code>
<code>connected_slaves:0</code>
<code>master_repl_offset:0</code>
<code>這時候master-node節點已經故障了,而另一個從節點slave-node2還跟它有主從關系。此時slave-node1已經變成主redis了,是以可以将slave-node2的主從關系中的主節點</code>
<code>配置修改為slave-node1(即182.48.115.237)</code>
<code>5.2)原來的主redis恢複正常了,要重新切換回去</code>
<code>比如原來的主redis節點master-node現在恢複了</code>
<code>role:master </code><code>//</code><code>原來的主節點恢複了,發現隻有一個從節點save-node2。另一個從節點slave-node1在master-node故障期間臨時變為主節點</code>
<code>connected_slaves:1 </code>
<code>slave0:ip=182.48.115.238,port=6379,state=online,offset=1,lag=0</code>
<code>那麼現在要重新将主節點切換回去。步驟如下:</code>
<code>a)登入臨時切換的主節點slave-node1</code>
<code>127.0.0.1:6379> </code><code>set</code> <code>name hahahha</code>
<code>"hahahha"</code>
<code>127.0.0.1:6379> save </code><code>//</code><code>将資料儲存</code>
<code>b)将現在的主redis(即slave-node1節點,臨時設定的主節點)根目錄下app檔案和dump.rdb檔案拷貝覆寫到原來主redis的根目錄(覆寫前将原來主redis下的持久化檔案備份下)</code>
<code>[root@slave-node1 ~]</code><code># rsync -e "ssh -p22" -avpgolr /var/redis/redis/dump.rdb 182.48.115.236:/var/redis/redis/</code>
<code>[root@slave-node1 ~]</code><code># rsync -e "ssh -p22" -avpgolr /var/redis/redis/appendonly.aof 182.48.115.236:/var/redis/redis/</code>
<code>c)重新開機原來的主redis(即master-node節點)</code>
<code>[root@master-node ~]</code><code># /etc/init.d/redis stop</code>
<code>d)在現在的主redis(即slave-node1)中切換(或者直接重新開機該節點的redis,因為redis.conf檔案中已經配置了;如果不想重新開機redis,就使用下面的指令)</code>
<code>[root@slave-node1 ~]</code><code># redis-cli -h 127.0.0.1 -p 6379 slaveof 182.48.115.236 6379</code>
<code>e)登入原來的主redis(也就是master-node)檢視</code>
<code>role:master</code>
<code>connected_slaves:2</code>
<code>slave0:ip=182.48.115.237,port=6379,state=online,offset=1,lag=0</code>
<code>slave1:ip=182.48.115.238,port=6379,state=online,offset=1,lag=0</code>
<code>master_repl_offset:1</code>
<code>------------------------------------------------------------------------------------------------------------------</code>
<code>注意事項</code>
<code>如果使用主從複制,那麼要確定你的master激活了持久化,或者確定它不會在當掉後自動重新開機,原因:</code>
<code>a)slave是master的完整備份,是以如果master通過一個空資料集重新開機,slave也會被清掉。</code>
<code>b)在配置redis複制功能的時候,如果主資料庫設定了密碼,需要在從資料的配置檔案中通過masterauth參數設定主資料庫的密碼,這樣從資料庫在連接配接</code>
<code> </code><code>主資料庫時就會自動使用auth指令認證了。相當于做了一個免密碼登入。(我上面的例子中沒有設定密碼)</code>
Redis的主從自動切換(failover)可以通過Redis自帶的Sentinel工具來實作(具體操作這裡就先不介紹了)。redis的sentinel系統用于管理多個redis伺服器,
該系統主要執行三個任務:監控、提醒、自動故障轉移。
1)監控(Monitoring): Redis Sentinel實時監控主伺服器和從伺服器運作狀态,并且實作自動切換。
2)提醒(Notification):當被監控的某個 Redis 伺服器出現問題時, Redis Sentinel 可以向系統管理者發送通知, 也可以通過 API 向其他程式發送通知。
3)自動故障轉移(Automatic failover): 當一個主伺服器不能正常工作時,Redis Sentinel 可以将一個從伺服器更新為主伺服器, 并對其他從伺服器進行配置,
讓它們使用新的主伺服器。當應用程式連接配接Redis 伺服器時, Redis Sentinel會告之新的主伺服器位址和端口。
注意:
在使用sentinel監控主從節點的時候,從節點需要是使用動态方式配置的,如果直接修改配置檔案,後期sentinel實作故障轉移的時候會出問題。
------------------------------------------------------------------------------------------------------------------------------------------------
Redis預設隻支援主從模式,不支援主主模式,可以使用SSDB主主模式代替Redis實作主主同步環境。SSDB是一個快速的用來存儲十億級别清單資料的開源 NoSQL 資料庫。支援Key-value, Keyhashmap, Key-zset(sorted set) 等資料結構,十分适合存儲數億條級别的清單, 排序表等集合資料, 是Redis的替代和增強方案。
SSDB特性:
<code>1)替代 Redis 資料庫, Redis 的100倍容量</code>
<code>2)LevelDB 網絡支援, 使用C</code><code>/C</code><code>++ 開發</code>
<code>3)Redis API 相容, 支援 Redis 用戶端</code>
<code>4)适合存儲集合資料, 如 list, </code><code>hash</code><code>, zset...</code>
<code>5)用戶端 API 支援的語言包括: C++, PHP, Python,Cpy,Java,Nodejs,Ruby, Go等</code>
<code>6)持久化的隊列服務</code>
<code>7)主從複制,支援雙主(雙master)和多主架構, 負載均衡</code>
<code>8)圖形化管理工具(phpssdbadmin)</code>
SSDB的主從同步政策非常簡單, 就是把主(Master)上的所有寫操作(Binlogs), 在從(Slave)上再執行一遍. MySQL 的主從同步也是一樣. 而多主可以了解為互為主從.
SSDB的雙主和多主配置
SSDB 資料庫是支援雙主(雙 Master)和多主架構的. 而且, 我們的應用也是部署雙主架構, 但當作單主來用. 也就是說, 平時隻往其中一個寫, 當出現故障時, 整體切換到另一個主上面. 如果應用層已經解決了資料拆分, 也即不會兩個節點同時操作一個 key, 那麼就可以放心使用雙主同時寫入.
SSDB 雙主的配置非常簡單:
server1伺服器
<code>replication:</code>
<code> </code><code>slaveof:</code>
<code> </code><code>id</code><code>: svc_2</code>
<code> </code><code># sync|mirror, default is sync</code>
<code> </code><code>type</code><code>: mirror</code>
<code> </code><code>ip: 192.168.1.10</code>
<code> </code><code>port: 8888</code>
server2伺服器
<code> </code><code>id</code><code>: svc_1</code>
<code> </code><code>ip: 192.168.1.11</code>
隻需要将type設定為mirror, 然後每個節點各指向對方即可。如果是多主, 則每個節點要指向其它 n-1 個節點。
SSDB 主主同步模式部署記錄
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
<code>SSDB主主模式的部署記錄:</code>
<code> </code>
<code>182.48.115.236 master-node1</code>
<code>182.48.115.237 master-node2</code>
<code>1)安裝SSDB(在兩個節點機上安裝步驟一樣,如下)</code>
<code>[root@master-node1 ~]</code><code># mkdir -p /home/slim/ssdb</code>
<code>[root@master-node1 ~]</code><code># wget https://github.com/ideawu/ssdb/archive/master.zip</code>
<code>[root@master-node1 ~]</code><code># unzip master.zip</code>
<code>[root@master-node1 ~]</code><code># cd ssdb-master/</code>
<code>[root@master-node1 ssdb-master]</code><code># make PREFIX=/home/slim/ssdb</code>
<code>[root@master-node1 ssdb-master]</code><code># make PREFIX=/home/slim/ssdb install</code>
<code>2)主主模式配置</code>
<code>master-node1節點上的配置</code>
<code>[root@master-node1 ~]</code><code># cd /home/slim/ssdb/</code>
<code>[root@master-node1 ssdb]</code><code># cp ssdb.conf ssdb.conf.bak</code>
<code>[root@master-node1 ssdb]</code><code># vim ssdb.conf</code>
<code># ssdb-server config</code>
<code># MUST indent by TAB!</code>
<code># relative to path of this file, directory must exists</code>
<code>work_dir = .</code><code>/var</code>
<code>pidfile = .</code><code>/var/ssdb</code><code>.pid</code>
<code>server:</code>
<code> </code><code>ip: 182.48.115.236</code>
<code> </code><code>port: 8888</code>
<code> </code><code># bind to public ip</code>
<code> </code><code>#ip: 0.0.0.0</code>
<code> </code><code># format: allow|deny: all|ip_prefix</code>
<code> </code><code># multiple allows or denys is supported</code>
<code> </code><code>#deny: all</code>
<code> </code><code>#allow: 127.0.0.1</code>
<code> </code><code>#allow: 192.168</code>
<code> </code><code># auth password must be at least 32 characters</code>
<code> </code><code>#auth: very-strong-password</code>
<code> </code><code>#readonly: yes</code>
<code> </code><code>binlog: </code><code>yes</code>
<code> </code><code># Limit sync speed to *MB/s, -1: no limit</code>
<code> </code><code>sync_speed: -1</code>
<code> </code><code># to identify a master even if it moved(ip, port changed)</code>
<code> </code><code># if set to empty or not defined, ip:port will be used.</code>
<code> </code><code>host: 182.48.115.237</code>
<code>logger:</code>
<code> </code><code>level: debug</code>
<code> </code><code>output: log.txt</code>
<code> </code><code>rotate:</code>
<code> </code><code>size: 1000000000</code>
<code>leveldb:</code>
<code> </code><code># in MB</code>
<code> </code><code>cache_size: 500</code>
<code> </code><code>write_buffer_size: 64</code>
<code> </code><code># in MB/s</code>
<code> </code><code>compaction_speed: 1000</code>
<code> </code><code># yes|no</code>
<code> </code><code>compression: </code><code>yes</code>
<code>master-node2節點上的配置</code>
<code>[root@master-node2 ~]</code><code># cd /home/slim/ssdb/</code>
<code>[root@master-node2 ssdb]</code><code># cp ssdb.conf ssdb.conf.bak</code>
<code>[root@master-node2 ssdb]</code><code># vim ssdb.conf</code>
<code> </code><code>ip: 182.48.115.237</code>
<code> </code><code>host: 182.48.115.236</code>
<code>3)啟動服務(兩節點啟動指令一樣)</code>
<code>[root@master-node1 ~]</code><code># /home/slim/ssdb/ssdb-server -d /home/slim/ssdb/ssdb.conf</code>
<code>ssdb-server 1.9.4</code>
<code>Copyright (c) 2012-2015 ssdb.io</code>
<code>[root@master-node1 ~]</code><code># ps -ef|grep ssdb</code>
<code>root 23803 1 0 21:05 ? 00:00:00 </code><code>/home/slim/ssdb/ssdb-server</code> <code>-d </code><code>/home/slim/ssdb/ssdb</code><code>.conf</code>
<code>root 23819 23719 0 21:05 pts</code><code>/0</code> <code>00:00:00 </code><code>grep</code> <code>ssdb</code>
<code>.........................................................................................................</code>
<code>關閉指令:</code>
<code>/home/slim/ssdb/ssdb-server</code> <code>/home/slim/ssdb/ssdb</code><code>.conf -s stop</code>
<code>幫忙指令</code>
<code>/home/slim/ssdb/ssdb-server</code> <code>-h</code>
<code>4)資料同步測試</code>
<code>在master-node1節點上寫入資料</code>
<code>[root@master-node1 ~]</code><code># /home/slim/ssdb/ssdb-cli -h 182.48.115.236 -p 8888</code>
<code>ssdb (cli) - ssdb </code><code>command</code> <code>line tool.</code>
<code>Copyright (c) 2012-2016 ssdb.io</code>
<code>'h'</code> <code>or </code><code>'help'</code> <code>for</code> <code>help, </code><code>'q'</code> <code>to quit.</code>
<code>ssdb 182.48.115.236:8888> </code><code>set</code> <code>name wangshibo</code>
<code>ok</code>
<code>(0.001 sec)</code>
<code>ssdb 182.48.115.236:8888> get name</code>
<code>wangshibo</code>
<code>ssdb 182.48.115.236:8888></code>
<code>在master-node2節點上檢視:</code>
<code>[root@master-node2 ~]</code><code># /home/slim/ssdb/ssdb-cli -h 182.48.115.237 -p 8888</code>
<code>ssdb 182.48.115.237:8888> get name</code>
<code>同理,在master-node2節點上寫入資料</code>
<code>ssdb 182.48.115.237:8888> </code><code>set</code> <code>huanqiutest hahahah</code>
<code>ssdb 182.48.115.237:8888></code>
<code>然後在另一台master-node1節點上檢視</code>
<code>ssdb 182.48.115.236:8888> get huanqiutest</code>
<code>hahahah</code>
<code>以上說明ssdb主主同步環境已經實作!</code>
<code>..............................................................................</code>
<code>ssdb服務監控</code>
<code>info 指令傳回的資訊</code>
<code>ssdb 182.48.115.236:8888> info</code>
<code>replication</code>
<code> </code><code>client 182.48.115.237:56014</code>
<code> </code><code>type</code> <code>: mirror</code>
<code> </code><code>status : SYNC</code>
<code> </code><code>last_seq : 3</code>
<code> </code><code>slaveof 182.48.115.237:8888</code>
<code> </code><code>id</code> <code>: svc_1</code>
<code> </code><code>type</code> <code>: mirror</code>
<code> </code><code>status : SYNC</code>
<code> </code><code>last_seq : 2</code>
<code> </code><code>copy_count : 1</code>
<code> </code><code>sync_count : 1</code>
<code>.........</code>
<code>ssdb 182.48.115.237:8888> info</code>
<code> </code><code>client 182.48.115.236:50210</code>
<code> </code><code>last_seq : 2</code>
<code> </code><code>slaveof 182.48.115.236:8888</code>
<code> </code><code>id</code> <code>: svc_2</code>
<code> </code><code>last_seq : 3</code>
<code> </code><code>sync_count : 0</code>
<code>............................................................................</code>
<code>info指令後的消息參數解釋:</code>
<code>1)binlogs</code>
<code>目前執行個體的寫操作狀态.</code>
<code>capacity: binlog 隊列的最大長度</code>
<code>min_seq: 目前隊列中的最小 binlog 序号</code>
<code>max_seq: 目前隊列中的最大 binlog 序号</code>
<code>2)replication</code>
<code>可以有多條 replication 記錄. 每一條表示一個連接配接進來的 slave(client), 或者一個目前伺服器所連接配接的 master(slaveof).</code>
<code>slaveof|client ip:port, 遠端 master</code><code>/slave</code> <code>的 ip:port。</code>
<code>type</code><code>: 類型, </code><code>sync</code><code>|mirror.</code>
<code>status: 目前同步狀态, DISCONNECTED|INIT|OUT_OF_SYNC|COPY|SYNC。</code>
<code>last_seq: 上一條發送或者收到的 binlog 的序号。</code>
<code>slaveof.</code><code>id</code><code>: master 的 </code><code>id</code><code>(這是從 slave's 角度來看的, 你永遠不需要在 master 上配置它自己的 </code><code>id</code><code>)。</code>
<code>slaveof.copy_count: 在全量同步時, 已經複制的 key 的數量。</code>
<code>slaveof.sync_count: 發送或者收到的 binlog 的數量。</code>
<code>3)關于 status:</code>
<code>DISCONNECTED: 與 master 斷開了連接配接, 一般是網絡中斷。</code>
<code>INIT: 初始化狀态。</code>
<code>OUT_OF_SYNC: 由于短時間内在 master 有大量寫操作, 導緻 binlog 隊列淘汰, slave 丢失同步點, 隻好重新複制全部的資料。</code>
<code>COPY: 正在複制基準資料的過程中, 新的寫操作可能無法及時地同步。</code>
<code>SYNC: 同步狀态是健康的.</code>
<code>4)判斷同步狀态</code>
<code>binlogs.max_seq 是指目前執行個體上的最新一次的寫(寫/更新/删除)操作的序号, replication.client.last_seq 是指已發送給 slave 的最新一條 binlog 的序号。是以, 如果你想判斷主從同步是否已經同步到位(實時更新), 那麼就判斷 binlogs.max_seq 和 replication.client.last_seq 是否相等。</code>
<code>---------------------SSDB備份與恢複----------------------</code>
<code>1)備份</code>
<code>支援了線上備份功能, 可以在不停止服務的情況下備份伺服器資料,這個功能讓 SSDB 更加成為一個真正生産環境的存儲伺服器。</code>
<code>[root@master-node1 ~]</code><code># /home/slim/ssdb/ssdb-dump 182.48.115.237 8888 ./backup_dir</code>
<code>這條指令從監聽在182.48.115.237:8888 的SSDB伺服器上備份全量的資料, 儲存到本地新建立的目錄 backup_dir, 這個目錄其實是一個 LevelDB 的資料庫(db)。</code>
<code>2)恢複</code>
<code>将 backup_dir 傳輸到伺服器, 修改新ssdb伺服器的配置檔案, 将 SSDB 使用的資料庫名改為 backup_dir, 然後重新開機 SSDB 即可。</code>
<code>3)使用主從(Master-Slave)架構實時備份</code>
<code>注意:</code>
<code>a)一般, 建議你将 logger.level 設定為 debug 級别。詳情參考:日志解讀</code>
<code>b)利用配置檔案的 deny, allow 指令限制可信的來源 IP 通路,提高服務的安全。</code>
<code>c)SSDB 的配置檔案使用一個 TAB 來表示一級縮進, 不要使用空格來縮進, 無論你用2個, 3個, 4個, 或者無數個空格都不行!</code>
<code>d)一定要記得修改你的 Linux 核心參數, 關于 max </code><code>open</code> <code>files(最大檔案描述符數)的内容,詳情參考:建構C1000K的伺服器</code>
***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************
本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/5685394.html,如需轉載請自行聯系原作者