天天看点

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,如需转载请自行联系原作者