博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql学习笔记-----读写分离+高可用
阅读量:3959 次
发布时间:2019-05-24

本文共 12534 字,大约阅读时间需要 41 分钟。

什么叫读写分离

中间件:middleware

客户机访问web服务器----> web服务器通过中间件来访问后面的db,如果是要读取数据库里的内容,中间件会任选一台db进行读取,如果是要往数据库里写内容,则只往主库里写,从而实现读写分离。

读与写会访问mysqlrouter不同的端口

中间件的种类:

MySQLrouter ----mysql官方提供的
mycat — 开源,中国,数据库分库分表的中间件

什么是分库分表

分库分表就是为了解决由于数据量过大,而导致的数据库的性能下降的问题,将原来独立的数据库拆分为若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库,单一数据表的数据量变小,从而达到提升数据库性能的问题

分表:一张商品信息表,可以将访问频次低的商品描述信息单独存放在一张表中,将访问频次较高的商品的基本信息单独存放在一张表中。

垂直分库:就是根据业务耦合性,将关联度低的不同表存储在不同的数据库垂直分表: 将一个表按照字段分成多表,每个表存储其中一部分字段优点:避免io争抢并减少锁表几率,查看详情的用户与商品信息浏览,互不影响;充分发挥热门数据的操作效率,商品信息的操作的高效率不会被商品描述的低效率所拖累。水平分库水平分表

实操

项目名称:双vip的mysql高可用集群

项目环境:6台服务器,centos7.8 mysql 5.7.30 msyqlrouter :8.0.21 keepalived:2.0.10
项目描述:本项目的目的是构建一个高可用的能实现读写分离的高效的mysql集群,来确保业务的稳定,能沟通方便的监控整个集群,同时能批量的去部署管理整个集群。
项目步骤:
1,安装好centos7.8的系统,部署好ansible,在所有的机器之间配置ssh免密通道,、
2,部署zabbix监控系统
3,通过ansible去部署以二进制方式安装mysql(通过脚本一键安装)
4,使用ansible 安装mysqlrouter 和keepalived ,在另外2台中间件服务器上,实现读写分离和高可用,在keepalived上配置两个vip,互为master和backup ,更加好的提升高可用的性能,采用双vip
5,在3台mysql服务器上配置好主从复制,形成master+slave节点的集群,提供数据库服务
6, 尝试部署mysql的failover插件,实现自动的故障切换,确保master宕机,能自动提升另外一台slave为主,另外一台slave自动切换到新的master 上获取二进制日志
7,验证
8,使用压力测试软件来测试

环境准备:

三台机器mysqlrouter  :192.168.0.211master :192.168.0.171slave  :192.168.0.173

具体步骤:

1,去官网下载mysqlrouter 安装包,传入linux

[root@mysqlrouter ~]# lsanaconda-ks.cfgmysql-router-community-8.0.21-1.el7.x86_64.rpm#安装[root@mysqlrouter ~]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm 警告:mysql-router-community-8.0.21-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY准备中...                          ################################# [100%]正在升级/安装...   1:mysql-router-community-8.0.21-1.e################################# [100%]#查看mysqlrouter的配置文件[root@mysqlrouter ~]# cd /etc/mysqlrouter[root@mysqlrouter mysqlrouter]# lsmysqlrouter.conf

修改mysqlrouter的配置文件

[root@mysqlrouter mysqlrouter]# vim mysqlrouter.conf    [root@mysqlrouter mysqlrouter]# cat mysqlrouter.conf [DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouterconfig_folder = /etc/mysqlrouter[logger]level = INFO[keepalive]interval = 60[routing:read_write]bind_address = 192.168.0.211   bind_port = 7001mode = read-writedestinations = 192.168.0.171:3306max_connections = 65535max_connect_errors = 100client_connect_timeout = 9[routing:read_only]bind_address = 192.168.0.211bind_port = 7002mode = read-onlydestinations = 192.168.0.173:3306max_connections = 65535max_connect_errors = 100client_connect_timeout = 9

启动mysqlrouter的服务

[root@mysqlrouter mysqlrouter]# service mysqlrouter startRedirecting to /bin/systemctl start mysqlrouter.service[root@mysqlrouter mysqlrouter]# netstat -antpluActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      7048/sshd           tcp        0      0 192.168.0.211:7001      0.0.0.0:*               LISTEN      20972/mysqlrouter   tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7222/master         tcp        0      0 192.168.0.211:7002      0.0.0.0:*               LISTEN      20972/mysqlrouter   tcp        0     36 192.168.0.211:22        192.168.0.39:62193      ESTABLISHED 20704/sshd: root@pt tcp        0      0 192.168.0.211:22        192.168.0.28:56784      ESTABLISHED 18280/sshd: root@pt tcp6       0      0 :::22                   :::*                    LISTEN      7048/sshd           tcp6       0      0 ::1:25                  :::*                    LISTEN      7222/master

在master主机上新建用户并授权

wangwang ----可读可写---7001---->masterlele  ----只读----7002----->slave
root@(none) 16:43  mysql>grant all on *.* to "wangwang"@"%" identified by 'Sanchuang123#';Query OK, 0 rows affected, 1 warning (0.01 sec)root@(none) 16:47  mysql>grant select on *.* to 'lele'@'%' identified by 'Sanchuang123#';Query OK, 0 rows affected, 1 warning (0.01 sec)

测试:

在开启一台虚拟机,充当客户机—192.168.0.172

[root@delay log]# mysql -h 192.168.0.211 -uwangwang -p'Sanchuang123#' -P7001mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 8Server version: 5.7.30-log MySQL Community Server (GPL)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show processlist;+----+----------+---------------------+------+-------------+--------+---------------------------------------------------------------+------------------+| Id | User     | Host                | db   | Command     | Time   | State                                                         | Info             |+----+----------+---------------------+------+-------------+--------+---------------------------------------------------------------+------------------+|  3 | xionghan | 192.168.0.173:44698 | NULL | Binlog Dump | 112898 | Master has sent all binlog to slave; waiting for more updates | NULL             ||  5 | root     | localhost           | NULL | Sleep       |   1755 |                                                               | NULL             ||  7 | xionghan | 192.168.0.172:58874 | NULL | Binlog Dump |   1228 | Master has sent all binlog to slave; waiting for more updates | NULL             ||  8 | wangwang | 192.168.0.211:52592 | NULL | Query       |      0 | starting                                                      | show processlist |+----+----------+---------------------+------+-------------+--------+---------------------------------------------------------------+------------------+4 rows in set (0.00 sec)mysql> create database sc_mysql;Query OK, 1 row affected (0.01 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || chenran            || mysql              || performance_schema || sanchuang          || sc                 || sc_mysql           || sys                || wang1              || wangwang           || wangwang1          || xh1                || xionghan           |+--------------------+13 rows in set (0.07 sec)mysql>

实验改进,做mysqlrouter的高可用

再加一台机器,Mysqlrouter2,并用keepalived来做高可用,一台做master,一台做backup,用keepalived , --> vip问题:可能会出现一台闲置,如何解决?再搞一个vip,双vip实现keepalived 双主热备mysqlrouter-master :192.168.0.211  ----master  vip:192.168.0.233 backup  vip :192.168.0.234mysqlrouter-backup :192.168.0.212  ----master  vip :192.168.0.234  backup  vip :192.168.0.233在两台机器上安装并配置mysqlrouter 和keepalived

mysqlrouter的安装及配置如上:

keepalived 的安装及配置如下:

keepalived 的安装

[root@mysqlrouter-master mysqlrouter]# yum install keepalived -y已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirror.arizona.edu * extras: mirrors.163.com * updates: mirrors.aliyun.com
[root@mysqlrouter-backup mysqlrouter]# yum install keepalived -y已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirror.arizona.edu * extras: mirrors.163.com * updates: mirrors.aliyun.com *

mysqlrouter-master的配置

[root@mysqlrouter-master keepalived]# cat keepalived.conf ! Configuration File for keepalivedbal_defs {
notification_email {
acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_instance VI_1 {
state MASTER interface ens33 virtual_router_id 51 priority 110 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
192.168.0.233 }}vrrp_instance VI_2 {
state MASTER interface ens33 virtual_router_id 52 priority 80 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
192.168.0.234 }}
[root@mysqlrouter keepalived]# cat keepalived.conf ! Configuration File for keepalivedglobal_defs {
notification_email {
acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_instance VI_1 {
state BACKUP interface ens33 virtual_router_id 53 priority 80 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
192.168.0.233 }}vrrp_instance VI_2 {
state MASTER interface ens33 virtual_router_id 54 priority 110 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
192.168.0.234 }}
[root@mysqlrouter-master mysqlrouter]# ip add1: lo: 
mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:2b:30:73 brd ff:ff:ff:ff:ff:ff inet 192.168.0.211/24 brd 192.168.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.0.233/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.0.234/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe2b:3073/64 scope link valid_lft forever preferred_lft forever
[root@mysqlrouter-backup ~]# ip add1: lo: 
mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:05:d6:86 brd ff:ff:ff:ff:ff:ff inet 192.168.0.212/24 brd 192.168.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.0.234/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.0.233/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe05:d686/64 scope link valid_lft forever preferred_lft forever

设置keepalived开机启动

[root@mysqlrouter-master ~]# systemctl enable keepalivedCreated symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.[root@mysqlrouter-master ~]# systemctl list-unit-files|grep keepalivedkeepalived.service                            enabled
[root@mysqlrouter-backup ~]# systemctl enable keepalivedCreated symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.[root@mysqlrouter-backup ~]# systemctl list-unit-files|grep keepalivedkeepalived.service

测试访问:

[root@delay ~]# mysql -h 192.168.0.234 -uwangwang -p'Sanchuang123#' -P7001mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 13Server version: 5.7.30-log MySQL Community Server (GPL)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
[root@delay ~]# mysql -h 192.168.0.233 -uwangwang -p'Sanchuang123#' -P7001mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 14Server version: 5.7.30-log MySQL Community Server (GPL)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

未完待续。。。

转载地址:http://jqlzi.baihongyu.com/

你可能感兴趣的文章
[管理] 成功之路的探寻 —— “三力” 理论
查看>>
[连载] Socket 深度探索 4 PHP (一)
查看>>
[无线] Android 系统开发学习杂记
查看>>
[无线] 浅析当代 LBS 技术
查看>>
[杂感] 缅怀乔布斯
查看>>
[无线] 让Android支持cmwap上网
查看>>
[无线] AndroidManifest.xml配置文件详解
查看>>
[移动] Mosquitto简要教程(安装/使用/测试)
查看>>
[HTML5] 关于HTML5(WebGL)的那点事
查看>>
自我反思
查看>>
初识网络编程
查看>>
东北赛选拔教训
查看>>
hash
查看>>
涨姿势了:求两个分子的最大公倍数
查看>>
快速幂
查看>>
vector.reserve and resize &&vector与map结合
查看>>
最长公共子序列
查看>>
计算几何
查看>>
求解方程
查看>>
太弱了。。水题
查看>>