Maria10实现主从复制架构及SSL复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介:

需求架构

wKioL1NaiXqTBOgtAAGdUZq9ZDA040.jpg


准备工作

主从服务器时间同步

1
2
# 主从服务器同时配置crontab任务,与NTP服务器同步时间即可
* /5  * * * * ntpdate 172.16.0.1 &> /dev/null

MariaDB的安装

   详见博客“MySQL初识-架构-安装-初始化-连接-管理工具-数据文件


部署配置

主库配置

1
2
3
4
5
6
7
8
9
10
11
vi  /etc/my .cnf
     server- id  = 1  # 在复制架构中,需保持全局唯一
     log-bin = mysql-bin  # 默认在数据目录下
     sync_binlog = 1  # 设置mariadb每次在提交事务前会将二进制日志同步到磁盘,保证服务器崩溃时不会丢失事件
=====
service mysqld start  # 启动mariadb10
=====
mysql -hlocalhost -uroot -p  # 登录mysql
MariaDB [mysql]> grant replication slave,replication client on *.* to  'repluser' @ '172.16.%.%'  identified by  'replpass' # 创建最小权限的复制账号
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> show master status;  # 查看主库的状态信息

wKioL1Nai5fgVvYsAAHQjGQ3S7A342.jpg


从库配置

1
2
3
4
5
6
7
8
9
10
11
12
13
vi  /etc/my .cnf
     server- id  = 11  # 在复制架构中,需保持全局唯一
     log-bin = mysql-bin  # 也可设置为none,即关闭从库的二进制日志
     relay-log= /data/relaylogs/relay-bin  # 设置中继日志文件
     log-slave-updates = 1  # 允许从库将其重放的事件也记录到自身的二进制日志中
     read_only = 1  # 从库设置为只读
=====
service mysqld start  # 启动mariadb10
=====
mysql -hlocalhost -uroot -p  # 登录mysql
MariaDB [mysql]> change master to master_host= '172.16.251.123' ,master_user= 'repluser' ,master_password= 'replpass' ,master_log_file= 'master-bin.000005' ,master_log_pos=379;  # 连接主库
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G 查看从库状态

wKiom1NajRjgqUcpAAQK7ziCark469.jpg


验证

1
2
3
4
5
6
7
# 在主库上新建数据库并创建数据
MariaDB [(none)]> create database test_for_replication;
MariaDB [(none)]> create table test_for_replication.user( id  int not null primary key auto_increment,name char(20) not null,year int not null,classid int not null);
MariaDB [(none)]> insert into test_for_replication.user(name,year,classid) values( 'Jason Kk' ,23,2),( 'Hello Kitty' ,18,1);
# 查看从库能否正常同步数据
MariaDB [(none)]>  select  * from test_for_replication.user;  # 见下图1
MariaDB [(none)]> show slave status\G  # 见下图2

图1

wKioL1NajbuT5Z4mAAFp74FsT9w733.jpg

图2

wKioL1NajqGCubCsAAQpXb_BfJE097.jpg

可以看出主从同步正常,数据无误!



基于SSL进行安全复制

生成SSL证书及私钥

主从服务器都需要获得各自的证书,具体步骤详见“图解openssl实现私有CA

主库和从库各需的证书文件有:

wKiom1NamouCh79IAAFZXip6VAQ897.jpg


主库配置

SSL支持状态检查

wKiom1NakfSy1e9LAAHZf2OCumE450.jpg

  • 若have_ssl的值为YES,则表明SSL功能已开启使用;

  • 若have_ssl的值为NO,则说明SSL功能并未编译进目前的Mariadb,需要重新编译程序;

  • 若have_ssl的值为DISABLED,则表示mariadb编译时加载了SSL功能,但未启用,一般以通用二进制程序安装的Mariadb都是此值;

查看库文件:

1
2
3
ldd ` which  mysqld` |  grep  ssl  # 还需查看是否存在libssl.so文件,若不存在,则说明缺少库文件
# 麻烦的是若要安装此缺少的库文件,则需安装libopenssl.1.0.0的程序包,但这个包的安装依赖于glibc2.14版本,而CentOS6.5系统上原生的是glibc2.12版本的,这下就又涉及glibc的升级了,过于麻烦了,而且也很危险,故放弃之
# 那么就只能重新编译安装mariadb10了,从官网下载最新版的源码包安装吧(www.mariadb.com)

Mariadb编译安装完成后,就可以配置基于SSL的安全复制了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
chown  -R mysql.mysql  /etc/master/ssl/  # 注意修改认证相关文件的权限
=====
vi  /etc/my .cnf  # 在mysqld段下添加如下内容
[mysqld]
ssl_ca=  /etc/master/ssl/cacert .pem  # 配置CA证书
ssl_cert =  /etc/master/ssl/master .crt  # 配置主库证书
ssl_key =  /etc/master/ssl/master .key  # 配置主库私钥
ssl_cipher = DHE-RSA-AES256-SHA  # 指定支持的加密算法
=====
service mysqld reload  # 重载配置
=====
# 再次查看相关变量:
MariaDB [(none)]> show variables like  '%ssl%'  # 见下图
# 创建复制账户:
MariaDB [mysql]> grant replication slave,replication client on *.* to  'repluser' @ '172.16.%.%'  identified by  'replpass'  require ssl;  # 特别明确必须通过SSL才能复制

wKioL1Nak4Sxf5k0AALjW953ZL4200.jpg


从库配置

1
2
3
4
5
chown  -R mysql.mysql  /etc/slave/ssl/
=====
MariaDB [mysql]> change master to master_host= '172.16.251.123' ,master_user= 'repluser' ,master_password= 'replpass' ,master_log_file= 'mysql-bin.000010' ,master_log_pos=776,master_ssl=1,master_ssl_ca= '/etc/slave/ssl/cacert.pem' ,master_ssl_cert= '/etc/slave/ssl/slave.crt' ,master_ssl_key= '/etc/slave/ssl/slave.key' # 在连接主库时直接指定本地从库的证书文件等信息
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G  # 查看从库状态

wKiom1NalQDQLV_bAAfjqT5VsdY496.jpg


从库的另一种配置方法

1
2
3
4
5
6
7
8
vi  /root/ .my.cnf  # 在client段下配置从库证书信息
[client]
ssl_ca =  /etc/slave/ssl/cacert .pem
ssl_cert =  /etc/slave/ssl/slave .crt
ssl_key =  /etc/slave/ssl/slave .key
ssl_cipher = DHE-RSA-AES256-SHA
=====
MariaDB [mysql]> change master to master_host= '172.16.251.123' ,master_user= 'repluser' ,master_password= 'replpass' ,master_log_file= 'mysql-bin.000010' ,master_log_pos=776,master_ssl=1;  # 只需指定master_ssl=1即可


验证

1
2
3
4
5
# 主库写入:
create  test .table t1(name char(20) not null,age int not null);
# 从库读取;
show tables  for  test ;
# 验证结果见下图

wKioL1NalULhDfW5AAH56fosqLY890.jpg










本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1403258,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis高可用之主从复制架构(第一部分)
Redis高可用之主从复制架构(第一部分)
|
26天前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
218 2
|
2月前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
2月前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
2月前
|
关系型数据库 MySQL Linux
Linux下搭建MySQL主从复制之一主一从架构
Linux下搭建MySQL主从复制之一主一从架构
90 0
|
2月前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
2月前
|
设计模式 容灾 关系型数据库
MySQL 主从复制架构
MySQL 主从复制架构
|
2月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
负载均衡 监控 关系型数据库
MySQL数据库的主从复制和高可用性架构
MySQL数据库的主从复制和高可用性架构
聊聊MySQL架构演进:从主从复制到分库分表
背景 业务飞速发展导致数据规模急速膨胀,单机的数据库已经无法满足互联网业务的发展。 传统的将数据集中存储单一数据结节的方案,在容量、性能、可用性和可维护性方面已经难以满足互联网海量数据的场景。