热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

教你构建MySQL主从结构,实现基于SSL加密的主从同步机制。

实验环境RHEL6.4admin1.tuchao.com192.168.1.201主服务器admin2.tuchao.com192.168.1.202从服务器先在两个机器上安装my

实验环境RHEL6.4

    admin1.tuchao.com    192.168.1.201    主服务器

    admin2.tuchao.com    192.168.1.202    从服务器


先在两个机器上安装mysql5.5.3,mysql的安装流程我这里就省略了。

主服务器配置:

设置一个唯一的server_id,在配置文件中定义。

server_id = 10

启用二进制日志,默认是启用的。

创建具有复制权限的用户

  • grant replication slave,replication client on *.* to 'tuchao'@'192.168.1.%' identified by '123456';


注意这里在初始化MySQL完成后要滚动一下日志(flush logs;)并记录当前的 show master status 状态,在从服务器上指定同步的状态,避免了主键重叠的错误。

我们先看下主服务器上的数据

wKioL1PPcdfjTewVAAFGi0sKSTY220.jpg

接下来去配置从服务器:

wKiom1PPd7yzOGHeAAHFZnaYMZY370.jpg


指定主服务器,指定同步的二进制日志及

  • change master to master_host='192.168.1.201',master_user='tuchao',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;

启动复制线程

  • start slave;

  • show slave status\G

 wKioL1PQXD6hXm6gAAIGoyFJ_kk787.jpg

Seconds_Behind_Master: 0    这个值表示从服务器比主服务器落后多长时间


复制线程正常工作了,我们看看数据有没有同步过来。

wKiom1PQXBXD98EWAADxDOh9vjA585.jpg

我们还要了解下,在从服务器数据目录的两个文件。

master.info

wKioL1PQXy-RKvFJAAF-hd5ORYU492.jpg

relay-log.info  而这个文件则记录了,当前服务器的中继日志和主服务器的二进制日志及pos位置。

设置MySQL的半同步机制,先来看看我为大家准备的图,了解下什么是MySQL的半同步。

wKiom1PQYQyD_VKQAAFJ-qL7H1w978.jpg

Master:

安装semisync_master.so插件

  • install plugin rpl_semi_sync_master soname 'semisync_master.so';

查看相关变量。

  • show global variables like '%semi%';

+------------------------------------+-------+

| Variable_name                      | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled       | OFF   |

| rpl_semi_sync_master_timeout       | 10000 |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

+------------------------------------+-------+

默认是功能是关闭的,需要启动起来。

  • set global rpl_semi_sync_master_enabled = 1;

设置等待slave相应的时间

  • set global rpl_semi_sync_master_timeout = 2000;

再查看验证一下。

> show global variables like '%semi%';

+------------------------------------+-------+

| Variable_name                      | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled       | ON    |

| rpl_semi_sync_master_timeout       | 2000  |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

+------------------------------------+-------+

Slave:

安装semisync_slave.so插件

  • install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

启用功能

  • set global rpl_semi_sync_slave_enabled = 1;

验证

  • show global variables like 'rpl_semi%';

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled     | ON    |

| rpl_semi_sync_slave_trace_level | 32    |

+---------------------------------+-------+

重启IO线程,或者重启Slave都可以。

  • stop slave

  • start slave


查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:

show global status like '%semi%';

wKioL1PQZmzxII-IAAIWD7BfFPA190.jpg

可以写到my.cnf中永久生效。

Master  

[mysqld]  

rpl_semi_sync_master_enabled=1  

rpl_semi_sync_master_timeout=1000 # 1 second  

innodb_flush_logs_at_trx_commit=1  当有事务提交时,会立即记录日志,并同步到磁盘。

sync_binlog=1

Slave  

[mysqld]  

rpl_semi_sync_slave_enabled=1  

read_only=1

skip_slave_start=1    跳过自启动Slave

基于SSL加密的同步复制

先在主服务器上自建CA,生成密钥,创建自签名证书。

  • (umask 077;openssl genrsa -out private/cakey.pem 2048)

  • openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 365

  • touch index.txt

  • echo '01' >serial

生成密钥,创建服务证书申请,签署服务证书。

  • cd /usr/local/mysql

  • mkdir ssl

  • (umask 077;openssl genrsa -out ssl/master.key 2048)

  • openssl req -new -key ssl/master.key  -out ssl/master.csr -days 100

  • openssl ca -in ssl/master.csr -out ssl/master.crt -days 100

  • chown -R mysql.mysql ssl

wKioL1PQf-jQoLWhAAKHPMZLvl4308.jpg

修改my.cnf添加如下内容:

ssl

ssl-ca=/etc/pki/CA/cacert.pem

ssl-cert=/usr/local/mysql/ssl/master.crt

ssl-key=/usr/local/mysql/ssl/master.key

重启mysqld服务


来到从服务器,生成密钥申请证书。

  • mkdir ssl

  • (umask 077;openssl genrsa -out ssl/mysql.key 2048)

  • openssl req -new -key ssl/mysql.key  -out ssl/mysql.csr -days 100

把请求书,复制到CA上。

scp ssl/mysql.csr admin1:/etc/pki/CA

CA签署证书,并且把签好的证书和CA自己的证书复制到从服务器。

  • openssl ca -in mysql.csr -out mysql.crt -days 100

  • scp cacert.pem mysql.crt admin2:/usr/local/mysql/ssl/

修改权限

  • chown -R mysql.mysql ssl

在从服务器my.cnf文件加入一行ssl。

重启mysql服务

主服务器授权openssl用户

  • grant replication slave,replication client on *.* to openssl@'admin2.tuchao.com' identified by '123456';

flush privileges;

切到从服务器,指定master。

  • spacer.gifchange master to master_host='admin1.tuchao.com',master_user='openssl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=360,master_ssl=1,master_ssl_ca='/usr/local/mysql/ssl/cacert.pem',master_ssl_cert='/usr/local/mysql/ssl/mysql.crt',master_ssl_key='/usr/local/mysql/ssl/mysql.key';

启动复制线程

  • start slave;

查看slave状态

wKioL1PQkTSwQkuaAALTt9dByBg773.jpg

配置成功,还可以通过命令来检测SSL。

  • mysql --ssl-ca=/usr/local/mysql/ssl/cacert.pem   --ssl-cert=/usr/local/mysql/ssl/mysql.crt --ssl-key=/usr/local/mysql/ssl/mysql.key -uopenssl -hadmin1.tuchao.com -p123456

wKioL1PQkhHiCzxqAAGpXNUyANo446.jpg


有问题欢迎与我交流QQ1183710107




推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中安装 Python 3.7 的步骤,包括编译工具的安装、Python 3.7 源码的下载与编译、软链接的创建以及常见错误的处理方法。 ... [详细]
  • 本文详细探讨了在使用 Python 的 pip 工具安装包时遇到的 ReadTimeoutError 错误,并提供了有效的解决方案。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 本文介绍了实时流协议(RTSP)的基本概念、组成部分及其与RTCP的交互过程,详细解析了客户端请求格式、服务器响应格式、常用方法分类及协议流程,并提供了SDP格式的深入解析。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
author-avatar
捷克先生2012_929
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有