当前位置:Gxlcms > 数据库问题 > mysql mmm高可用架构设计

mysql mmm高可用架构设计

时间:2021-07-01 10:21:17 帮助过:3人阅读

auto_increment_offset=2
log_slave_updates=1

3.重启

service mysqld stop
netstat -auplnt |grep 3306
service mysqld start

grep -v "#" /etc/my.cnf  过滤#开头行查看文件
4.使用xtrabackup备份主库
4.1 安装工具
m1 m2 slave都要安装xtrabackup
# yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf  bison libtool ncurses-devel libgcrypt-devel libev-devel libcurl-devel vim-common -y

下面两个软件需要单独安装
rpm -ivh libev4-4.15-7.1.x86_64.rpm
rpm -ivh libev-devel-4.15-21.1.x86_64.rpm
                    
# tar xf percona-xtrabackup-2.3.4.tar.gz 
# cd percona-xtrabackup-2.3.4
#cmake -DBUILD_CONFIG=xtrabackup_release -DWITH_MAN_PAGES=OFF && make -j4
# make install

修改PATH变量
# vim /etc/profile
文件最后追加
export PATH="$PATH:/usr/local/xtrabackup/bin"  
# source /etc/profile
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/usr/local/xtrabackup/bin
                    
# innobackupex --help 验证安装成功与否

建立备份目录 /backup/
chown -R mysql:mysql /backup
注意:3台pc时间一样       参数文件一致 其中server-id不一样
date -s 2016/06/30 16:05

4.2 备份恢复

主库m1
备份:
# innobackupex --user=root --password=123123 --socket=/var/run/mysqld/mysql.sock --no-timestamp /backup/
# innobackupex --apply-log /backup/

主库m1上:
建用户
mysql> create user repl@% identified by repl;
mysql> grant replication slave on *.* to root@%;

将主库的备份拷贝到备库
scp安装百度
# scp -r * 172.16.145.38:/backup/
                    
在m2 slave 上:
关闭数据库
如果备库已经有数据库,删除数据库即可
datadir目录下面的内容 //删除
sock文件、pid文件 //删除,数据库关闭情况下,这两个文件很可能已经消失
binlog文件 //最好删除
                    
恢复从库:
innobackupex --move-back /backup/

修改权限
[root@mysql5 data]# chown -R mysql:mysql .

启动从库
mysqld_safe --defaults-file=/etc/my.cnf --skip-slave-start &

5.搭建主从

查看position
# cat xtrabackup_info
                    
在m2 slave库上执行:
mysql>change master to
master_host=172.16.145.37,
master_port=3306,
master_user=root,
master_password=123123,
master_log_file=mysqlserver.000004,
master_log_pos=1454

启动从库
start slave;
                    
查看备库状态
mysql> show slave status\G
Last_IO_Error,这个需要为空
show slave status \G
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
验证:主库 建表  查看从库

至此  主从 备份恢复搭建完毕

6.搭建双主

在m1上:
mysql> stop slave;
CHANGE MASTER TO master_host = 172.16.145.38, master_port=3306, master_user=root,
master_password=123123, master_log_file=mysqlserver.000003, 
master_log_pos=301;

IP地址是m2的
master_log_file=mysqlserver.000003,  master_log_pos=301;
这两个值随便从M2上show master status得到就行
                    
start slave;
                
至此 双主搭建成功

7.搭建3M 

7.1配置网络 保证m1 m2 slave通信上网

3台服务器加网卡 使用NTA转换
配置
[root@mysql5 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
                    
重启网卡 

7.2安装Perl模块

可以选用网络在线安装的方式,注意一定要选用国内的服务器,最好的就是163
perl -MCPAN -e shell 一种在线安装方式:cpan
cpan命令:
o config init  重新配置
o config commit  保存配置
                    
安装步骤:
[root@mysql5 ~]# perl -MCPAN -e shell                
配置cpan 使用163作为Perl安装源
# yum install cpan -y
# perl -MCPAN -e shell
输入yes是表示自动配置  生成了cpan的默认文件
cpan[1]> o conf commit  保存配置
cpan[3]> exit
[root@mysql5 ~]# perl -MCPAN -e shell
cpan[1]> o conf init
输出no
一路回车

/root/.cpan/sources/MIRRORED.BY  cpan服务器文件
到亚洲
中国
选择163
cpan[3]> o conf commit

安装
在cpan上安装,需要选择就回车  
install YAML
install Algorithm::Diff
install Class::Singleton
install DBI
install DBD::mysql
    安装这个模块以前,需要做如下工作,另外开一个窗口
    MySQL编译安装的 
    [root@mysql5 network-scripts]# cd /etc/ld.so.conf.d/
    [root@mysql5 ld.so.conf.d]# ll
    total 8
    -r--r--r--. 1 root root 324 Nov 11  2013 kernel-2.6.32-    431.el6.x86_64.conf
    -rw-r--r--. 1 root root  17 Aug  9  2013 mysql-x86_64.conf
    [root@mysql5 ld.so.conf.d]# vim mysql-x86_64.conf(文件随机选就行)
    追加 :/usr/local/mysql/lib
    ldconfig  刷新/etc/ld.so.conf.d/下的动态库
install File::Temp
install Log::Dispatch
install Log::Log4perl
install Mail::Send
install Net::ARP
force install Net::Ping  #force表示只安装不测试  强制安装
install Proc::Daemon
install Thread::Queue
install Time::HiRes

注意:保证每个模块安装上。可以在安装一遍查看是否安装上。安装不上可以下载tar包编译安装

7.3安装配置mmm

安装mmm
# tar xf mysql-mmm-2.2.1.tar.gz 
# cd mysql-mmm-2.2.1
# make install

在m1建用户
grant replication client on *.* to mmm_monitor@172.16.145.% identified by mmm_monitor;
grant super,replication client,process on *.* to mmm_agent@172.16.145.% identified by mmm_agent;
grant replication slave on *.* to repl@172.16.145.% identified by repl;
grant all on *.* to root@172.16.145.% identified by 123123;

测试连通性 测试用户建立的是否得当 在每一台服务器上 mysql -uroot -prootroot -h192.168.56.219 mysql -uroot -prootroot -h192.168.56.101 mysql -uroot -prootroot -h192.168.56.102 mysql -urepl -prepl -h192.168.56.219 mysql -urepl -prepl -h192.168.56.101
mysql -urepl -prepl -h192.168.56.102 mysql -ummm_agent -pmmm_agent -h192.168.56.219 mysql -ummm_agent -pmmm_agent -h192.168.56.101 mysql -ummm_agent -pmmm_agent -h192.168.56.102

配置mmm文件
以下文件在m1 m2 slave配置

    /etc/mysql-mmm/mmm_common.conf  
    active_master_role    writer  #主作用  写


<host default>
    cluster_interface        eth1 #通信的网卡

    pid_path                /var/run/mmm_agentd.pid
    bin_path                /usr/lib/mysql-mmm/

    replication_user        repl #主从复制用户
    replication_password    repl

    agent_user                mmm_agent#通信的用户
    agent_password            mmm_agent
</host>

<host m1>#主机名
    ip                        172.16.145.37
    mode                    master#角色
    peer                    m2  # m1对应的
</host>

<host m2>
    ip                        172.16.145.38
    mode                    master
    peer                    m1
</host>

<host slave_mon>
    ip                        172.16.145.39
    mode                    slave
</host>


<role writer> #写角色
    hosts                    m1,m2
    ips                    172.16.145.24  vip 同一网段不一样
    mode                    exclusive
</role>

<role reader>
    hosts                    m2,slave_mon
    ips                    172.16.145.25, 172.16.145.26
    mode                    balanced
</role>

mmm_agent.conf文件
this slave_mon(三台主机的主机名)

[root@m1 ~]# vim /etc/hosts
[root@m1 ~]# cat /etc/hosts
172.16.145.37 m1
172.16.145.38 m2
172.16.145.39 slave_mon
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
monitor在salve上  在slave配置
# vim mmm_mon.conf 修改IP地址   注意monitor用户名与密码
   include mmm_common.conf
     <monitor>
                 ip                                              127.0.0.1
                 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.0.1, 192.168.0.2, 192.168.0.3(m1 m2 slave ip地址)
     </monitor>
                    
     <host default>
               monitor_user                    mmm_monitor
               monitor_password                mmm_monotor
     </host>
                    
       debug 0

mmm配置完毕

 

8.启动与测试

启动mmm、测试mmm状态
各个服务器的MySQL slave 启动 
  每一个服务器启动agent
/etc/init.d/mysql-mmm-agent start
monitor服务器启动monitor
/etc/init.d/mysql-mmm-monitor start

[root@slave_mon ~]# /etc/init.d/mysql-mmm-monitor start
                    Daemon bin: /usr/sbin/mmm_mond
                    Daemon pid: /var/run/mmm_mond.pid
                    Starting MMM Monitor daemon: Ok
                    
用deve登陆read和write vip,在write上建表,在read查看。m1模拟宕机,write vip飘到m2上
# mmm_control help
Valid commands are:
    help                              - show this message
    ping                              - ping monitor
    show                              - show status  查看状态
    checks [<host>|all [<check>|all]] - show checks status  检查
    set_online <host>                 - set host <host> online  开启状态
    set_offline <host>                - set host <host> offline   关闭
    mode                              - print current mode.
    set_active                        - switch into active mode.
    set_manual                        - switch into manual mode.
    set_passive                       - switch into passive mode.
    move_role [--force] <role> <host> - move exclusive role <role> to host <host>  移动角色
                                        (Only use --force if you know what you are doing!)
    set_ip <ip> <host>                - set role with ip <ip> to host <host>

 

 

 

技术分享

mysql mmm高可用架构设计

标签:

人气教程排行