PROJECT2: 华为云 >> 企业云平台完整架构实例应用分解(第二部MySQL集群)

继: MySQL集群和负载均衡高可用.

在这里插入图片描述

1.在华为云上购买云主机,并部署Mysql服务器,要求如下:更新ecs-proxy上环境配置
给三台设备部署安装Mysql服务,初始化三台Mysql数据库.
1) 在ecs-proxy上更新/etc/hosts配置文件

[root@ecs-proxy DAY01]# cat >> /etc/hosts <<EOF
192.168.1.41 mha-0001
192.168.1.42 mha-0002
192.168.1.43 mha-0003
192.168.1.44 mha-0004
192.168.1.45 mgm
192.168.1.46 mycat-0001
192.168.1.47 mycat-0002
192.168.1.48 ha-ke-0001
192.168.1.49 ha-ke-0002
EOF

2)在ecs-proxy上更新/root/ansible/hosts配置文件

[root@ecs-proxy DAY01]# cat >> /root/ansible/hosts <<EOF
[db]
192.168.1.4[1:4]
[mgm]
192.168.1.45
[mycat]
192.168.1.46
192.168.1.47
[hake]
192.168.1.48
192.168.1.49
EOF
  1. 上传软件包云平台跳板机.
    在这里插入图片描述
    步骤二、给四台设备部署安装Mysql服务
#分发软件包
[root@ecs-proxy ~]# cd /root/ansible/
[root@ecs-proxy ansible]# ansible db -m copy -a "src=/root/project3/DAY02/mysql-5.7.17.tar dest=/root"
[root@ecs-proxy ansible]# ansible db -m copy -a "src=/root/project3/DAY02/mha-soft-student.zip dest=/root"[root@ecs-proxy ansible]# ansible db -m shell -a 'unzip /root/mha-soft-student.zip'
#安装软件包
[root@ecs-proxy ansible]# ansible db -m shell -a 'yum -y install /root/mha-soft-student/perl*'
[root@ecs-proxy ansible]# ansible db -m shell -a 'yum -y install perl-JSON perl-Data-Dumper libaio'
[root@ecs-proxy ansible]# ansible db -m shell -a 'tar -xf /root/mysql-5.7.17.tar'
[root@ecs-proxy ansible]# ansible db -m shell -a 'rpm -Uvh /root/mysql-comm*'
[root@ecs-proxy ansible]# ansible db -m service -a 'name=mysqld state=restarted enabled=yes'
#四台数据库之间免密登录
[root@ecs-proxy ansible]# ansible db -m copy -a 'src=/root/.ssh/id_rsa dest=/root/.ssh mode=0600'

步骤三、初始化四台Mysql数据库
分别 配置服务器mha-0001,mha-0002.mha-0003,mah-0004

[root@mha-0001 ~]# grep ' temporary password' /var/log/mysqld.log 
2020-06-09T01:28:17.799317Z 1 [Note] A temporary password is generated for root@localhost: k)sejg42kZzP
[root@mha-0001 ~]# mysql -uroot -p'k)sejg42kZzP'
mysql> alter user root@'localhost' identified by '123qqq...A';
mysql> flush privileges;
  1. 配置一主多从结构, 要求构建一主多从结构
    配置mha-0001数据库服务器为master
    配置mha-0002、mha-0003、mha-0004数据库服务器为slave

Mysql主从复制集群功能使得Mysql数据库支持大规模高并发读写成为可能,同时有效地保护了护理服务器宕机场景的数据备份.
1)配置主服务器mha-0001~ 修改配置文件。启用binlog日志,并重启服务。

[root@mha-0001 ~]# sed -n '4,7p' /etc/my.cnf
[mysqld]
server_id=41 #server_id用来标识数据库
log-bin=master41 #启用bin-log日志,并指定日志名称
[root@mha-0001 ~]# systemctl restart mysqld
[root@mha-0001 ~]# netstat -antput | grep mysqld
#查看主服务正在使用的日志信息。
[root@mha-0001 ~]# mysql -uroot -p'123qqq...A' -e "show master status;"
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master41.000001 |      154 |              |                  |                   |
# 用户授权
[root@mha-0001 ~]# mysql -uroot -p'123qqq...A' -e "grant replication slave on *.* to reuser@'192.168.1.%' identified by '123qqq...A';"
[root@mha-0001 ~]# mysql -uroot -p'123qqq...A' -e "show grants for reuser@'192.168.1.%';"
+----------------------------------------------------------+
| Grants for reuser@192.168.1.% |

步骤二1. 配置从服务器mha-0002,修改配置文件,并重启服务。

[root@mha-0002 ~]# sed -i '4a server_id=42' /etc/my.cnf
[root@mha-0002 ~]# systemctl restart mysqld
[root@mha-0002 ~]# netstat -antput | grep mysqld
tcp6 0 0 :::3306 :::* LISTEN 3356/mysqld 
  1. 管理员登录指定主库信息
    通过change master语句指定master服务器的IP地址、同步用户名/密码、起始日志文件、偏移位置(参考master上的状态输出)
[root@mha-0002 ~]# mysql -uroot -p'123qqq...A' -e 'change master to master_host="192.168.1.41",master_user="reuser",master_password="123qqq...A",master_log_file="master41.000001",master_log_pos=154;'
[root@mha-0002 ~]# mysql -uroot -p'123qqq...A' -e 'start slave;'  
#启动slave进程
[root@mha-0002 ~]# mysql -uroot -p'123qqq...A' -e 'show slave status\G;' 
#查看进程状态信息
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.41
Master_User: reuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master41.000001
Read_Master_Log_Pos: 449
Relay_Log_File: mha-0002-relay-bin.000002
Relay_Log_Pos: 614
Relay_Master_Log_File: master41.000001
Slave_IO_Running: Yes #IO线程YES
Slave_SQL_Running: Yes #SQL线程YES
.......

3.***配置从服务器mha-0003, mha-0004 同理之上重复的步骤即可 ! ***
*步骤三, 部署MHA集群
1)配置管理节点, 购买华为云服务器,安装依赖包,

[root@mgm ~]# unzip /root/mha-soft-student.zip
[root@mgm ~]# yum -y install /root/mha-soft-student/perl-*.rpm
[root@mgm ~]# yum -y install perl-DBD-MySQL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker cpan 
[root@mgm ~]# rpm -ivh /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mgm ~]# tar -xf /root/mha-soft-student/mha4mysql-manager-0.56.tar.gz -C /root/mha-soft-student
[root@mgm mha-soft-student]# cd /root/mha-soft-student/mha4mysql-manager-0.56/
[root@mgm mha4mysql-manager-0.56]# perl Makefile.PL
[root@mgm mha4mysql-manager-0.56]# make && make install
#登陆其他主机免密登陆
[root@ecs-proxy ansible]# ansible mgm -m copy -a 'src=/root/.ssh/id_rsa dest=/root/.ssh mode=0600'
#编写管理主机mgm主配置文件
[root@mgm mha4mysql-manager-0.56]# mkdir /etc/mha #创建工作目录
[root@mgm mha4mysql-manager-0.56]# cd /etc/mha 
[root@mgm mha]# cp /root/mha-soft-student/mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha/        #拷贝模板文件
【注意:不要将注释信息写入该配置文件,不然会报错。】
[root@mgm mha]# cat /etc/mha/app1.cnf
[server default]            #管理服务默认配置
manager_workdir=/etc/mha    #工作目录
manager_log=/etc/mha/manager.log #日志文件
master_ip_failover_script=/etc/mha/master_ip_failover  #故障切换脚本
ssh_user=root    #ssh的登录用户
ssh_port=22      #ssh服务端口
repl_user=reuser #主服务器数据同步授权用户
repl_password=123qqq...A 
user=monuser     #监控用户
password=123qqq...A
[server1]             #指定第1台数据库服务器
hostname=192.168.1.41 #服务器ip地址
candidate_master=1   
[server2]
hostname=192.168.1.42
candidate_master=1   #设置为候选master,如果设置参数后,发生主从切换后会将此从库提升为主。
[server3]
hostname=192.168.1.43
no_master=1
[server4]
hostname=192.168.1.44
no_master=1
#创建故障切换脚本
[root@mgm ~]# cp /root/mha-soft-student/master_ip_failover /etc/mha
[root@mgm mha]# vim +35 /etc/mha/master_ip_failover
my $vip = '192.168.1.40/24'; # Virtual IP       //改为实验中需要的VIP
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
[root@mgm mha]# chmod +x /etc/mha/master_ip_failover #给脚本添加执行权限
  1. 在mha-0001上创建监控用户,在修改管理节点的配置文件时,有一个管理用户需要创建。可在MHA-0001上执行,会同步到其他节点上。
[root@mha-0001 ~]# mysql -uroot -p"123qqq...A" -e 'grant all on *.* to monuser@"%" identified by "123qqq...A";'
在mha-0002节点上查看,是否同步成功。
[root@mha-0002 ~]# mysql -uroot -p"123qqq...A" -e 'show grants for monuser'
+----------------------------------------------+
| Grants for monuser@% |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'monuser'@'%' |
+----------------------------------------------+
#给mha-0001配置VIP地址
[root@mha-0001 ~]# ifconfig eth0:1 192.168.1.40/24
[root@mha-0001 ~]# ifconfig eth0:1 
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.40 netmask 255.255.255.0 broadcast 192.168.1.255
ether fa:16:3e:94:60:58 txqueuelen 1000 (Ethernet)
  1. 配置被管理节点, 在mha-0001~mha-0003,安装mha4mysql-node软件包。(mgm在配置管理节点时已安装过。)
[root@ecs-proxy ansible]# ansible db -m shell -a 'yum -y install perl-DBD-MySQL perl-DBI'
[root@ecs-proxy ansible]# ansible db -m shell -a 'rpm -ivh /root/mha-soft-student/mha4mysql-node*'
#在mha-0002开启binlog日志。(日后有可能成为主,所以开启binlog日志。)
[root@mha-0002 ~]# sed -i '4a log-bin=master42' /etc/my.cnf
#在mha-0001和mha-0002上设置禁止自动删除本机的中继日志。
mha-0001
[root@mha-0001 ~]#sed -i '4a relay_log_purge=0' /etc/my.cnf
mha-0002
[root@mha-0002 ~]#sed -i '4a relay_log_purge=0' /etc/my.cnf
#在mha-0001、mha-0002上启动半同步复制。
[root@mha-0001 ~]# cat >> /etc/my.cnf <<EOF
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
EOF
[root@mha-0001 ~]# systemctl restart mysqld
#在mgm上执行验证工作。
[root@mgm mha]# masterha_check_ssh --conf=/etc/mha/app1.cnf
......
Sat Jun 20 18:31:21 2020 - [info] All SSH connection tests passed successfully.
#验证mysql主从同步配置
[root@mgm mha]# masterha_check_repl --conf=/etc/mha/app1.cnf
....
MySQL Replication Health is OK. 

4), 启动管理服务,查看目前服务状态
–remove_dead_master_conf 该参数代表发生主从切换后,老主库的IP地址将会从配置文件中移除。
–ignore_last_failover 在缺省情况下,如果MHA检测到连续宕机,且两次宕机时间间隔不足8小时的话,则不进行Failover。该参数代表忽略上次进行切换的时间。

[root@mgm ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 is stopped(2:NOT_RUNNING).
[root@mgm ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
#另开一个终端,去查看mgm的服务状态。
[root@mgm ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:4112) is running(0:PING_OK), master:192.168.1.41

5),测试高可用集群配置,在mha-0001上添加创建库并且添加测试用户。

[root@mha-0001 ~]# mysql -uroot -p"123qqq...A" -e "create database testdb;"
[root@mha-0001 ~]# mysql -uroot -p"123qqq...A" -e "create table testdb.t1(id int);"
[root@mha-0001 ~]# mysql -uroot -p"123qqq...A" -e "insert into testdb.t1 values(11);"
[root@mha-0001 ~]# mysql -uroot -p"123qqq...A" -e 'select * from testdb.t1;'
  1. **将创建的VIP 192.168.1.40,绑定mha-0001、mha-0002数据库服务器。 点击【控制台】->【服务列表】->【虚拟私有云VPC】,->【IP地址管理】->【申请虚拟IP地址】-> 申请虚拟IP地址192.168.1.40,依次绑定两台数据库服务器(每次只能绑定一台)即可进行测试! **
    在esc-proxy上安装mariadb数据库客户端,连接VIP,测试是否能写入数据。
[root@ecs-proxy ~]# yum -y install mariadb
[root@ecs-proxy ~]# mysql -uroot -h 192.168.1.40 -p'123qqq...A' -e "insert into testdb.t1 values(22)"
[root@ecs-proxy ~]# mysql -uroot -h 192.168.1.40 -p'123qqq...A' -e "select * from testdb.t1"
+------+
| id |
+------+
| 11 |

步骤四, Mycat实现Mysql数据库读写分离, 本案例要求在搭建读写分离。收到SQL写请求时,交给主服务器处理,收到SQL读请求时,交给从服务器处理。

  1. 在mycat-0001和mycat0002上部署Mycat, 更改Mycat配置文件
[root@ecs-proxy ~]# cd /root/ansible/
[root@ecs-proxy ansible]# ansible mycat -m shell -a 'yum -y install java-1.8.0-openjdk'
[root@ecs-proxy ansible]# ansible mycat -m copy -a 'src=/root/project3/DAY02/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz dest=/root'
[root@ecs-proxy ansible]# ansible mycat -m shell -a 'tar -xf /root/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz'
[root@ecs-proxy ansible]# ansible mycat -m shell -a 'mv /root/mycat /usr/local'
  1. 修改mycat-0001的Mycat配置文件,启动并测试。
    server.xml设置连接帐号及逻辑库。MyCat作为中间件,它只是一个代理,本身并不进行数据存储,需要连接后端的MySQL物理服务器,此文件就是用来连接MySQL服务器的!
    schema.xml是最主要的配置项,此文件关联mysql读写分离策略!读写分离、分库分表策略、分片节点都是在此文件中配置的! 修改server.xml配置文件
#定义连接Mycat的用户
[root@mycat-0001 ~]# sed -n '80,82p' /usr/local/mycat/conf/server.xml
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
#定义只读权限的Mycat连接用户。
[root@mycat-0001 ~]# sed -n 95,99p' /usr/local/mycat/conf/server.xml 
<user name="readuser">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
#修改schema.xml配置文件
[root@mycat-0001 ~]# cp /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak
把用不到的配置内容给删除,精简配置文件
[root@mycat-0001 ~]# sed -i '6,32d' /usr/local/mycat/conf/schema.xml
[root@mycat-0001 ~]# sed -i '7,15d' /usr/local/mycat/conf/schema.xml
[root@mycat-0001 ~]# sed -i '16,18d' /usr/local/mycat/conf/schema.xml
[root@mycat-0001 ~]# sed -i '17,38d' /usr/local/mycat/conf/schema.xml
[root@mycat-0001 ~]# cat /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="testnode" >
</schema>
<dataNode name="testnode" dataHost="mycat" database="testdb" /> 
<dataHost name="mycat" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master" url="192.168.1.40:3306" user="root" password="123qqq...A">
<readHost host="mha-0003" url="192.168.1.43:3306" user="readuser" password="123qqq...A" />
<readHost host="mha-0004" url="192.168.1.44:3306" user="readuser" password="123qqq...A" />
</writeHost>
</dataHost>
</mycat:schema>
#在目前的主数据库mha-0002上授权用户
[root@mha-0002 ~]# mysql -uroot -p"123qqq...A" -e 'grant select on *.* to readuser@"%" identified by "123qqq...A";'
[root@mha-0002 ~]# mysql -uroot -p"123qqq...A" -e 'flush privileges;' #刷新权限信息
#启动mycat服务,并查看端口状态。
root@mycat-0001 ~]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
[root@mycat-0001 ~]# netstat -antpu | grep 8066
tcp6 0 0 :::8066 :::* LISTEN 12742/java 
#在ecs-proxy上测试分离结果。
[root@ecs-proxy ansible]# mysql -uroot -h 192.168.1.46 -P8066 -p'123456' -e "select @@hostname"
+------------+
| @@hostname |
+------------+
| mha-0003   |

3.修改mycat-0002的Mycat配置文件,启动并测试。将mycat-0001上的配置文件拷贝到mycat-0002上,同理之上可得!
*步骤五, 配置HAProxy负载平衡集群
署两台HAProxy负载均衡集群。
HAProxy部署在ha-ke-0001、ha-ke-0002两台华为云主机上
客户端访问HAProxy,HAProxy分发请求到后端(mycat-0001、mycat-0002)
开启HAProxy管理页面,及时查看调度器状态

  1. 在ha-ke-0001安装haproxy软件
[root@ha-ke-0001 ~]# yum -y install haproxy 
#在ha-ke-0001上修改配置文件。
[root@ha-ke-0001 ~]# sed -i '60,$d' /etc/haproxy/haproxy.cfg
[root@ha-ke-0001 ~]# sed -n '60,71p' /etc/haproxy/haproxy.cfg
listen mysql_3306 *:3308 #监听端口
mode tcp #haproxy工作方式 ,4层调度。
balance leastconn #新的连接请求被派发至具有最少连接数目的后端服务器
server mycat_01 192.168.1.46:8066 check inter 3000 rise 1 maxconn 1000 fall 3
server mycat_02 192.168.1.47:8066 check inter 3000 rise 1 maxconn 1000 fall 3
listen stats *:1080 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #进入管理界面查看状态信息
stats auth admin:admin #统计页面用户名和密码设置
#启动服务器并设置开机自启。
[root@ha-ke-0001 ~]# systemctl restart haproxy
[root@ha-ke-0001 ~]# systemctl enable haproxy
[root@ha-ke-0001 ~]# netstat -antpu | grep haproxy
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 1399/haproxy 

2. 在ha-ke-0002上部署HAProxy服务。将ha-ke-0001的配置文件拷贝至ha-ke-0002服务器上,启动服务并设置开机自启。即可!
3.在华为云平台将这两台ha-ke主机添加进后端服务器,并配置监听端口.
在这里插入图片描述
4. 使用浏览器访问http://华为公网IP,测试调度器是否正常工作,客户端访问http://华为公网IP:1080/stats测试状态监控页面是否正常。访问状态监控页的内容。用户名:admin 密码:admin
在这里插入图片描述
****步骤六 、构建Keepalived高可用服务器,两台主机上构建keepalived高可用服务器
利用keepalived实现两台Haproxy服务器的高可用,配置VIP为192.168.1.50
配置keepalived监控haproxy服务
1)部署keepalived服务。给两台主机安装keepalived软件包

[root@ha-ke-0001 ~]# yum -y install keepalived
[root@ha-ke-0002 ~]# yum -y install keepalived
#修改ha-ke-0001的Keepalived配置文件
[root@ha-ke-0001 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@ha-ke-0001 ~]# sed -i '35,$ d' /etc/keepalived/keepalived.conf
[root@ha-ke-0001 ~]# sed -i '4,16 d' /etc/keepalived/keepalived.conf
[root@ha-ke-0001 ~]# sed -i '3a router_id ke1\n vrrp_iptables' /etc/keepalived/keepalived.conf
#修改ha-ke-0001服务器keepalived配置文件。
[root@ha-ke-0001 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id ke1  #设置路由ID号
vrrp_iptables  #清除防火墙的拦截规则
}
vrrp_instance VI_1 {
state MASTER           #主服务器为MASTER(需大写)
interface eth0           #VIP配在哪个网卡上(根据实际网卡名称书写)
virtual_router_id 51      #主备服务器VRID号必须一致
priority 100             #服务器优先级,优先级高优先获取VIP
advert_int 1             #MASTER和BACKUP之间通信检查的时间间隔,单位为秒,默认是1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {      #谁是主服务器就获得该VIP
192.168.1.50
}
}
[root@ha-ke-0001 ~]# systemctl restart keepalived.service
[root@ha-ke-0001 ~]# systemctl enable keepalived.service

2) 在第二台上将配置文件 < state BACKUP > 即可其它不变! 接着在 、申请虚拟IP,并绑定ha-ke-0001和ha-ke-0002云服务器,
在这里插入图片描述
3).在ecs-proxy访问ha-ke-0001或ha-ke-0002上的VIP地址进行测试.

[root@ecs-proxy ~]# mysql -uroot -h 192.168.1.50 -P3308 -p'123456' -e "select @@hostname"
+------------+
| @@hostname |
+------------+
| mha-0003 |
+------------+
[root@ecs-proxy ~]# mysql -uroot -h 192.168.1.50 -P3308 -p'123456' -e "select @@hostname"
+------------+
| @@hostname |
+------------+
| mha-0004|
+------------+

######为此 ! 能有这样的效果出来!~ 就说明 整个实验 环境 就 已经 OK~ Done ~ 由于 时间 的问题, 难免会有些疏漏之处~ 还望各路大侠多多指导感激不尽~! 在此谢过! # 待~继, 第三部<Zabbix + ELK 架构日志分析等相关内容 ~!!! >------感谢 大家查阅! — Bye!-----------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值