设为首页 收藏本站
查看: 1079|回复: 0

[经验分享] 读写分离+HA(mysql proxy+keepalived+mysql mmm)

[复制链接]

尚未签到

发表于 2018-12-31 10:16:51 | 显示全部楼层 |阅读模式
数据库的整体架构
  架构说明:
  1, 数据库之间做主从复制,实现双主多备
  2, 在数据库之间利用mysql-mmm套件实现HA,并用monitor进行监听
  3, 利用mysql-proxy进行读写分离
  4, 利用keepalived实现mysql-proxy的高可用
  优势:
  1, 数据库得到高可用的保护,当主库其中一个节点宕机,备用的主库进行切换,保证应用的正常进行。
  2, 利用mysql-proxy进行读写分离,可以减轻主库的负载,并且能对从库进行负载均衡。
  3, 对mysql-proxy采用keepalived的方法,实现对应用层的透明,并且保证mysql-proxy的高可用性。
  4, 利用mysql-proxy可为日后的数据库改造,切分提供了有利的条件。
软件:
  Mysql数据库   mysql-5.0.87.tar.gz
  Mysql-mmm套件(做数据库的高可用) mysql-mmm-2.2.1.tar.gz
  Keepalived套件(做mysqlproxy代理的高可用)
  Mysql-proxy软件(实现读写分离)
IP与服务器hostname分配
  192.168.21.5 monitor
  192.168.21.11 master1
  192.168.21.12 master2
  192.168.21.13 slave1
  192.168.21.14 slave2
  192.168.21.15 mysqlproxy1
  192.168.21.16 mysqlproxy2
数据库软件的安装:
  #移动数据库软件包到/usr/src目录下
  [root@test ~]# mv mysql-5.0.87.tar.gz /usr/src/
  #解压数据库软件包
  [root@test src]# tar –xzvf  mysql-5.0.87.tar.gz
  #建立目录
  [root@test src]# mkdir /var/run/mysqld
  #建立日志目录
  [root@test src]# mkdir /var/log/mysqld
  #添加mysql组
  [root@test src]# groupadd mysql
  #添加mysql用户
  [root@test src]# useradd –g mysql mysql
  [root@test src]# cd /usr/src/mysql-5.0.87
  #配置mysql
  --prefix=/usr/local/mysql  #安装目录
  --with- #设置字符集
  --with-extra-charsets=gb2312,utf8,gbk #设置额外支持字符集
  --with-server-suffix="-yzmyt" #添加数据库名称的后缀
  --with-pthread 支持多线程
  --with-unix-socket-path=/var/run/mysqld/mysql5.socket #设置unix socket路径
  --with-tcp-port=3306 #设置通信端口
  --with-mysqld-user=mysql #设置mysql用户
  --with-big-tables #设置支持大表
  --with-debug #设置为debug状态
  --with-***-storage-engine #设置示例支持的存储引擎
  [root@test mysql-5.0.87]# ./configure --prefix=/usr/local/mysql --enable-local-infile --with-charset=gb2312 --with-extra-charsets=gb2312,utf8,gbk --with-server-suffix="-yzmyt" --with-pthread --with-unix-socket-path=/var/run/mysqld/mysql5.socket --with-tcp-port=3306 --with-mysqld-user=mysql --with-zlib-dir=/usr --with-libwrap=/usr --with-low-memory --with-mysqlmanager --with-openssl --with-big-tables --with-debug  --with-example-storage-engine  --with-archive-storage-engine  --with-csv-storage-engine  --with-blackhole-storage-engine  --with-ndbcluster  --with-ndb-docs  --with-ndb-test  --with-federated-storage-engine
  #编译
  [root@test mysql-5.0.87]# make
  #安装
  [root@test mysql-5.0.87]# make install
  #创建my.cnf所在的文件文件目录
  [root@test mysql-5.0.87]# mkdir /usr/local/mysql/etc
  #创建my.cnf
  [root@test mysql-5.0.87]# vi /usr/local/mysql/etc/my.cnf
  #添加:
  [mysqld]
  #数据文件存储路径
  datadir=/data-source
  #socket文件路径
  socket=/var/run/mysqld/mysql5.socket
  #pid文件路径
  pid-file=/var/run/mysqld/mysql5.pid
  #log日志文件路径
  log=/var/log/mysqld/mysql5.log
  #错误日志文件路径
  log-error=/var/log/mysqld/mysql5-error.log
  #端口
  port=3306
  #所属用户
  user=mysql
  #默认存储引擎为innodb
  default-storage-engine=INNODB
  #初始化连接,设置为关闭自动提交
  init_connect='set autocommit=0'
  #日志形式
  log-bin=mysql-bin
  #服务器编号
  server-id=1
  #修改文件夹的所属组
  [root@test mysql-5.0.87]# chown mysql:mysql /var/log/mysqld /var/run/mysqld  /usr/src/local/mysql-5.0.87 -R
  #创建数据文件所在文件夹
  [root@test mysql-5.0.87]# mkdir /data-source
  #修改数据文件所在文件夹的属组
  [root@test mysql-5.0.87]# chown mysql:mysql /data-source -R
  #安装mysql数据库
  [root@test mysql-5.0.87]# /usr/local/mysql/bin/mysql_install_db --datadir=/data-source/ --user=mysql
  #拷贝服务启动文件
  [root@test mysql-5.0.87]# cp /usr/src/mysql-5.0.87/support-files/mysql.server /etc/rc.d/init.d/mysql5
  #改变mysql5的权限
  [root@test mysql-5.0.87]# chmod 755 /etc/rc.d/init.d/mysql5
  #启动数据库
  [root@test mysql-5.0.87]# service mysql5 start
  Starting MySQL SUCCESS!
  #进入数据库
  [root@test mysql-5.0.87]# /usr/local/mysql/bin/mysql -uroot -p
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 147
  Server version: 5.0.87-yzmyt-debug-log Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | test               |
  +--------------------+
  6 rows in set (0.00 sec)
  同理安装数据库到master2,slave1,slave2上
配置双主多从复制
  先配置master1和master2之间的互相复制
  在master1上执行:
  [root@master1 ~]# /usr/local/mysql/bin/mysql -uroot –p
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 6
  Server version: 5.0.87-terry-debug-log Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  创建用户允许远程访问本库
  mysql> grant replication slave,file on *.* to 'replication'@'192.168.1.12' identified by '123456';
  #刷新权限
  mysql> flush privileges;
  在master2上执行:
  [root@master2 ~]# /usr/local/mysql/bin/mysql -uroot –p
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 6
  Server version: 5.0.87-terry-debug-log Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  mysql> grant replication slave,file on *.* to 'replication'@'192.168.1.11' identified by '123456';
  mysql> flush privileges;
  然后修改master1和master2上的my.cnf
  master1上添加
  log-bin=mysql-bin
  server-id=1
  log-slave-updates
  slave-skip-errors=all
  sync_binlog=1
  auto_increment_increment=2
  auto_increment_offset=1
  master2上添加
  在master1上执行
  [root@master1 ~]# /usr/local/mysql/bin/mysql -uroot –p
  log-bin=mysql-bin
  server-id = 2
  log-slave-updates
  slave-skip-errors=all
  sync_binlog=1
  auto_increment_increment=2
  auto_increment_offset=2
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 7
  Server version: 5.0.87-terry-debug-log Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  #刷新表为只读状态
  mysql> flush tables with read lock;
  #查看主的状态
  mysql> show master status\G
  *************************** 1. row ***************************
  File: mysql-bin.000008
  Position: 98
  Binlog_Do_DB:
  Binlog_Ignore_DB:
  1 row in set (0.00 sec)
  #锁表
  mysql> unlock tables;
  #关闭slave应用
  mysql> stop slave;
  #修改主上的log应用
  mysql> change master to master_host='192.168.1.12',master_user='replication',master_password='123456',master_log_file='mysql-bin.000008', master_log_pos=98;
  mysql> start slave;
  在master1上执行
  [root@master2 ~]# /usr/local/mysql/bin/mysql -uroot –p
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 7
  Server version: 5.0.87-terry-debug-log Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  #刷新表为只读模式
  mysql> flush tables with read lock;
  #查看master状态
  mysql> show master status\G
  *************************** 1. row ***************************
  File: mysql-bin.000008
  Position: 98
  Binlog_Do_DB:
  Binlog_Ignore_DB:
  1 row in set (0.00 sec)
  #将表解锁
  mysql> unlock tables;
  #停止slave应用
  mysql> stop slave;
  #在master上进行应用
  mysql> change master to master_host='192.168.1.11',master_user='replication',master_password='123456',master_log_file='mysql-bin.000008', master_log_pos=98;
  #启动日志应用
  mysql> start slave;
  查看slave状态
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  进行检测:
  在master1中新建一个表,在master2中同时进行生成。
  双主互为热备完成。
  对两台slave主机进行单向复制
  只要修改my.cnf
  单向复制的资料网上很多,在此不再赘述
  主备都完成的情况是:
  在master1,master2上随便在一台上修改数据,在任何一台机器上都可以看到变化。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657880-1-1.html 上篇帖子: keepalived单实例实现高可用性 下篇帖子: LVS + Keepalived 实现负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表