MySQL主主复制,mysql主从复制,MySQL+keepalived故障转移。
2017-12-02 15:30
686 查看
实验流程图
实验环境:
本实验,我用了三台服务器
master01:172.16.1.50
master02:172.16.1.51
slave :172.16.1.53
VIP :172.16.1.52
操作系统:centos6.6
实验需求:
两台服务器做MySQL主主复制,一台服务器做两台的从服务器。两台主服务器做故障转移。
实验目的:
两台master数据库服务器做主主复制,并且采用keepalived做高可用,一台slave服务器分别和master的两台服务器做主从复制
实验原理:
我们知道,MySQL做主从复制需要开启三个线程,master服务器要开启I/O线程,而slave服务器需要开启I/O线程和SQL线程。
首先,在slave服务器执行start slave命令开启主从复制开关。
其次,slave服务器的I/O线程通过master服务器已经授权的用户请求连接,并且请求从指定的lbin-log日志文件的指定位置之后开始开始发送bin-log日志内容。(指定位置是指change master 命令时候的内容)。
接着,master服务器接收到slave服务器的I/O线程的请求之后,master服务器上的I/O线程会根据salve服务器上的I/O线程请求的信息分批读取指定的bin-log日志文件指定位置之后的bin-log日志信息,然后返回给slave服务器的I/O线程。
然后,slave服务器的I/O线程获取到master上的I/O线程发送的日志文件、内容及位置点后,会将bin-log日志内容依次写到slave服务器的relay log(中继日志)文件的最末端。并将新的bin-log文件名和位置记录到master-info文件中,以便于下一次读取master服务器新bin-log日志是能够告诉master服务器从新bin-log日志的指定文件及位置开始请求新的bin-log日志内容。
最后,slave服务器的SQL线程会实时检测到本地的relay log中I/O线程新增加的日志内容,然后及时地把relay log文件中的内容解析成SQL语句,并在自身slave服务器上按解析SQL语句的位置顺序执行这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。
实验步骤
第一步:
首先开始搭建master服务器的主主复制
在master01服务器上的操作
在master02服务器上的操作
接下来开始搭建以master02为主,master01为从。
在master02服务器的操作
然后在master01上的操作
至此,master的主主复制环境成功搭建
第二步:
搭建以slave服务器为从,master服务器为主的MySQL主从复制
重点说明
由于MySQL不能做多主一从,于是我在slave创建两个实例,端口为3307、3308,其对应关系:master01<=>slave3307,master02<=>slave3308.
slave服务器上的操作
分别在master01和master02上进行对172.16.1.53进行授权用户
在slave服务器上,以mysqld50实例(从)对应master01服务器(主)做主从复制,以mysqld51实例(从)对应master02服务器(主)做主从复制
至此,slave和master的主从复制搭建成功
第三步:
搭建keepalived环境,实现两台master的故障转移
master02服务器上的操作:
至此,整个实验完成,本实验仅供学习交流。
实验环境:
本实验,我用了三台服务器
master01:172.16.1.50
master02:172.16.1.51
slave :172.16.1.53
VIP :172.16.1.52
操作系统:centos6.6
实验需求:
两台服务器做MySQL主主复制,一台服务器做两台的从服务器。两台主服务器做故障转移。
实验目的:
两台master数据库服务器做主主复制,并且采用keepalived做高可用,一台slave服务器分别和master的两台服务器做主从复制
实验原理:
我们知道,MySQL做主从复制需要开启三个线程,master服务器要开启I/O线程,而slave服务器需要开启I/O线程和SQL线程。
首先,在slave服务器执行start slave命令开启主从复制开关。
其次,slave服务器的I/O线程通过master服务器已经授权的用户请求连接,并且请求从指定的lbin-log日志文件的指定位置之后开始开始发送bin-log日志内容。(指定位置是指change master 命令时候的内容)。
接着,master服务器接收到slave服务器的I/O线程的请求之后,master服务器上的I/O线程会根据salve服务器上的I/O线程请求的信息分批读取指定的bin-log日志文件指定位置之后的bin-log日志信息,然后返回给slave服务器的I/O线程。
然后,slave服务器的I/O线程获取到master上的I/O线程发送的日志文件、内容及位置点后,会将bin-log日志内容依次写到slave服务器的relay log(中继日志)文件的最末端。并将新的bin-log文件名和位置记录到master-info文件中,以便于下一次读取master服务器新bin-log日志是能够告诉master服务器从新bin-log日志的指定文件及位置开始请求新的bin-log日志内容。
最后,slave服务器的SQL线程会实时检测到本地的relay log中I/O线程新增加的日志内容,然后及时地把relay log文件中的内容解析成SQL语句,并在自身slave服务器上按解析SQL语句的位置顺序执行这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。
实验步骤
第一步:
首先开始搭建master服务器的主主复制
在master01服务器上的操作
#安装MySQL数据库 [root@MYSQL-master-01 ~] yum -y install mysql mysql-server mysql-devel mysql-libs #为了试验方便,关闭防火墙,并且设置为开机关闭 [root@MYSQL-master-01 ~] service iptables stop [root@MYSQL-master-01 ~] chkconfig iptables off #开启MySQL服务 [root@MYSQL-master-01 ~] service mysqld restart 设置MySQL数据库开机启动 [root@MYSQL-master-01 ~] chkconfig mysqld on #设置mysql root用户的密码 [root@MYSQL-master-01 ~]mysqladmin -uroot password 123456 #修改数据库配置文件/etc/my.cnf, [root@MYSQL-master-01 ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-bin=master-1 server-id=50 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #保存退出 #重启MySQL服务 [root@MYSQL-master-01 ~] service mysqld restart #登录mysql服务 [root@MYSQL-master-01 ~] mysql -uroot -p123456 #授权,允许172.16.1.51服务器上的master数据库用户通过密码为123456进行登录 mysql> grant replication slave on *.* to 'master'@'172.16.1.51' identified by '123456'; #获取master的bin-log文件名和pos数值, mysql> show master status;
在master02服务器上的操作
#安装MySQL数据库 [root@MYSQL-master-02 ~] yum -y install mysql mysql-server mysql-devel mysql-libs #为了试验方便,关闭防火墙,并且设置为开机关闭 [root@MYSQL-master-02 ~] service iptables stop [root@MYSQL-master-02 ~] chkconfig iptables off #开启MySQL服务 [root@MYSQL-master-02 ~] service mysqld restart [root@MYSQL-master-02 ~] chkconfig mysqld on #设置mysql root用户的密码 [root@MYSQL-master-02 ~]mysqladmin -uroot password 123456 #修改数据库配置文件/etc/my.cnf, [root@MYSQL-master-02 ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-bin=master-2 server-id=51 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #保存退出 #重启MySQL服务 [root@MYSQL-master-02 ~] service mysqld restart #登录mysql服务 [root@MYSQL-master-02 ~] mysql -uroot -p123456 mysql> slave stop; #其中a和b为master01上的bin-log文件名和pos的数值 mysql> change master to master_host='172.16.1.50',master_user='master',master_password='123456',master_log_file='a',master_log_pos=b; mysql> slave start; #查看slave的状态,如果出现Slave_IO_Running和Slave_SQL_Running的状态都为 Yes,则表示以master01为主,master02为从的MySQL服务搭建成功, mysql> show slave status\G; …………………………………………………………………………………………………………………… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……………………………………………………………………………………………………………………
接下来开始搭建以master02为主,master01为从。
在master02服务器的操作
#登录mysql服务 [root@MYSQL-master-02 ~] mysql -uroot -p123456 #授权,允许172.16.1.50服务器上的master数据库用户通过密码为123456进行登录 mysql> grant replication slave on *.* to 'master'@'172.16.1.50' identified by '123456'; #获取master的bin-log文件名和pos数值, show master status;
然后在master01上的操作
#登录mysql服务 [root@MYSQL-master-01 ~] mysql -uroot -p123456 mysql> slave stop; #其中a和b为master01上的bin-log文件名和pos的数值 mysql> change master to master_host='172.16.1.51',master_user='master', master_password='123456',master_log_file='a',master_log_pos=b; mysql> slave start; #查看slave的状态,如果出现Slave_IO_Running(会出现延迟)和Slave_SQL_Running的状态都为 Yes,则表示以master02为主,master01为从的MySQL服务搭建成功, mysql> show slave status\G; …………………………………………………………………………………………………………………… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……………………………………………………………………………………………………………………
至此,master的主主复制环境成功搭建
第二步:
搭建以slave服务器为从,master服务器为主的MySQL主从复制
重点说明
由于MySQL不能做多主一从,于是我在slave创建两个实例,端口为3307、3308,其对应关系:master01<=>slave3307,master02<=>slave3308.
slave服务器上的操作
#安装MySQL数据库 [root@MYSQL-slave-01 ~] yum -y install mysql mysql-server mysql-devel mysql-libs #为了试验方便,关闭防火墙,并且设置为开机关闭 [root@MYSQL-slave-01 ~] service iptables stop [root@MYSQL-slave-01 ~] chkconfig iptables off #开启MySQL服务 [root@MYSQL-slave-01 ~] service mysqld restart #设置MySQL数据库开机启动 [root@MYSQL-slave-01 ~] chkconfig mysqld on #设置mysql root用户的密码 [root@MYSQL-slave-01 ~]mysqladmin -uroot password 123456 #修改数据库配置文件/etc/my.cnf,,添加两个实例名字为mysqld50,mysqld51,端口分别为3307,3308。 [root@MYSQL-slave-01 ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 port=3306 [mysqld50] datadir=/data/3307/ socket=/data/3307/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 port=3307 log-bin=slave server-id=53 [mysqld51] datadir=/data/3308/ socket=/data/3308/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 port=3308 log-bin=slave server-id=54 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #保存退出 #创建实例的目录,并且更改主属为mysql [root@MYSQL-slave-01 ~] mkdir -p /data/{3307,3308} [root@MYSQL-slave-01 ~] chown -R mysql.mysql /data/ #初始化实例 [root@MYSQL-slave-01 ~] mysql_install_db --datadir=/data/3307/ [root@MYSQL-slave-01 ~] mysql_install_db --datadir=/data/3308/ #开启实例 [root@MYSQL-slave-01 ~] mysqld_multi --defaults-file=/etc/my.cnf start 50 [root@MYSQL-slave-01 ~] mysqld_multi --defaults-file=/etc/my.cnf start 51 #查看实例,可以看到两个实例is running [root@MYSQL-slave-01 ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report Reporting MySQL servers MySQL server from group: mysqld50 is running MySQL server from group: mysqld51 is running #查看端口,发现有三个端口3306,3307,3308都开启了 [root@MYSQL-slave-01 ~]# ss -tunlp | grep 330 tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",2268,10)) tcp LISTEN 0 50 *:3307 *:* users:(("mysqld",2039,11)) tcp LISTEN 0 50 *:3308 *:* users:(("mysqld",2064,11)) #为两个实例设置root的登录密码 [root@MYSQL-slave-01 ~] mysqladmin -uroot -S /data/3307/mysql.sock password 123456 [root@MYSQL-slave-01 ~] mysqladmin -uroot -S /data/3308/mysql.sock password 123456
分别在master01和master02上进行对172.16.1.53进行授权用户
#登录master01服务器的数据库 [root@MYSQL-master-01 ~] mysql -uroot -p123456 mysql> grant replication slave on *.* to 'slave'@'172.16.1.53' identified by '123456'; #查看master的bin-log文件名和pos数值 mysql> show master status; #登录master02服务器的数据库 [root@MYSQL-master-01 ~] mysql -uroot -p123456 mysql> grant replication slave on *.* to 'slave'@'172.16.1.53' identified by '123456'; #查看master的bin-log文件名和pos数值 mysql> show master status;
在slave服务器上,以mysqld50实例(从)对应master01服务器(主)做主从复制,以mysqld51实例(从)对应master02服务器(主)做主从复制
[root@MYSQL-slave-01 ~]# mysql -uroot -S /data/3307/mysql.sock -p123456 mysql> slave stop; mysql> reset slave; #其中a和b为master01上的bin-log文件名和pos的数值 mysql> change master to master_host='172.16.1.50',master_user='slave',master_password='123456',master_log_file='a',master_log_pos=b; mysql> slave start; #查看slave的状态,如果出现Slave_IO_Running(会出现延迟)和Slave_SQL_Running的状态都为 Yes,则表示以master01为主,slave的mysqld50实例为从的MySQL主从复制服务搭建成功。 mysql> show slave status\G; …………………………………………………………………………………………………………………… Slave_IO_Running: Yes Slave_SQL_Running: Yes …………………………………………………………………………………………………………………… [root@MYSQL-slave-01 ~]# mysql -uroot -S /data/3308/mysql.sock -p123456 mysql> slave stop; mysql> reset slave; #其中a和b为master01上的bin-log文件名和pos的数值 mysql> change master to master_host='172.16.1.51',master_user='slave',master_password='123456',master_log_file='a',master_log_pos=b; mysql> slave start; #查看slave的状态,如果出现Slave_IO_Running(会出现延迟)和Slave_SQL_Running的状态都为 Yes,则表示以master02为主,slave的mysqld51实例为从的MySQL主从复制服务搭建成功。 mysql> show slave status\G; …………………………………………………………………………………………………………………… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……………………………………………………………………………………………………………………
至此,slave和master的主从复制搭建成功
第三步:
搭建keepalived环境,实现两台master的故障转移
[root@MYSQL-master-01 ~]# yum -y install keepalived [root@MYSQL-master-01 ~]# service keepalived restart [root@MYSQL-master-01 ~]# chkconfig keepalived on [root@MYSQL-master-01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 9194973x@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id master01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.1.52/24 dev eth0 label eth0:1 } }
master02服务器上的操作:
[root@MYSQL-master-02 ~]# yum -y install keepalived [root@MYSQL-master-02 ~]# service keepalived restart [root@MYSQL-master-02 ~]# chkconfig keepalived on [root@MYSQL-master-02 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 9194973x@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id master02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.1.52/24 dev eth0 label eth0:1 } } [root@MYSQL-master-02 ~]# service keepalived restart
至此,整个实验完成,本实验仅供学习交流。
相关文章推荐
- Mysql双主复制搭建和基于keepalived的故障转移
- MySQL主主复制+LVS+Keepalived实现MySQL高可用性
- Redis + Keepalived主从集群的搭建及故障转移
- mysql 主从复制和主主复制配置
- mysql主从复制配置操作以及主主配置宕机切换演练
- MySQL数据的主从复制、半同步复制和主主复制详解
- MySQL数据的主从复制、半同步复制和主主复制详解
- mysql 主从复制(主主复制)
- MySQL主从延迟复制实践及生产故障案例恢复实践
- mysql 主从复制及相关故障说明
- MySQL主从复制、半同步复制和主主复制概述
- MySQL主从复制与主主复制
- mysql传统主从、双主复制+keepalived配置步骤
- MySQL主主复制+Keepalived 打造高可用MySQL集群
- MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移
- windows下mysql互为主从(主主复制)
- MySQL主从复制与主主复制
- Mysql主从复制从库状态双Yes及seconds_behind_master为0的故障分析
- MySQL主从复制与主主复制
- mysql主主复制+keepalived实现高可用