天天看點

keepalived安裝和測試

1

2

3

4

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

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

<code>我的部落格已遷移到xdoujiang.com請去那邊和我交流</code>

<code>keepalived使用純C語言寫成。軟體圍繞中心的I</code><code>/O</code><code>多路複用器設計提供實時的網絡。</code>

<code>它的設計重點是在各個元素之間實作子產品化,為了保證穩定性和健壯性,守護程序被分成三個獨立的程序。</code>

<code>整體設計基于一個簡單的父程序,父程序負責fork并監控子程序。兩個子程序,一個負責VRRP架構,</code>

<code>另一個負責健康檢查。每個子程序有自己的I</code><code>/O</code><code>排程多路複用器,這樣可以優化VRRP排程,因為VRRP</code>

<code>排程比健康檢查更敏感。另一方面,這個分開的設計使得健康檢查機制對外部函數庫的使用最小化,</code>

<code>最小化自身的動作并且讓主循環空閑來避免自身引起的故障。父程序的監控架構叫做watchdog,</code>

<code>它的設計是:每個子程序打開一個UNIX套接字等待請求,當守護程序啟動後,</code>

<code>父程序連接配接這些UNIX套接字并周期性(5s)地發送hello包到子程序。如果父程序無法發送hello包到遠端連接配接的UNIX套機字,</code>

<code>它會簡單地重新開機子程序。watchdog的設計有兩個好處,首先hello包從父程序發送到遠端連接配接的子程序是通過I</code><code>/O</code><code>多路複用器排程,</code>

<code>這樣它就能夠檢測子程序排程架構中的死循環。第二個好處是可以使用sysV信号檢測子程序是否死掉。</code>

<code>測試當serverA機器重新開機後,虛IP漂移到serverB充當master角色,就是說serverA重新開機後不搶占。</code>

<code>一、基礎環境</code>

<code>1、角色、ip、版本、核心</code>

<code>masterA 10.1.10.117 3.2.0-4-amd64 7.8 keepaliaved</code>

<code>serverB 10.1.10.185 3.2.0-4-amd64 7.8 keepaliaved</code>

<code>二、安裝keepalived</code>

<code>1、apt方式安裝keepalived服務(serverA serverB)</code>

<code>apt-get -y </code><code>install</code> <code>keepalived --force-</code><code>yes</code>

<code>2、修改master</code><code>/slave</code><code>配置(serverA serverB)</code>

<code>1)master 建立keepalived.conf并添加以下内容</code>

<code>cat</code> <code>/etc/keepalived/keepalived</code><code>.conf </code>

<code>global_defs</code>

<code>{</code>

<code>router_id aaa</code>

<code>}</code>

<code>vrrp_instance VI_1</code>

<code>state BACKUP</code>

<code>interface eth0</code>

<code>virtual_router_id 90</code>

<code>nopreempt</code>

<code>priority 100</code>

<code>advert_int 1</code>

<code>virtual_ipaddress</code>

<code>10.1.10.240</code><code>/24</code>

<code>2)slave 建立keepalived.conf并添加以下内容</code>

<code>router_id bbb</code>

<code>priority 99</code>

<code>PS:配置說明</code>

<code>state              </code><code>#MASTER是主伺服器,BACKUP是備伺服器。</code>

<code>virtual_ipaddress  </code><code>#設定虛拟IP位址,也叫漂移IP位址。</code>

<code>priority           </code><code>#值越大優先級越高,主的值在設定上大于備的值</code>

<code>nopreempt          </code><code>#不搶占(僅配置在state BACKUP時有效 并且這個機器的優先級必須比另一台高)</code>

<code>virtual_router_id  </code><code>#取值範圍是1-255(must be between 1 &amp; 255)</code>

<code>advert_int         </code><code>#MASTER和BACKUP之間同步檢查的時間間隔(s)</code>

<code>3、自定義日志存放地方(不定義的話預設是在</code><code>/var/log/messages</code><code>)(serverA serverB)</code>

<code>1)添加以下内容</code>

<code>echo</code> <code>"local3.*                        /var/log/keepalived"</code> <code>&gt;&gt; </code><code>/etc/rsyslog</code><code>.conf</code>

<code>2)重新開機下rsyslog服務</code>

<code>/etc/init</code><code>.d</code><code>/rsyslog</code> <code>restart</code>

<code>[ ok ] Stopping enhanced syslogd: rsyslogd.</code>

<code>[ ok ] Starting enhanced syslogd: rsyslogd.</code>

<code>4、啟動服務(serverA serverB)</code>

<code>keepalived -d -D -S 3 -f </code><code>/etc/keepalived/keepalived</code><code>.conf</code>

<code>PS:啟動參數說明</code>

<code>--use-</code><code>file</code><code>, -f keepalived.conf_file Use the specified configuration </code><code>file</code><code>.</code>

<code>--dump-conf, -d Dump the configuration data.</code>

<code>--log-detail, -D Detailed log messages (the default with the rc script provided).</code>

<code>--log-facility, -S 0-7 Set syslog facility to LOG_LOCAL[0-7] (default=LOG_DAEMON)</code>

<code>5、檢視程序(serverA serverB)</code>

<code>ps</code> <code>aux |</code><code>grep</code> <code>keepalived |</code><code>grep</code> <code>-</code><code>v</code> <code>grep</code>

<code>root       2944  0.0  0.3  21984   796 ?        Ss   16:44   0:00 keepalived -d -D -S 3 -f </code><code>/etc/keepalived/keepalived</code><code>.conf</code>

<code>root       2945  0.0  0.9  30520  2160 ?        S    16:44   0:00 keepalived -d -D -S 3 -f </code><code>/etc/keepalived/keepalived</code><code>.conf</code>

<code>root       2946  0.0  0.6  30396  1468 ?        S    16:44   0:00 keepalived -d -D -S 3 -f </code><code>/etc/keepalived/keepalived</code><code>.conf</code>

<code>6、檢視相關日志檔案(serverA serverB)</code>

<code>ll </code><code>/var/log/keepalived</code>

<code>-rw-r----- 1 root adm 4215 Sep 22 16:44 </code><code>/var/log/keepalived</code>

<code>7、檢視啟動日志(serverA serverB)</code>

<code>1)</code><code>cat</code> <code>/var/log/keepalived</code>

<code>Sep 22 16:44:12 debian Keepalived: Starting Keepalived v1.2.2 (12</code><code>/18</code><code>,2011)</code>

<code>Sep 22 16:44:12 debian Keepalived: Remove a zombie pid </code><code>file</code> <code>/var/run/keepalived</code><code>.pid</code>

<code>Sep 22 16:44:12 debian Keepalived: Remove a zombie pid </code><code>file</code> <code>/var/run/vrrp</code><code>.pid</code>

<code>Sep 22 16:44:12 debian Keepalived: Remove a zombie pid </code><code>file</code> <code>/var/run/checkers</code><code>.pid</code>

<code>Sep 22 16:44:12 debian Keepalived: Starting Healthcheck child process, pid=2945</code>

<code>Sep 22 16:44:12 debian Keepalived: Starting VRRP child process, pid=2946</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Netlink reflector reports IP 10.1.10.117 added</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Netlink reflector reports IP 10.1.10.240 added</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Netlink reflector reports IP fe80::20c:29ff:fec8:87a1 added</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Registering Kernel netlink reflector</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Registering Kernel netlink </code><code>command</code> <code>channel</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Registering gratutious ARP shared channel</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Initializing ipvs 2.6</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Initializing ipvs 2.6</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Opening </code><code>file</code> <code>'/etc/keepalived/keepalived.conf'</code><code>.</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Netlink reflector reports IP 10.1.10.117 added</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Netlink reflector reports IP 10.1.10.240 added</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Netlink reflector reports IP fe80::20c:29ff:fec8:87a1 added</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Registering Kernel netlink reflector</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Registering Kernel netlink </code><code>command</code> <code>channel</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Opening </code><code>file</code> <code>'/etc/keepalived/keepalived.conf'</code><code>.</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: VRRP is trying to assign invalid VIP {. skipping VIP...</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Configuration is using : 60186 Bytes</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: ------&lt; Global definitions &gt;------</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:  Router ID = aaa</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:  Smtp server connection timeout = 30</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:  Email notification from = root@debian</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: ------&lt; VRRP Topology &gt;------</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:  VRRP Instance = VI_1</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Want State = MASTER</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Runing on device = eth0</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Virtual Router ID = 90</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Priority = 100</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Advert interval = 1sec</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Preempt disabled</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:    Virtual IP = 1</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp:      10.1.10.240</code><code>/24</code> <code>dev eth0 scope global</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: Using LinkWatch kernel netlink reflector...</code>

<code>Sep 22 16:44:12 debian Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(10,11)]</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Configuration is using : 5509 Bytes</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: ------&lt; Global definitions &gt;------</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers:  Router ID = aaa</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers:  Smtp server connection timeout = 30</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers:  Email notification from = root@debian</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: ------&lt; SSL definitions &gt;------</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers:  Using autogen SSL context</code>

<code>Sep 22 16:44:12 debian Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...</code>

<code>Sep 22 16:44:13 debian Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE</code>

<code>Sep 22 16:44:14 debian Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE</code>

<code>Sep 22 16:44:14 debian Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.</code>

<code>Sep 22 16:44:14 debian Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 </code><code>for</code> <code>10.1.10.240</code>

<code>Sep 22 16:44:19 debian Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 </code><code>for</code> <code>10.1.10.240</code>

<code>2)</code><code>cat</code> <code>/var/log/keepalived</code>

<code>Sep 22 16:51:31 debian Keepalived: Starting Keepalived v1.2.2 (12</code><code>/18</code><code>,2011)</code>

<code>Sep 22 16:51:31 debian Keepalived: Starting Healthcheck child process, pid=2414</code>

<code>Sep 22 16:51:31 debian Keepalived: Starting VRRP child process, pid=2415</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Netlink reflector reports IP 10.1.10.185 added</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Netlink reflector reports IP fe80::20c:29ff:fe1c:c991 added</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Registering Kernel netlink reflector</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Initializing ipvs 2.6</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Registering Kernel netlink </code><code>command</code> <code>channel</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Registering gratutious ARP shared channel</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Initializing ipvs 2.6</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: IPVS: Cant initialize ipvs: Protocol not available</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Netlink reflector reports IP 10.1.10.185 added</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Netlink reflector reports IP fe80::20c:29ff:fe1c:c991 added</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Registering Kernel netlink reflector</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Registering Kernel netlink </code><code>command</code> <code>channel</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Opening </code><code>file</code> <code>/etc/keepalived/keepalived</code><code>.conf.</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Configuration is using : 5355 Bytes</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Opening </code><code>file</code> <code>/etc/keepalived/keepalived</code><code>.conf.</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: VRRP is trying to assign invalid VIP {. skipping VIP...</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Configuration is using : 60164 Bytes</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: ------&lt; Global definitions &gt;------</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:  Router ID = bbb</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:  Smtp server connection timeout = 30</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:  Email notification from = root@debian</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: ------&lt; VRRP Topology &gt;------</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:  VRRP Instance = VI_1</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Want State = BACKUP</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Runing on device = eth0</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Virtual Router ID = 90</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Priority = 99</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Advert interval = 1sec</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:    Virtual IP = 1</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp:      10.1.10.240</code><code>/24</code> <code>dev eth0 scope global</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: Using LinkWatch kernel netlink reflector...</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE</code>

<code>Sep 22 16:51:31 debian Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(11,12)]</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: ------&lt; Global definitions &gt;------</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers:  Router ID = bbb</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers:  Smtp server connection timeout = 30</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers:  Email notification from = root@debian</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: ------&lt; SSL definitions &gt;------</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers:  Using autogen SSL context</code>

<code>Sep 22 16:51:31 debian Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...</code>

<code>8、使用ip指令檢視(serverA serverB)</code>

<code>1)使用ip a指令檢視</code>

<code>ip a </code>

<code>1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 16436 qdisc noqueue state UNKNOWN </code>

<code>    </code><code>link</code><code>/loopback</code> <code>00:00:00:00:00:00 brd 00:00:00:00:00:00</code>

<code>    </code><code>inet 127.0.0.1</code><code>/8</code> <code>scope host lo</code>

<code>    </code><code>inet6 ::1</code><code>/128</code> <code>scope host </code>

<code>       </code><code>valid_lft forever preferred_lft forever</code>

<code>2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:c8:87:a1 brd ff:ff:ff:ff:ff:ff</code>

<code>    </code><code>inet 10.1.10.117</code><code>/24</code> <code>brd 10.1.10.255 scope global eth0</code>

<code>    </code><code>inet 10.1.10.240</code><code>/24</code> <code>scope global secondary eth0</code>

<code>    </code><code>inet6 fe80::20c:29ff:fec8:87a1</code><code>/64</code> <code>scope link </code>

<code>2)使用ip a指令檢視</code>

<code>ip a</code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:1c:c9:91 brd ff:ff:ff:ff:ff:ff</code>

<code>    </code><code>inet 10.1.10.185</code><code>/24</code> <code>brd 10.1.10.255 scope global eth0</code>

<code>    </code><code>inet6 fe80::20c:29ff:fe1c:c991</code><code>/64</code> <code>scope link </code>

<code>       </code><code>valid_lft forever preferred_lft forever       </code>

<code>       </code> 

<code>9、删除開機預設啟動(serverA serverB)</code>

<code>update-rc.d -f keepalived remove</code>

<code>update-rc.d: using dependency based boot sequencing</code>

<code>10、添加開機啟動(serverA serverB)</code>

<code>echo</code> <code>"/usr/sbin/keepalived -d -D -S 3 -f /etc/keepalived/keepalived.conf"</code> <code>&gt;&gt; </code><code>/etc/rc</code><code>.</code><code>local</code>

<code>三、測試</code>

<code>1、直接重新開機masterA機器</code>

<code>2、在slave上檢視IP位址</code>

<code>lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 16436 qdisc noqueue state UNKNOWN </code>

<code>eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:8c:61:6e brd ff:ff:ff:ff:ff:ff</code>

<code>    </code><code>inet 10.1.10.250</code><code>/24</code> <code>brd 10.1.10.255 scope global eth0</code>

<code>    </code><code>inet6 fe80::20c:29ff:fe8c:616e</code><code>/64</code> <code>scope link </code>

<code>3、在slave上檢視日志</code>

<code>cat</code> <code>/var/log/keepalived</code>

<code>Sep 22 16:55:00 debian Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE</code>

<code>Sep 22 16:55:01 debian Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE</code>

<code>Sep 22 16:55:01 debian Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.</code>

<code>Sep 22 16:55:01 debian Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 </code><code>for</code> <code>10.1.10.240</code>

<code>Sep 22 16:55:01 debian Keepalived_healthcheckers: Netlink reflector reports IP 10.1.10.240 added</code>

<code>Sep 22 16:55:06 debian Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 </code><code>for</code> <code>10.1.10.240</code>

<code> </code> 

<code>四、參考文章</code>

<code>http:</code><code>//www</code><code>.keepalived.org/</code>

本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1654949,如需轉載請自行聯系原作者