chriszg 发表于 2018-12-31 10:16:51

读写分离+HA(mysql proxy+keepalived+mysql mmm)

数据库的整体架构
  架构说明:
  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目录下
  # mv mysql-5.0.87.tar.gz /usr/src/
  #解压数据库软件包
  # tar –xzvfmysql-5.0.87.tar.gz
  #建立目录
  # mkdir /var/run/mysqld
  #建立日志目录
  # mkdir /var/log/mysqld
  #添加mysql组
  # groupadd mysql
  #添加mysql用户
  # useradd –g mysql mysql
  # 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 #设置示例支持的存储引擎
  # ./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
  #编译
  # make
  #安装
  # make install
  #创建my.cnf所在的文件文件目录
  # mkdir /usr/local/mysql/etc
  #创建my.cnf
  # vi /usr/local/mysql/etc/my.cnf
  #添加:
  
  #数据文件存储路径
  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
  #修改文件夹的所属组
  # chown mysql:mysql /var/log/mysqld /var/run/mysqld/usr/src/local/mysql-5.0.87 -R
  #创建数据文件所在文件夹
  # mkdir /data-source
  #修改数据文件所在文件夹的属组
  # chown mysql:mysql /data-source -R
  #安装mysql数据库
  # /usr/local/mysql/bin/mysql_install_db --datadir=/data-source/ --user=mysql
  #拷贝服务启动文件
  # cp /usr/src/mysql-5.0.87/support-files/mysql.server /etc/rc.d/init.d/mysql5
  #改变mysql5的权限
  # chmod 755 /etc/rc.d/init.d/mysql5
  #启动数据库
  # service mysql5 start
  Starting MySQL SUCCESS!
  #进入数据库
  # /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上执行:
  # /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上执行:
  # /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上执行
  # /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上执行
  # /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]
查看完整版本: 读写分离+HA(mysql proxy+keepalived+mysql mmm)