Master/Slave

                  Master: write/read

                   Slaves: read

企业mysql架构环境:

     一主多从,主服务器负责写,从服务器提供读请求

为什么?

        冗余:promte(提升为主),异地灾备

                   人工

                 工具程序: MHA

负载均衡:转移一部分“读”请求;

         支援安全的备份操作;

             测试;

主从复制的原理:利用二进制日志文件和中继日志文件,主服务器将所有的操作写入二进制文件,从服务器

通过i/o线程,不断申请 加载主服务器的二进制文件,存储到从服务器的中继日志中,sql线程通过读取中继

日志,将主服务器中的操作在从服务商进行重放

/从架构:

异步复制:mysql server master 不需要确认从服务受到数据,直接进行操作

半同步复制:半同步复制是基于Google MySQL开发的半同步复制的插件。

半同步 复制的原理是,一个事务在主服务器上执行完成后,必须至少确保至少在一台从服务器   

上执行完成后,事务才算提交成功。如果在一定时间内从服务器没有响应,则会自动降 级为异

步复制

一主多从;

一从一主;

级联复制;黑洞引擎:用于级联复制中,有三台 mysql AB B同步A 中的数据,

         C同步B中的数据,其中B数据就可以使用黑洞引擎只记录二进制文件,不将数据记录

     到磁盘中,减少I/O读写

应用场景:当mysql主服务器读写压力过大时,中间可以加入 B服务,用于减少压力

循环复制;

双主复制;

一从多主:

         每个主服务器提供不同的数据库;

配置环境:

     配置注意:

          注意时间同步

          主服务器的版本高于或者等于从服务器版本      

复制的开始位置:

      0开始;

       从备份中恢复到从节点后启动的复制;

     mariadb版本:5.5

     系统版本:centos7

     mariadbserver1(master) ip:192.168.1.36

     mariadbserver2(slave)ip:192.168.1.128

mysql 基于ssl实现mysql主从复制:


     一:实现mysql用户能基于ssl连接:

     

配置环境:

     mysql server: 

           hostname:Myserver

          system version:centos7

          mysql version:mariadb5.5.44

          ip地址:192.168.1.133

     mysql client:

          hostname:Myclient

          系统版本:centos7

          mysql client:mariadb5.5

          ip address:192.168.1.128


 

    Myserver主机配置配置:    


    

      证书生成   

      由Myserver服务器自谦CA证书,并给自己和Myclient 颁发证书        

 1、 设置CA自签发:

  wKiom1hFeuKwXxQJAAAQJ9z2NmY869.png

2、 创建序列号文件和数据库文件

   wKiom1hFcf3CZyHAAAASp95BKto846.png

 3、生成私钥:

   mysql主从复制配置_第1张图片

         

   4、生成自签证书

wKiom1hFcf7zu_-pAAAiEPmMwM8420.png

          

5、生成申请证书文件

mysql主从复制配置_第2张图片

           

  6、签发证书:

mysql主从复制配置_第3张图片

           

  7、复制CA  cacert.pem 和私钥  cakey.pem 到/etc/mariadb/ssl中      

 wKioL1hFcf-zzEevAAAZXzPjTjE655.png

   


  

     mysql 配置

 1、安装mariadb并启动mysql

 2、添加授权用户,并要求使用基于ssl远程连接

mysql主从复制配置_第4张图片   

 3、创建/etc/mariadb/ssl目录用于存放证书,CA,密钥

 4、编辑配置文件/etc/my.cnf在[mysqld]开启ssl,重新启动服务

  wKiom1hFcgDht1-8AAAEaETGntc991.png

   登录mysql查看ssl功能是否开启

mysql主从复制配置_第5张图片

     

 5、编辑配置文件在[mysqld]配置段,添加证书文件,重启服务

  mysql主从复制配置_第6张图片


mysql主从复制配置_第7张图片



Myclient配置:

          

1、生成私钥

mysql主从复制配置_第8张图片  

2、生成申请证书文件,并将其发给Myserver服务器

wKioL1hFcgHzNfcoAAAWM7DY47U556.png

    

3、由Myserver生成给Myclient生成证书,将Myserver中的cacert.pem和生成的客户端证书一起发给Myclient的/etc/mariadb/ssl文件中,将自己的私钥文件也放到此目录中

  wKiom1hFcgKCjilxAAAY0qtPklM009.png

   mysql主从复制配置_第9张图片

wKiom1hFcgKDoOqpAAARqUGMXgk373.png


   Myserver端:

  mysql主从复制配置_第10张图片

 wKioL1hFcgPD8yAzAAAP0mglJMc771.png

 

 客户端测试基于ssl连接Myserver:

 cd /etv/mariadb/ssl  mysql主从复制配置_第11张图片


  可能出现的错误:

  Myserver中添加ssl和ssl证书路径等,如果出现了hava_ssl 状态为DISABLED,日志中提示如下错误 

mysql主从复制配置_第12张图片

 解决办法: 

wKioL1hFcgSwR00gAAAGOhngOCA937.png

     

     

 二:在第一步上完成主从配置:                          

通过完全备份,将主服务的数据导入到从服务器

 master 配置:

1开启二进制文件,开启方式编辑/etc/my.cnf ,添加如下内容,之后重新启动服务

 配置开启二进制文件

mysql主从复制配置_第13张图片

开启ssl和指明证书相关文件、  

mysql主从复制配置_第14张图片

 2、进入mysql添加用于主从复制的用户

 wKioL1hFcgTANQjoAAAU8c7CppU789.png

  3、重新启动服务即可

slave配置:

 1编辑主配置文件/etc/my.cnf 

  开启中继日志

mysql主从复制配置_第15张图片

 添加ssl证书:

  mysql主从复制配置_第16张图片

 2、重新启动服务

 3、查看主节点的此时二进制文件的名称和位置,基于二进制文件和此位置进行复制同步

mysql主从复制配置_第17张图片

 查看二进制文件日志时间,也可以根据此二级值日志文件不同事件的位置进行同步,例如从479开始

 mysql主从复制配置_第18张图片

 4、在slave中添加主节点:

 mysql主从复制配置_第19张图片

 5、设置salve为只读

     配置文件中添加read_only :对管理员不生效啊

mysql主从复制配置_第20张图片

     

6、slave start;开启从服务

7、show slave status\G:显示从服务


主从复制常见问题

     问题一: io线程始终保持为connecting状态

主从架构中,从库的io_thread一直保持connecting状态。先理解Slave_IO_Running 为connecting,的含义。造成的主要有三个:

  1、网络不通 (是否打开防火墙)

  2、复制用户的密码不对 (主从同步指定的用户密码主机名限制)

  3、pos不对 (指定的position不正确)

  4.主键冲突,报1062错误

     

   问题二:在搭建主从时,报1201错误 。ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL

      error   log

 解决方法:出现这个问题的原因是之前曾做过主从复制!需要reset slave后再change


     问题三:    

     从库同步慢

  主从架构中,从库的同步数据非常慢。出现主从同步慢的原因有:

  1.主从同步延迟与系统时间的关系,查看主从两台机器间系统时间差

  2.主从同步延迟与压力、网络、机器性能的关系,查看从库的io,cpu,mem及网络压力

  3.主从同步延迟与lock锁的关系(myisam表读时会堵塞写),尽量避免使用myisam表。一个实例里面尽量减少数据库的数量。

     

     问题四:从服务器落后主服务器怎么办

     查看从服务器落后主服务器:  show slave status\G

             seconds_behind_master:是否落后主服务器,落后主服务器的时间;

     停止从服务器然后在重新启动从服务器

     或者基于半同步方式进行主从复制


mysql 半同步复制:    

在主从同步的基础上配置半同步复制:     

mysql支持多种插件:/usr/lib64/mysql/plugins/

 master:

1、登录mysql安装PLUGIN模块

  wKiom1hFcgayKaGVAAAPNGOf4_s625.png

 2、查看插件是否安装完成

mysql主从复制配置_第21张图片    

 3、查看安装完插件生成的相关变量,确保第一个变量值为ON


mysql主从复制配置_第22张图片

 rpl_semi_sync_master_timeout:设置超时时间,超过此值主服务器连得不到从服务响应自动将其降级为普通的从服务器 

 设置永久生效编辑配置文件,重新启动服务wKiom1hFeuHTvm8VAAAK3ajjwqM795.png

     

 slave:

1、安装从服务需要的插件rpl_semi_sync_slave

wKioL1hFeuGC50pGAAARvY3Xec0552.png

2、编辑配置文件:

 wKioL1hFeuHQ7nnzAAAKzuTnPjo651.png

 3、重新启动slave;

      slave stop;

      slave  start;     

 查看主服务器中半同步状态:

     mysql主从复制配置_第23张图片


     关注重点:

     

          Rpl_semi_sync_master_net_avg_wait_time:网络等待的平均时间时间长查看带宽是   否够用单位 ms

         Rpl_semi_sync_master_net_wait_time 网络等待时间:

         Rpl_semi_sync_master_net_waits  网络等待次数:

         Rpl_semi_sync_master_tx_avg_wait_time :等待事务的提交的平均时间

         Rpl_semi_sync_master_tx_wait_time :等待事务的总时长

         Rpl_semi_sync_master_tx_waits:等待事务提交的总次数


测试从服务器故障自定降级:

     如果rpl_semi_sync_slave_enabled的值为在配置文件中配置,而是利用set 设置,重启mysql     slave,当主服务更新数据库时会出现连接超时自动降级