通过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台

实验的拓扑图如下

image

  分别给三个用户安装三个论坛关联三个数据库每一个用户只对一个数据库有操作权限 对别的数据库没有操作权限

APACHE服务器的配置

1 安装httpd服务 php服务

yum �Cy install httpd php php-mysql

2 vim /etc/httpd/conf/httpd.conf

image 

3 开启apache 服务

service httpd restart

4 这里我们不做DNS的配置只是在客户机的hosts文件中手动输入域名所对应的IP

image

这样在浏览器中输入域名就可以正常访问了 做完了apache准备部分再去做mysql 然后再去装discuz关联数据库

在mysql主服务器A上设置

1 yum �Cy install mysql-server mysql

2 初始化mysql数据库

service mysqld restart

3 因为在本机数据库进行操作所以不需要输入用户名和密码 在输入命令的时候只需要输入mysql就可以进入数据库

#mysql

mysql的数据库文件存放在/var/lib/mysql目录下

4 新建三个库分别为a,b,c

image

5 在a,b,c库下分别新建三个表a,b,c

image

6 在三个表中插入输入

mysql>use a;

image

这时再做mysql的主从服务器

在A服务器上需要做如下配置

1 vim /etc/my.cnf

image

server_id = 1

log-bin=binlog
log-bin-index=binlog.index

编辑完成之后重启服务让配置生效

2 GRANT replication slave ON *.* TO 'kyo'@'%' identified by '123';-------------主从复制时要用到的

GRANT all privileges ON a.* TO 'baidu'@'%' identified by '123';   -------------在安装论坛时要设置的

GRANT all privileges ON b.* TO 'sina'@'%' identified by '456';----------------在安装论坛时要设置的

GRANT all privileges ON c.* TO 'yahoo'@'%' identified by '789';---------------在安装论坛时要设置的

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;  显示主数据库服务器的状态

image

最后一步解锁数据库表

记住这个Position号码和File名字 一会要用到

在BMain服务器中的操作

1 安装mysql-server

yum �Cy 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

image

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文件记录着连接上述主服务器的配置信息

image

第三行就是position位置 由于我插入删除表操作使position位置发生变化 具体以自己实验为标准

2 scp [email protected]:/var/lib/mysql/master.info /var/lib/mysql/master.info

scp [email protected]:/tmp/full.sql /tmp/full.sql

由于master.info文件不具有权限需要赋权

chown mysql.mysql /var/lib/mysql/master.info �CR

#mysql < /tmp/full.sql

重启服务后开启slave

image

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 �Cg

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

 image

做好LVS之后就应该反过来开始测试

在apache上做如下操作

解压mysql-w-r.tar.gz文件

tar fxzv mysql-w-r.tar.gz

拷贝文件到html目录

在apache浏览器中输入http://localhost

image

可以看到页面中有三个表 在html目录中有几个PHP文件 页面中的超链接就是调用的文件 我们通过用PHP代码来实现读写分离

image

打开index.html可以看到超链接所调用的PHP文件

image

打开mysql.php 编辑里面配置文件让创建数据库和表和插入数据操作都在主数据库服务器中进行

在主数据库服务器开一个用户名让远程操作

GRANT all privileges ON *.* TO 'aligatao'@'%' identified by '123';

编辑msql-c.php 和insert.php 只修改第一行就可以

image

在两台辅助mysql上分别建立用户让以远程登录

GRANT all privileges ON *.* TO 'ali'@'%' identified by '123';

GRANT all privileges ON *.* TO 'ali'@'%' identified by '123';

编辑mysql-c.php文件

image

完成之后就可以测试打开第一个选项就出来

image

看mysql主服务器的情况

image

看到刚刚创建的数据库my_db 这时我们插入数据就插入到my_db这个数据库中了

image

这个是主服务器中数据 在看看辅助服务器中数据

image

可以看到从页面输入的值都显示在了上面

image

看! 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/

在客户端浏览器输入地址就可以安装

image

霸王条款 点击我同意一步一步开始安装

image 

遇到这一步就要修改/var/www/html/baidu/里的响应文件的权限

image

执行完成后就可以继续安装

image

在填写数据库信息要注意上面的提醒----------

image

点击下一步接着论坛就安装成功了

image

创建discuz初始数据库的过程

image

如此过程给yahoo和sina站点都安装discuz就可以实现实验给的目的

下面还有很多表 截不出来了 不过大概可以看到表是一样的

Discuz成功关联mysql mysql实现了高可用 实验成功!

你可能感兴趣的:(mysql,数据库,服务器,网站)