天天看點

mysql-mmm叢集(多執行個體)

一、需求說明

最近一直在學習mysql-mmm,想以後這個架構也能用在我們公司的業務上,我們公司的業務是單機多執行個體部署,是以也想把mysql-mmm部署成這樣,功夫不負有心人,我成功了,和大家分享一下:

二、環境說明

叢集

角色

主機名

ip

mysql port

server id

vip writer

vip reader

navy2

agent

db1

172.28.26.101

3307

11

172.28.26.107

navy3

db2

172.28.26.102

3308

1

172.28.26.110

22

172.28.26.108

2

172.28.26.109

navy2/navy3

monitor

172.28.26.103

ps:db1和db2上分别有兩個庫navy2和navy3,互為主主,172.28.26.107是navy2的寫入虛拟ip,172.28.26.108是navy2的讀虛拟ip,172.28.26.109是navy2的寫入虛拟ip,172.28.26.110是navy3的讀虛拟ip。

三、部署

2、db1上:

vi /etc/mysql-mmm/mmm_common_navy2.conf(navy2的配置檔案)

3

4

5

6

7

8

9

10

12

13

14

15

16

17

18

19

20

21

23

24

25

26

27

28

29

30

31

32

33

34

35

<code>vi</code> <code>/etc/mysql-mmm/mmm_common_navy2</code><code>.conf</code>

<code>active_master_role      writer</code>

<code>&lt;host default&gt;</code>

<code>cluster_interface       eth1</code>

<code>agent_port              9912</code>

<code>mysql_port              3307</code>

<code>pid_path                </code><code>/var/run/mysql-mmm/mmm_agentd_navy2</code><code>.pid</code>

<code>bin_path                </code><code>/usr/libexec/mysql-mmm/</code>

<code>replication_user        slave</code>

<code>replication_password    123456</code>

<code>agent_user              mmm_agent</code>

<code>agent_password          123456</code>

<code>&lt;</code><code>/host</code><code>&gt;</code>

<code>&lt;host db1&gt;</code>

<code>ip      172.28.26.101</code>

<code>mode    master</code>

<code>peer    db2</code>

<code>&lt;host db2&gt;</code>

<code>ip      172.28.26.102</code>

<code>peer    db1</code>

<code>&lt;role writer&gt;</code>

<code>hosts   db1, db2</code>

<code>ips     172.28.26.107</code>

<code>mode    exclusive</code>

<code>&lt;</code><code>/role</code><code>&gt;</code>

<code>&lt;role reader&gt;</code>

<code>ips     172.28.26.108</code>

<code>mode    balanced</code>

vi /etc/mysql-mmm/mmm_common_navy3.conf(navy3的配置檔案)

<code>agent_port              9913</code>

<code>mysql_port              3308</code>

<code>pid_path                </code><code>/var/run/mysql-mmm/mmm_agentd_navy3</code><code>.pid</code>

<code>ips     172.28.26.109</code>

<code>ips     172.28.26.110</code>

vi /etc/mysql-mmm/mmm_agent_navy2.conf(navy2的agent配置檔案)

<code>include mmm_common_navy2.conf</code>

<code>this db1</code>

vi /etc/mysql-mmm/mmm_agent_navy3.conf(navy3的agent配置檔案)

<code>include mmm_common_navy3.conf</code>

vi /etc/init.d/mysql-mmm-agent-navy2(navy2的agent啟動腳本)

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

<code>#!/bin/sh</code>

<code># chkconfig: - </code><code>64</code> <code>36</code>

<code># description:  mmm agent.</code>

<code># processname: mmm_agentd</code>

<code># config: /etc/mysql-mmm/mmm_agent.conf</code>

<code># pidfile: /</code><code>var</code><code>/run/mysql-mmm/mmm_agentd.pid</code>

<code># source </code><code>function</code> <code>library and defaults file.</code>

<code>. /etc/rc.d/init.d/functions</code>

<code>. /etc/</code><code>default</code><code>/mysql-mmm-agent</code>

<code># cluster name (it can be empty </code><code>for</code> <code>default</code> <code>cases)</code>

<code>cluster=</code><code>'navy2'</code>

<code>lockfile=</code><code>'/var/lock/subsys/mysql-mmm-agent_navy2'</code>

<code>prog=</code><code>'mmm agent daemon'</code>

<code>#-----------------------------------------------------------------------</code>

<code># paths</code>

<code>if</code> <code>[ </code><code>"$cluster"</code> <code>!= </code><code>""</code> <code>]; then</code>

<code>mmmd_agent_bin=</code><code>"/usr/sbin/mmm_agentd @$cluster"</code>

<code>mmmd_agent_pidfile=</code><code>"/var/run/mysql-mmm/mmm_agentd_$cluster.pid"</code>

<code>else</code>

<code>mmmd_agent_bin=</code><code>"/usr/sbin/mmm_agentd"</code>

<code>mmmd_agent_pidfile=</code><code>"/var/run/mysql-mmm/mmm_agentd.pid"</code>

<code>fi</code>

<code>start() {</code>

<code>if</code> <code>[ </code><code>"${enabled}"</code> <code>!= </code><code>"1"</code> <code>]; then</code>

<code>echo </code><code>"$prog is disabled!"</code>

<code>exit </code><code>1</code>

<code>echo -n </code><code>"starting $prog: "</code>

<code>if</code> <code>[ -s $mmmd_agent_pidfile ] &amp;&amp; kill -</code><code>0</code> <code>`cat $mmmd_agent_pidfile` </code><code>2</code><code>&gt; /dev/</code><code>null</code><code>; then</code>

<code>echo </code><code>" already running."</code>

<code>exit </code><code>0</code>

<code>daemon $mmmd_agent_bin</code>

<code>retval=$?</code>

<code>echo</code>

<code>[ $retval = </code><code>0</code> <code>] &amp;&amp; touch $lockfile</code>

<code>return</code> <code>$retval</code>

<code>}</code>

<code>stop() {</code>

<code># stop daemon.</code>

<code>echo -n </code><code>"stopping $prog: "</code>

<code>killproc -p $mmmd_agent_pidfile $mmmd_agent_bin</code>

<code>[ $retval = </code><code>0</code> <code>] &amp;&amp; rm -f $lockfile</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>start)</code>

<code>start</code>

<code>;;</code>

<code>stop)</code>

<code>stop</code>

<code>status)</code>

<code>status -p $mmmd_agent_pidfile $mmmd_agent_bin</code>

<code>restart|reload)</code>

<code>condrestart)</code>

<code>if</code> <code>[ -f $lockfile ]; then</code>

<code>*)</code>

<code>echo </code><code>"usage: $0 {start|stop|restart|condrestart|status}"</code>

<code>esac</code>

<code>exit $retval</code>

賦予執行權限:

<code>chmod</code> <code>+x </code><code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy2</code>

vi /etc/init.d/mysql-mmm-agent-navy3(navy3的agent啟動腳本)

74

75

76

77

78

<code># chkconfig: - 64 36</code>

<code># pidfile: /var/run/mysql-mmm/mmm_agentd.pid</code>

<code># source function library and defaults file.</code>

<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>

<code>. </code><code>/etc/default/mysql-mmm-agent</code>

<code>## paths</code>

<code>#mmmd_agent_bin="/usr/sbin/mmm_agentd"</code>

<code>#mmmd_agent_pidfile="/var/run/mysql-mmm/mmm_agentd.pid"</code>

<code>#lockfile='/var/lock/subsys/mysql-mmm-agent'</code>

<code>#prog='mmm agent daemon'</code>

<code># cluster name (it can be empty for default cases)</code>

<code>cluster=</code><code>'navy3'</code>

<code>lockfile=</code><code>'/var/lock/subsys/mysql-mmm-agent_navy3'</code>

<code>if</code> <code>[ </code><code>"$cluster"</code> <code>!= </code><code>""</code> <code>]; </code><code>then</code>

<code>if</code> <code>[ </code><code>"${enabled}"</code> <code>!= </code><code>"1"</code> <code>]; </code><code>then</code>

<code>echo</code> <code>"$prog is disabled!"</code>

<code>exit</code> <code>1</code>

<code>echo</code> <code>-n </code><code>"starting $prog: "</code>

<code>if</code> <code>[ -s $mmmd_agent_pidfile ] &amp;&amp; </code><code>kill</code> <code>-0 `</code><code>cat</code> <code>$mmmd_agent_pidfile` 2&gt; </code><code>/dev/null</code><code>; </code><code>then</code>

<code>echo</code> <code>" already running."</code>

<code>exit</code> <code>0</code>

<code>[ $retval = 0 ] &amp;&amp; </code><code>touch</code> <code>$lockfile</code>

<code>echo</code> <code>-n </code><code>"stopping $prog: "</code>

<code>[ $retval = 0 ] &amp;&amp; </code><code>rm</code> <code>-f $lockfile</code>

<code>if</code> <code>[ -f $lockfile ]; </code><code>then</code>

<code>echo</code> <code>"usage: $0 {start|stop|restart|condrestart|status}"</code>

<code>exit</code> <code>$retval</code>

賦予可執行權限:

<code>chmod</code> <code>+x </code><code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy3</code>

啟動服務:

<code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy2</code> <code>start</code>

<code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy3</code> <code>start</code>

3、db2上:

複制db1上的檔案到相應的目錄下:

<code>scp</code> <code>/etc/mysql-mmm/mmm_common_navy2</code><code>.conf 172.28.26.102:</code><code>/etc/mysql-mmm/</code>

<code>scp</code> <code>/etc/mysql-mmm/mmm_common_navy3</code><code>.conf 172.28.26.102:</code><code>/etc/mysql-mmm/</code>

<code>scp</code> <code>/etc/mysql-mmm/mmm_agent_navy2</code><code>.conf 172.28.26.102:</code><code>/etc/mysql-mmm/</code>

<code>scp</code> <code>/etc/mysql-mmm/mmm_agent_navy3</code><code>.conf 172.28.26.102:</code><code>/etc/mysql-mmm/</code>

<code>scp</code> <code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy2</code> <code>172.28.26.102:</code><code>/etc/init</code><code>.d/</code>

<code>scp</code> <code>/etc/init</code><code>.d</code><code>/mysql-mmm-agent-navy3</code> <code>172.28.26.102:</code><code>/etc/init</code><code>.d/</code>

修改agent配置檔案:

<code>sed</code> <code>-i </code><code>'s/this db1/this db2/'</code> <code>/etc/mysql-mmm/mmm_agent_navy2</code><code>.conf</code>

<code>sed</code> <code>-i </code><code>'s/this db1/this db2/'</code> <code>/etc/mysql-mmm/mmm_agent_navy3</code><code>.conf</code>

4、monitor上

複制db1上的配置檔案:

<code>scp</code> <code>/etc/mysql-mmm/mmm_common_navy2</code><code>.conf 172.28.26.103:</code><code>/etc/mysql-mmm/</code>

<code>scp</code> <code>/etc/mysql-mmm/mmm_common_navy3</code><code>.conf 172.28.26.103:</code><code>/etc/mysql-mmm/</code>

vi /etc/mysql-mmm/mmm_mon_navy2.conf

<code>&lt;monitor&gt;</code>

<code>ip                  127.0.0.1</code>

<code>port                9992</code>

<code>pid_path            </code><code>/var/run/mysql-mmm/mmm_mond_navy2</code><code>.pid</code>

<code>bin_path            </code><code>/usr/libexec/mysql-mmm</code>

<code>status_path         </code><code>/var/lib/mysql-mmm/mmm_mond_navy2</code><code>.status</code>

<code>ping_ips            172.28.26.101,172.28.26.102</code>

<code>auto_set_online     10</code>

<code># wait_for_other_master 2</code>

<code># the kill_host_bin does not exist by default, though the monitor will</code>

<code># throw a warning about it missing.  see the section 5.10 "kill host</code>

<code># functionality" in the pdf documentation.</code>

<code>#</code>

<code># kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host</code>

<code>&lt;</code><code>/monitor</code><code>&gt;</code>

<code>monitor_user        mmm_monitor</code>

<code>monitor_password    123456</code>

<code>debug 0</code>

vi /etc/mysql-mmm/mmm_mon_navy3.conf

<code>port                9993</code>

<code>pid_path            </code><code>/var/run/mysql-mmm/mmm_mond_navy3</code><code>.pid</code>

<code>status_path         </code><code>/var/lib/mysql-mmm/mmm_mond_navy3</code><code>.status</code>

vi /etc/mysql-mmm/mmm_mon_log_navy2.conf

<code>#log4perl.logger = fatal, mmmlog, mailfatal</code>

<code>log4perl.logger = fatal, mmmlog</code>

<code>log4perl.appender.mmmlog = log::log4perl::appender::file</code>

<code>log4perl.appender.mmmlog.threshold = info</code>

<code>log4perl.appender.mmmlog.filename = </code><code>/var/log/mysql-mmm/mmm_mond_navy2</code><code>.log</code>

<code>log4perl.appender.mmmlog.recreate = 1</code>

<code>log4perl.appender.mmmlog.layout = patternlayout</code>

<code>log4perl.appender.mmmlog.layout.conversionpattern = %d %5p %m%n</code>

<code>#log4perl.appender.mailfatal = log::dispatch::email::mailsender</code>

<code>#log4perl.appender.mailfatal.threshold = fatal</code>

<code>#log4perl.appender.mailfatal.from = [email protected]</code>

<code>#log4perl.appender.mailfatal.to = root</code>

<code>#log4perl.appender.mailfatal.buffered = 0</code>

<code>#log4perl.appender.mailfatal.subject = fatal error in mysql-mmm-monitor</code>

<code>#log4perl.appender.mailfatal.layout = patternlayout</code>

<code>#log4perl.appender.mailfatal.layout.conversionpattern = %d %m%n</code>

vi /etc/mysql-mmm/mmm_mon_log_navy3.conf

<code>log4perl.appender.mmmlog.filename = /</code><code>var</code><code>/log/mysql-mmm/mmm_mond_navy3.log</code>

<code>log4perl.appender.mmmlog.recreate = </code><code>1</code>

<code>#log4perl.appender.mailfatal.buffered = </code><code>0</code>

<code>#log4perl.appender.mailfatal.subject = fatal error </code><code>in</code> <code>mysql-mmm-monitor</code>

vi /etc/init.d/mysql-mmm-monitor-navy2 

<code># mysql-mmm-monitor  this shell script takes care of starting and stopping</code>

<code>#                    the mmm monitoring daemon.</code>

<code># description:  mmm monitor.</code>

<code># processname: mmm_mond</code>

<code># config: /etc/mysql-mmm/mmm_mon.conf</code>

<code># pidfile: /</code><code>var</code><code>/run/mysql-mmm/mmm_mond.pid</code>

<code>. /etc/</code><code>default</code><code>/mysql-mmm-monitor</code>

<code>lockfile=</code><code>'/var/lock/subsys/mysql-mmm-monitor_navy2'</code>

<code>prog=</code><code>'mmm monitor daemon'</code>

<code>mmmd_mon_bin=</code><code>"/usr/sbin/mmm_mond @$cluster"</code>

<code>mmmd_mon_pidfile=</code><code>"/var/run/mysql-mmm/mmm_mond-$cluster.pid"</code>

<code>mmmd_mon_bin=</code><code>"/usr/sbin/mmm_mond"</code>

<code>mmmd_mon_pidfile=</code><code>"/var/run/mysql-mmm/mmm_mond.pid"</code>

<code>if</code> <code>[ -s $mmmd_mon_pidfile ] &amp;&amp; kill -</code><code>0</code> <code>`cat $mmmd_mon_pidfile` </code><code>2</code><code>&gt; /dev/</code><code>null</code><code>; then</code>

<code>daemon $mmmd_mon_bin</code>

<code>killproc -p $mmmd_mon_pidfile $mmmd_mon_bin</code>

<code>status -p $mmmd_mon_pidfile $mmmd_mon_bin</code>

vi /etc/init.d/mysql-mmm-monitor-navy3

<code># pidfile: /var/run/mysql-mmm/mmm_mond.pid</code>

<code>. </code><code>/etc/default/mysql-mmm-monitor</code>

<code>lockfile=</code><code>'/var/lock/subsys/mysql-mmm-monitor_navy3'</code>

<code>if</code> <code>[ -s $mmmd_mon_pidfile ] &amp;&amp; </code><code>kill</code> <code>-0 `</code><code>cat</code> <code>$mmmd_mon_pidfile` 2&gt; </code><code>/dev/null</code><code>; </code><code>then</code>

<code>chmod</code> <code>+x </code><code>/etc/init</code><code>.d</code><code>/mysql-mmm-monitor-navy2</code>

<code>chmod</code> <code>+x </code><code>/etc/init</code><code>.d</code><code>/mysql-mmm-monitor-navy3</code>

啟動監控服務:

<code>/etc/init</code><code>.d</code><code>/mysql-mmm-monitor-navy2</code> <code>start</code>

<code>/etc/init</code><code>.d</code><code>/mysql-mmm-monitor-navy3</code> <code>start</code>

結果:

<code>[root@monitor ~]</code><code># mmm_control  show</code>

<code>db1(172.28.26.101) master</code><code>/online</code><code>. roles: writer(172.28.26.104)</code>

<code>db2(172.28.26.102) master</code><code>/online</code><code>. roles:</code>

<code>db3(172.28.26.188) slave</code><code>/online</code><code>. roles: reader(172.28.26.105)</code>

<code>db4(172.28.26.189) slave</code><code>/online</code><code>. roles: reader(172.28.26.106)</code>

<code>[root@monitor ~]</code><code># mmm_control @navy2 show</code>

<code>db1(172.28.26.101) master</code><code>/online</code><code>. roles: writer(172.28.26.107)</code>

<code>db2(172.28.26.102) master</code><code>/online</code><code>. roles: reader(172.28.26.108)</code>

<code>[root@monitor ~]</code><code># mmm_control @navy3 show</code>

<code>db1(172.28.26.101) master</code><code>/online</code><code>. roles: writer(172.28.26.109)</code>

<code>db2(172.28.26.102) master</code><code>/online</code><code>. roles: reader(172.28.26.110)</code>

<code>[root@monitor ~]</code><code>#</code>