频道栏目
首页 > 资讯 > 其他综合 > 正文

CentOS7 下如何安装Mysql MMM

16-04-08        来源:[db:作者]  
收藏   我要投稿

* 一. 规划

服务器 IP 作用
monitor 192.168.1.210 监控服务器
master-001 192.168.1.211 读写主机001
master-002 192.168.1.212 读写主机002
slave-001 192.168.1.213 只读主机001
slave-001 192.168.1.214 只读主机002

虚拟IP分配

服务器 虚拟IP mysql读写状态
  192.168.1.220 writer
  192.168.1.221 reader
  192.168.1.222 reader
  192.168.1.223 reader

二. 安装操作系统

最小化安装CentOS7(64位)

三. 配置操作系统

1.关闭 selinux

cat /etc/selinux/config    
SELINUX=disabled  

2.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3.配置NTP ,同步时间

yum -y install ntp
vi /etc/ntp.conf
增加3个时间服务器
server s2d.time.edu.cn iburst #西南地区网络中心
server s2e.time.edu.cn iburst #西北地区网络中心
server s2f.time.edu.cn iburst #东北地区网络中心

启动ntp服务 
systemctl start ntpd 
systemctl enable ntpd 

查看状态
ntpq -p

四. 安装MySQL 5.6 (不是MariaDB)

1.安裝 MySQL Repository

rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

2.安裝 MySQL Server, MySQL client

yum install mysql-community-server

3.开机自动启动 MySQL

systemctl enable mysqld

4.启动MySQL

systemctl start mysqld

5.MySQL 预设为空密码, 執行以下指令修改

mysql_secure_installation
mysql -u root -p 

#进入mysql 控制台,增加root用户远程登录的权限

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'GDkyUDJM6gr2Dx' WITH GRANT OPTION;
flush privileges;

6.修改mysql的存储目录

a. 停止mysql

systemctl stop mysql

b. 迁移数据库存储目录

mkdir /opt/mysql
chown mysql:mysql /opt/mysql
mv /var/lib/mysql /opt/mysql
cd /opt/mysql
mv mysql data

c. 修改配置文件

vim /etc/my.cnf

#修改datadir和socket指向

datadir=/opt/mysql/data
socket=/opt/mysql/mysql.sock

#同时增加下面的代码,这个是为了让mysql client能够连上mysql,避免Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock错误!


[mysql]
socket=/opt/mysql/mysql.sock

d. 启动mysql

systemctl start mysql

7.配置MySQL Relication

a. 要将添加的内容放在配置文件/etc/my.cnf的[mysqld]部分,如下:

[mysqld]
datadir=/opt/mysql/data
socket=/opt/mysql/mysql.sock
user=mysql

#下面为新添加的内容

read_only=1
default-storage-engine = innodb
replicate-ignore-db = mysql
binlog-ignore-db    = mysql

server-id           = 1 #server-id在每台服务器上的值都是不一样,在这里依次为1、2、3、4。

#这里的日志文件命名也每台机器不一样,比如(mysql-master-001-bin.log,mysql-master-002-bin.log,mysql-slave-001-bin.log,mysql-slave-002-bin.log)

log-bin             = /opt/mysql/log/mysql-master-001-bin.log
log_bin_index       = /opt/mysql/log/mysql-master-001-bin.log.index
relay_log           = /opt/mysql/log/mysql-master-001-bin.relay
relay_log_index     = /opt/mysql/log/mysql-master-001-bin.relay.index

# 日志文件指定结束

expire_logs_days    = 10
max_binlog_size     = 100M
log_slave_updates   = 1

b. 在/opt/mysql下增加log目录

cd /opt/mysql
mkdir log
chown mysql:mysql log

d. 重新启动mysql

systemctl restart mysql

e. 检查配置是否成功
1)登录mysql,执行show master status,看是否有如下输出
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-master-001-bin.000001 | 120 | | mysql | |
+——————+———-+————–+——————+——————-+
2)到/var/log/mysql目录下,看是否产生了类似mysql-master-001-bin.000001和mysql-master-001-bin.log.index的文件。

f. 在4个mysql的服务器上都修改一下。注意日志命名每台机器都不一样

五. 新建同步数据库需要的用户
使用mysql-mmm时一共需要三个用户: replication、mmm_agent和mmm_monitor(管理服务器上用来监控cluster状态的用户,所以可以限定只能从管理服务器登录)。使用下面三条命令新建这三个用户并分配相应的权限
所有的mysql 服务器都运行一遍

GRANT REPLICATION CLIENT                 ON *.* TO 'mmm_monitor'@'192.168.1.%' IDENTIFIED BY 'monitor';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%'   IDENTIFIED BY 'agent';
GRANT REPLICATION SLAVE                  ON *.* TO 'replication'@'192.168.1.%' IDENTIFIED BY 'replication';

flush privileges;

六.设置复制机制(从master-001复制到master-002,从master-002复制到slave-001,slave-002)

1.配置master-001作为主,复制到master-002

a.配置master-001
由于这里是配置master-001做为源数据,所以不需要设置change master 和 启动slave进程 b.配置master-002(指定 change master 为 master-001)

#ssh到 master-002 服务器

mysql -u root -p 

#在mysql控制台录入

CHANGE MASTER TO MASTER_HOST='192.168.1.211',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-002-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;

#重置reset

reset slave;

#启动slave

start slave;

#查看slave状态

show slave status\G

#结果如下

mysql> show slave status\G
*************************** 1. row ***************************
       Slave_IO_State: Waiting for master to send event
          Master_Host: 192.168.1.212
          Master_User: replication
          Master_Port: 3306
        Connect_Retry: 10
      Master_Log_File: mysql-master-002-bin.000001
  Read_Master_Log_Pos: 120
       Relay_Log_File: mysql-master-001-bin.000004
        Relay_Log_Pos: 294
Relay_Master_Log_File: mysql-master-002-bin.000001
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB:
  Replicate_Ignore_DB: mysql
   Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
           Last_Errno: 0
           Last_Error:
         Skip_Counter: 0
  Exec_Master_Log_Pos: 120
      Relay_Log_Space: 472
      Until_Condition: None
       Until_Log_File:
        Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File:
   Master_SSL_CA_Path:
      Master_SSL_Cert:
    Master_SSL_Cipher:
       Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
        Last_IO_Errno: 0
        Last_IO_Error:
       Last_SQL_Errno: 0
       Last_SQL_Error:
Replicate_Ignore_Server_Ids:
     Master_Server_Id: 2
          Master_UUID: 3d3b9f4f-f74f-11e5-9a30-005056b324c4
     Master_Info_File: /opt/mysql/data/master.info
            SQL_Delay: 0
  SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
   Master_Retry_Count: 86400
          Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
       Master_SSL_Crl:
   Master_SSL_Crlpath:
   Retrieved_Gtid_Set:
    Executed_Gtid_Set:
        Auto_Position: 0
1 row in set (0.00 sec)

注意:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

b.配置slave-001


#ssh到 slave-001 服务器         

mysql -u root -p 

#在mysql控制台录入

CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-slave-001-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;

#重置reset

reset slave;

#启动slave

start slave;

#查看slave状态

show slave status\G

#结果如下

mysql> show slave status\G

c.配置slave-002


#ssh到 slave-002 服务器         

mysql -u root -p 

#在mysql控制台录入

CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-slave-002-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;

#重置reset

reset slave;

#启动slave

start slave;

#查看slave状态

show slave status\G

#结果如下

mysql> show slave status\G      
d.测试复制机制
在master-001 上,增删改 表空间,表,字段,内容 可以同步到 master-002,slave-001,slave-002

2.配置master-002作为主,复制到master-001

a.配置master-001(指定 change master 为 master-002)

#ssh到 master-001 服务器

mysql -u root -p 

#在mysql控制台录入

CHANGE MASTER TO MASTER_HOST='192.168.1.212',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-001-bin.000001', MASTER_LOG_POS=260,MASTER_CONNECT_RETRY=10;

#重置reset

reset slave;

#启动slave

start slave;

#查看slave状态

show slave status\G

#结果如下

mysql> show slave status\G

这样就完成了master-001 和 master-002的相互复制,并且从master-002复制到slave-001 和 slave-002.

2.测试复制机制是否成功。
a.在master-001中建立database ,确认master-002,slave-001 和 slave-002中都同步复制。 b.在master-002中建立database ,确认master-001,slave-001 和 slave-002中都同步复制。

七.安装MMM(http://mysql-mmm.org/

1.安装epel扩展包
CentOS软件仓库默认是不含这些软件的,必须要有epel这个包的支持。故我们必须先安装epel

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh epel-release-7-5.noarch.rpm
yum install mysql-mmm-monitor
yum install mysql-mmm-agent

#用yum安装的 mysql-mmm组件启动的时候会出错。

所以用下面的tar.gz文件来安装
yum erase mysql-mmm-monitor 
yum erase mysql-mmm-agent

2.在monitor(192.168.1.210) 上安装监控程序

cd /tmp
wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
tar -xzvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1.tar.gz
make install

3.在数据库服务器(192.168.1.211-214)上安装代理

cd /tmp
wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
tar -xzvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1.tar.gz
make install

4.配置MMM

a.编辑/etc/mysql-mmm/mmm_common.conf
完成安装后,所有的配置文件都放到了/etc/mysql-mmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf,内容如下:

active_master_role writer

    cluster_interface  eno16777984  #网卡设备
    pid_path     /var/run/mmm_agentd.pid
    bin_path     /usr/lib/mysql-mmm/ #这里要确认是否下面有agent,monitor,tools的目录。否则无法生成vip
    replication_user        replication
    replication_password    replication
    agent_user              mmm_agent
    agent_password          agent


    ip      192.168.1.211
    mode    master
    peer    db2


    ip      192.168.1.212
    mode    master
    peer    db1


    ip      192.168.1.213
    mode    slave


    ip      192.168.1.214
    mode    slave


    hosts   db1, db2
    ips     192.168.1.220
    mode    exclusive


    hosts   db2, db3, db4
    ips     192.168.1.221, 192.168.1.222, 192.168.1.223
    mode    balanced

通过scp命令分别复制到monitor-001、master-001、master-002、slave-001和slave-002共五台机器上。

b. 编辑 4台mysql节点机上的/etc/mysql-mmm/mmm_agent.conf
在数据库服务器上,还有一个mmm_agent.conf需要修改,其内容是:

include mmm_common.conf


# The 'this' variable refers to this server.  Proper operation requires


# that 'this' server (db1 by default), as well as all other servers, have the


# proper IP addresses set in mmm_common.conf.

this db1

最后一行的db1,在不同的数据库服务器上要分别改为db2、db3和db4,否则代理就会无法启动。

c. 编辑 monitor主机上的/etc/mysql-mmm/mmm_mon.conf
在monitor-001上配置mmm_mon.conf

include mmm_common.conf


    ip                  127.0.0.1   #为了安全性,设置只在本机监听,mmm_mond 默认监听9988  
    pid_path            /var/run/mmm_mond.pid
    bin_path            /usr/lib/mysql-mmm/
    status_path         /var/lib/misc/mmm_mond.status
    ping_ips            192.168.1.211, 192.168.1.212, 192.168.1.213, 192.168.1.214       #用于测试网络可用性 IP 地址列表,只要其中有一个地址 ping 通,就代表网络正常,这里不要写入本机地址  
    #flap_duration      3600 #抖动的时间范围,单位秒,这两个参数考虑情况添加  
    # flap_count         3 #在抖动的时间范围内,最大的抖动次数  
    auto_set_online      60#是否设置自动上线,如果该值大于0,抖动的主机在抖动的时间范围过后,则设置自动上线

    # The kill_host_bin does not exist by default, though the monitor will
    # throw a warning about it missing.  See the section 5.10 "Kill Host



    monitor_user        mmm_monitor
    monitor_password    monitor

5.自动启动agent 和 monitor

a. 在monitor上启动monitor

systemctl enable mysql-mmm-monitor
systemctl start mysql-mmm-monitor

b. 在4个数据库服务器上启动agent

 systemctl enable mysql-mmm-agent
 systemctl starat mysql-mmm-agent

如果出现Configuration file /etc/mysql-mmm/mmm_common.conf is world readable!这种错误,需要查看/etc/mysql-mmm/mmm_common.conf文件的权限,应该是 chmod 640 /etc/mysql-mmm/mmm_common.conf
集群中所有配置文件的权限最好都设置为640,否则启动 MMM 服务的时候可能出错

八. MMM启动顺序:先启动monitor,再启动 agent

九. 问题和解决办法

1.在monitor主机上使用 systemctl start mysql-mmm-monitor 无法分配vip。而通过/etc/init.d/mysql-mmm-monitor start则可以分配vip
由于缺少环境变量,导致无法激活vip。
那么就在 /etc/rc.d/init.d/mysql-mmm-monitor的脚本文件里面最上面,加入
source /root/.bash_profile

2.vip漂移后,无法ping通192.168.1.200

问题描述:
当master-001发生故障,导致DB不可用时,VIP会自动漂移到master-002上,以实现高可用。但出现了一个问题,由于ARP老化时间过长,导致漂移过去的VIP不可用,也无法ping通。也就是说,MySQL-MMM没有考虑到ARP老化时间过长的情况而采取强刷ARP的方式。

a.解决办法1

同时修改master-001 和 master-002上的代码(这个没测试成功)
修改文件
/usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm

vim /usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm

在sub configure_ip($$)代码段里面的_exit_ok();前面加入以下代码


#这里是解决vip偏移后,无法ping通。原因是arp 老化时间过长,这里强制刷新arp

my $getway = `/sbin/route | awk 'default/ (print $2)'`
`/sbin/arping -I $if -c 3 -s $ip $getway `;

#配置结束

如图

b.解决办法2
在vip漂移到的主机上手工重置arping

arping -I eno16777984 -c 3 -s 192.168.1.220 192.168.1.1

c.解决办法3
在master-001 和 master-002 上使用shell脚本来刷新(这个方法正常运行)

vim /root/refresh_vip.sh

#增加如下内容:


#!/bin/sh               

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
MMM_COMM_CONF="/etc/mysql-mmm/mmm_common.conf"
ETH_NAME=`awk '/cluster_interface/{print $2}' ${MMM_COMM_CONF}`
VIP_ADDR=`grep -A 2 '' ${MMM_COMM_CONF} | awk '/ips/{print $2}'`
GETWAY_ADDR=`/sbin/route | awk '/default/ {print $2}'`

if [[ -n `/sbin/ip addr show ${ETH_NAME} | grep ${VIP_ADDR}` ]]; then
    /sbin/arping -I ${ETH_NAME} -c 3 -s ${VIP_ADDR} ${GETWAY_ADDR} >/dev/null 2>&1
fi

放入crontab中运行

crontab -e
* * * * * sleep 10; /root/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 20; /root/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 30; /root/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 40; /root/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 50; /root/refresh_vip.sh >/dev/null 2>&1
 
 
相关TAG标签
上一篇:log4go 源码相关剖析
下一篇:解决 Mac OS X 10.11 安装 sip 没有权限的问题分析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站