一、需求說明
最近一直在學習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><host default></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><</code><code>/host</code><code>></code>
<code><host db1></code>
<code>ip 172.28.26.101</code>
<code>mode master</code>
<code>peer db2</code>
<code><host db2></code>
<code>ip 172.28.26.102</code>
<code>peer db1</code>
<code><role writer></code>
<code>hosts db1, db2</code>
<code>ips 172.28.26.107</code>
<code>mode exclusive</code>
<code><</code><code>/role</code><code>></code>
<code><role reader></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 ] && kill -</code><code>0</code> <code>`cat $mmmd_agent_pidfile` </code><code>2</code><code>> /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>] && 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>] && 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 ] && </code><code>kill</code> <code>-0 `</code><code>cat</code> <code>$mmmd_agent_pidfile` 2> </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 ] && </code><code>touch</code> <code>$lockfile</code>
<code>echo</code> <code>-n </code><code>"stopping $prog: "</code>
<code>[ $retval = 0 ] && </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><monitor></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><</code><code>/monitor</code><code>></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 ] && kill -</code><code>0</code> <code>`cat $mmmd_mon_pidfile` </code><code>2</code><code>> /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 ] && </code><code>kill</code> <code>-0 `</code><code>cat</code> <code>$mmmd_mon_pidfile` 2> </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>