crespo09 发表于 2018-9-27 08:56:54

通过LVS实现WEB站点的mysql高可用

  在一个网站架构中 只要有服务器的存在就必须要在确定架构的安全,在企业和网站中 数据库的作用是至关重要的,因此对数据库的两个重要的操作就是备份和提升其性能
  备份有mysql自带的mysqldump 在有优点的同时也存在着缺点,就是读写的差异,由于大多数网站的数据库是读取多于写入,所以这里做了一个读取的从属服务器的LVS对写入
  数据库的操作让它去找主服务器 然后主从服务器做一个AB复制同步 在这里还要在apache搭建一个论坛用来测试
  实验环境:vmware 9.0 RHEL5.5
  实验所需软件包:mysql-w-r.tar.gz Discuz_7.2_FULL_SC_UTF8.zip
  为避免干扰 实验开始前关闭selinux功能 配置好IP地址和本地Yum源
  实验所需机器最少7台
  实验的拓扑图如下
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895213o4uy.png
  分别给三个用户安装三个论坛关联三个数据库每一个用户只对一个数据库有操作权限 对别的数据库没有操作权限
  APACHE服务器的配置
  1 安装httpd服务 php服务
  yum –y install httpd php php-mysql
  2 vim /etc/httpd/conf/httpd.conf
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895217dxkd.png
  3 开启apache 服务
  service httpd restart
  4 这里我们不做DNS的配置只是在客户机的hosts文件中手动输入域名所对应的IP
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895221nRw5.png
  这样在浏览器中输入域名就可以正常访问了 做完了apache准备部分再去做mysql 然后再去装discuz关联数据库
  在mysql主服务器A上设置
  1 yum –y install mysql-server mysql
  2 初始化mysql数据库
  service mysqld restart
  3 因为在本机数据库进行操作所以不需要输入用户名和密码 在输入命令的时候只需要输入mysql就可以进入数据库
  #mysql
  mysql的数据库文件存放在/var/lib/mysql目录下
  4 新建三个库分别为a,b,c
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895224oDJ8.png
  5 在a,b,c库下分别新建三个表a,b,c
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895228Ouzg.png
  6 在三个表中插入输入
  mysql>use a;
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895231xB87.png
  这时再做mysql的主从服务器
  在A服务器上需要做如下配置
  1 vim /etc/my.cnf
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895234iZBQ.png
  server_id = 1
  log-bin=binlog
  log-bin-index=binlog.index
  编辑完成之后重启服务让配置生效

  2 GRANT replication slave ON *.* TO 'kyo'@'%'>
  GRANT all privileges ON a.* TO 'baidu'@'%'>
  GRANT all privileges ON b.* TO 'sina'@'%'>
  GRANT all privileges ON c.* TO 'yahoo'@'%'>  3 mysql> flush privileges;
  #mysqldump -A -x > /tmp/full.sql 数据库备份到/tmp下
  4 #scp /tmp/full.sql root@slaveip:/tmp/    ----------这里我的slaveip是192.168.1.101 所以IP写192.168.1.101就可以了
  5 这时如果数据库有写操作要对数据库加锁
  mysql> flush tables with read lock;
  如果没有写操作可以省掉这一步
  6 mysql> show master status;显示主数据库服务器的状态
http://yushantao.blog.51cto.com/attachment/201306/22/975462_13718952361F1b.png
  最后一步解锁数据库表
  记住这个Position号码和File名字 一会要用到
  在BMain服务器中的操作
  1 安装mysql-server
  yum –y install mysql-server
  2 启动服务
  service mysqld restart
  3 编辑配置文件
  vim /etc/my.cnf
  server_id = 2
  relay_log = /var/lib/mysql/mysql-relay-bin
  relay_log_index=/var/lib/mysql/mysql-relay-bin.index
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895239zmzK.png
  4 重启服务使配置生效
  service mysqld restart
  #mysql < /tmp/full.sql
  5 进入mysql数据库
  mysql> change master to master_host='192.168.1.100', master_port=3306, master_user='kyo', master_password='123', master_log_file='binlog.000001',master_log_pos=366;------------------------------在这里要注意的是master的IP地址和端口还有文件名和Position
  mysql> start slave;--------------启动slave
  mysql> show slave status \G
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  只要有这两个模块处于YES状态就表示从属服务器就成功了
  这时我们再去配置另一个从属服务器 这次要用另一种方式
  1 前面安装和启动方式都同BMain一样 修改配置文件在server_id = 3即可
  再从BMain中拷贝full.sql和mysql目录下的master.info 需要说明的是master.info文件记录着连接上述主服务器的配置信息
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895241IQbC.png
  第三行就是position位置 由于我插入删除表操作使position位置发生变化 具体以自己实验为标准
  2 scp root@192.168.1.101:/var/lib/mysql/master.info /var/lib/mysql/master.info
  scp root@192.168.1.101:/tmp/full.sql /tmp/full.sql
  由于master.info文件不具有权限需要赋权
  chown mysql.mysql /var/lib/mysql/master.info –R
  #mysql < /tmp/full.sql
  重启服务后开启slave
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895245Of8Q.png
  LVS
  做完了mysql的主从服务再对两个从属服务器做一个负载均衡
  在LVS上做如下配置
  mount /dev/cdrom /mnt
  #rpm -ivh /mnt/Cluster/ipvsadm-1.24-10.i386.rpm
  如果要做mysql的负载均衡的话要知道它的端口号 3306
  LVS#ipvsadm -A -t 192.168.1.200:3306 -s rr
  LVS#ipvsadm -a -t 192.168.1.200:3306 -r 192.168.1.101 -g
  LVS#ipvsadm -a -t 192.168.1.200:3306 -r 192.168.1.102 –g
  LVS#ifconfig eth0:1 192.168.1.200-----------做一个虚拟网卡VIP
  在BMain中和BBak中分别做如下配置
  #ifconfig lo:1 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.255 up
  ain#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  BMain#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  做好之后再来看LVS
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895248RxQP.png
  做好LVS之后就应该反过来开始测试
  在apache上做如下操作
  解压mysql-w-r.tar.gz文件
  tar fxzv mysql-w-r.tar.gz
  拷贝文件到html目录
  在apache浏览器中输入http://localhost
http://yushantao.blog.51cto.com/attachment/201306/22/975462_13718952525r0c.png
  可以看到页面中有三个表 在html目录中有几个PHP文件 页面中的超链接就是调用的文件 我们通过用PHP代码来实现读写分离
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895254n7zs.png
  打开index.html可以看到超链接所调用的PHP文件
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895257RHi0.png
  打开mysql.php 编辑里面配置文件让创建数据库和表和插入数据操作都在主数据库服务器中进行
  在主数据库服务器开一个用户名让远程操作

  GRANT all privileges ON *.* TO 'aligatao'@'%'>  编辑msql-c.php 和insert.php 只修改第一行就可以
http://yushantao.blog.51cto.com/attachment/201306/22/975462_13718952606ORK.png
  在两台辅助mysql上分别建立用户让以远程登录

  GRANT all privileges ON *.* TO 'ali'@'%'>
  GRANT all privileges ON *.* TO 'ali'@'%'>  编辑mysql-c.php文件
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895262gWhz.png
  完成之后就可以测试打开第一个选项就出来
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895266uTCd.png
  看mysql主服务器的情况
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895269BKJt.png
  看到刚刚创建的数据库my_db 这时我们插入数据就插入到my_db这个数据库中了
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895273Slkl.png
  这个是主服务器中数据 在看看辅助服务器中数据
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895277lOan.png
  可以看到从页面输入的值都显示在了上面
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895280aKnB.png
  看! LVS上面的数据走向 查询一次就经过一次LVS分发
  至此Mysql的高可用已经做完了 接下来再想自己安装个discuz论坛实现CDN空间服务商的类似服务项目,三个虚拟主机对应三个域名安装三个论坛 数据库用已经创建的
  1 解压Discuz
  APACHE#unzip Discuz_7.2_FULL_SC_UTF8.zip
  APACHE#cp -r upload/* /var/www/html/baidu/
  APACHE#cp -r upload/* /var/www/html/sina/
  APACHE#cp -r upload/* /var/www/html/yahoo/
  在客户端浏览器输入地址就可以安装
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895286qcgB.png
  霸王条款 点击我同意一步一步开始安装
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895291xhGH.png
  遇到这一步就要修改/var/www/html/baidu/里的响应文件的权限
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895294Eg7D.png
  执行完成后就可以继续安装
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895299G9f8.png
  在填写数据库信息要注意上面的提醒----------
http://yushantao.blog.51cto.com/attachment/201306/22/975462_13718953042Lka.png
  点击下一步接着论坛就安装成功了
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895311u5A1.png
  创建discuz初始数据库的过程
http://yushantao.blog.51cto.com/attachment/201306/22/975462_1371895315ZoX4.png
  如此过程给yahoo和sina站点都安装discuz就可以实现实验给的目的
  下面还有很多表 截不出来了 不过大概可以看到表是一样的
  Discuz成功关联mysql mysql实现了高可用 实验成功!

页: [1]
查看完整版本: 通过LVS实现WEB站点的mysql高可用