使用mysql服务实现负载均衡

mysql 长连接(tcp协议)模拟负载均衡

1.存在member,member的port与mysql服务port一致为3306

2.vip绑定浮动ip

3.开启mysql服务:


#service mysqld start(centos6.5)

#systemctl start mysqld (centos7)

4.关闭云主机防火墙:


#service iptables stop(centos6.5)

#systemctl stop firewalld(centos7)

5.允许mysql服务远程访问,并新建一个数据库


#GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

#create database test

6.远程访问mysql


#mysql -u<远程登陆的用户> -p -h<ip> -P<port>

Mysql实现负载均衡:

两台云主机上安装mysql服务,云主机ip分别为:server1:192.168.5.11、server2:192.168.5.12 vip浮动ip:25.0.0.165

分别创建不同的数据库:
Server1:

>mysql -uroot -p
>create database member1;

Server2:

>mysql -uroot -p
>create database member2;

客户端测试一下数据库服务:
Mysql -u root -p 12345 -h 192.168.5.11 -e “show databases;”
Mysql -u root -p 12345 -h 192.168.5.12 -e “show databases;”
修改mysql配置文件:
vi /etc/my.cnf 修改监听端口

查看haproxy配置文件中是否更新配置

Vim /var/lib/neutron/lbaas/<pool-id>/conf

使用脚本持续访问mysql

create_connections.sh
#!/usr/bin/expect                                                                                                                                                                   
#配置登陆数据库的端口                                                                                                                                                               
set vipport 80                                                                                                                                                                      
#配置登陆数据库的ip地址                                                                                                                                                             
set vipip 25.0.4.194                                                                                                                                                                
#配置数据库用户名                                                                                                                                                                   
set username admin                                                                                                                                                                  
#配置数据库登陆密码                                                                                                                                                                 
set password admin                                                                                                                                                                  
                                                                                                                                                                                    
spawn mysql -h $vipip -u $username -P $vipport -p                                                                                                                                   
#spawn ssh -p $port oracle@$oracleip                                                                                                                                                
expect "Enter password:"                                                                                                                                                            
send "$password
"                                                                                                                                                                  
expect "mysql> "                                                                                                                                                                    
#send "spool content.txt
"                                                                                                                                                         
send "show databases;
"                                                                                                                                                            
expect "mysql> "                                                                                                                                                                    
send "select sleep(600);
"                                                                                                                                                         
expect "mysql> "                                                                                                                                                                    
send "show databases;
"                                                                                                                                                            
#send "spool off
"                                                                                                                                                                 
#send "quit
"                                                                                                                                                                      
expect eof      

loop.sh
#!/bin/bash                                                                                                                                                                         
                                                                                                                                                                                    
i=0                                                                                                                                                                                 
                                                                                                                                                                                     
main ()                                                                                                                                                                             
{                                                                                                                                                                                   
  for i in {1..1000}                                                                                                                                                                 
  do                                                                                                                                                                                 
 {                                                                                                                                                                                  
  i=i+1                                                                                                                                                                             
  expect -f create_connections.sh                                                                                                                                                    
 }&                                                                                                                                                                                 
  done                                                                                                                                                                                
}                                                                                                                                                                                   
main

使用&实现shell脚本的并行

如果负载均衡不生效,在pool所在节点监听一下member是否正常:

ipnetns exec qlbaas-<vip-port-id> curl http://<member-ip>

ipnetns相关命令:
查看namespace:ip netns list
监听服务:ip netns exec qlbaas- telnet

遇到的问题及解决方法:

1.远程访问返回2013错误,可以依照网上说的方式先试着解决一下,如果仍然无法实现,需要检查负载均衡的协议是否为tcp协议

原文地址:https://www.cnblogs.com/joy-li/p/6925241.html