#
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=‘gcomm://192.168.8.59,192.168.8.140‘
wsrep_cluster_name=‘galera‘
wsrep_node_address=‘192.168.8.140‘
wsrep_node_name=‘node1‘
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_sst_auth=root:root
4、启动服务,查看端口
[root@node1 ~]# lsof -i:4567
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 22162 mysql 11u IPv4 44908 0t0 TCP *:tram (LISTEN)
mysqld 22162 mysql 13u IPv4 44911 0t0 TCP 192.168.8.140:35922->192.168.8.59:tram (ESTABLISHED)
[root@node1 ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 22162 mysql 32u IPv4 45258 0t0 TCP *:mysql (LISTEN)
可以看到多一个4567的端口
5、查看状态
[root@node2 ~]# mysql -u root -p -e "show status like ‘wsrep%‘"
Enter password:
+------------------------------+--------------------------------------+
| Variable_name | Value |
+------------------------------+--------------------------------------+
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_causal_reads | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_cert_index_size | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 2 |
| wsrep_cluster_size | 2 |
| wsrep_cluster_state_uuid | a857719c-2667-11e6-8e3f-aa2deb9d92a9 |
| wsrep_cluster_status | Primary |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_connected | ON |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_sent | 0 |
| wsrep_gcomm_uuid | 5c7c83d5-2672-11e6-a40c-4ac0f0858b55 |
| wsrep_incoming_addresses | 192.168.8.59:3306,192.168.8.140:3306 |
| wsrep_last_committed | 11 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 0 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.166667 |
| wsrep_local_recv_queue_max | 2 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_local_state_uuid | a857719c-2667-11e6-8e3f-aa2deb9d92a9 |
| wsrep_protocol_version | 7 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 25.3.15(r3578) |
| wsrep_ready | ON |
| wsrep_received | 6 |
| wsrep_received_bytes | 477 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_thread_count | 2 |
+------------------------------+--------------------------------------+
看状态时主要查看:
wsrep_cluster_size 2 #number of nodeswsrep_connected ONwsrep_ready ON #It‘s running,awesome !wsrep_incoming_addresses | 此时是连接的状态
可以看到状态为正常
测试!
在node1上创建数据库erick
MariaDB [(none)]> create database erick;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 16
Current database: *** NONE ***
Query OK, 1 row affected (0.06 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| erick |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
在node2上查看,并且删除
MariaDB [(none)]> show databases;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4
Current database: *** NONE ***
+--------------------+
| Database |
+--------------------+
| erick |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]>
MariaDB [(none)]> drop database erick;
Query OK, 0 rows affected (0.14 sec)
MariaDB [(none)]>
在node1上查看数据库是否被删除
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]>
至此实验完成!
参考出处:
http://tunnelix.com/mariadb-galera-cluster-installation/
https://geekdudes.wordpress.com/2015/07/18/setting-up-failover-cluster-for-mariadb-on-centos-7/
################################3
在此添加一台haproxy服务器做负载均衡,机器为centos6.5
hostname ip
erick1 192.168.8.163
haproxy安装过程略。修改配置文件
[root@erick1 ~]# cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 notice
maxconn 65536
nbproc 10
ulimit-n 231097
tune.ssl.default-dh-param 1024
daemon
defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
retries 3
option redispatch
maxconn 65535
timeout connect 5s
timeout client 5m
timeout server 5m
timeout check 1s
timeout http-request 10s
timeout http-keep-alive 10s
listen Stats *:8080
mode http
stats enable
stats uri /
stats refresh 15s
stats show-node
stats show-legends
stats hide-version
listen Mysqld 192.168.8.163:3306
#cookie SERVERID rewrite
mode tcp
maxconn 200
balance roundrobin
#option mysql-check user erick
server node1 192.168.8.140:3306 check port 3306
server node2 192.168.8.59:3306 check port 3306
这时可以在web上监控状态
可以看到msyql的状态,即使当断开一台msyql服务器时也不影响工作。
本文出自 “完美世界!” 博客,请务必保留此出处http://shyln.blog.51cto.com/6890594/1784438
miradb+galera+haproxy
标签:防火墙 server 虚拟机 操作系统 数据库服务
小编还为您整理了以下内容,可能对您也有帮助:
haproxy+keepalived怎样查看他的虚拟ip
1点击电脑左下角圆形的图标“开始”,然后在打开菜单中选择“运行”
2 点击“运行”后,就打开运行对话框,在运行对话框的的输入框中输入cmd,之后点下面的“确定”按钮,打开cmd命令提示符
3在打开的cmd命令提示符中输入下面的命令就可以查看自己的ip地址了
ipconfig /all
方法二
下面这种方式原理和xp系统类型,但是明显操作比xp系统麻烦
点击电脑右下角的表示“网络连接”的图标,之后会打开连接信息对话框,选择“打开网络和共享中心”
在打开的 “打开网络和共享中心”页面中,选择“本地连接”,
在打开的“本地连接 状态”对话框中点击“详细信息”按钮
之后会打开“网络连接详细信息”对话框,在这里我们可以看到除了ip地址之外的更多信息,
haproxy+keepalived怎样查看他的虚拟ip
1点击电脑左下角圆形的图标“开始”,然后在打开菜单中选择“运行”
2 点击“运行”后,就打开运行对话框,在运行对话框的的输入框中输入cmd,之后点下面的“确定”按钮,打开cmd命令提示符
3在打开的cmd命令提示符中输入下面的命令就可以查看自己的ip地址了
ipconfig /all
方法二
下面这种方式原理和xp系统类型,但是明显操作比xp系统麻烦
点击电脑右下角的表示“网络连接”的图标,之后会打开连接信息对话框,选择“打开网络和共享中心”
在打开的 “打开网络和共享中心”页面中,选择“本地连接”,
在打开的“本地连接 状态”对话框中点击“详细信息”按钮
之后会打开“网络连接详细信息”对话框,在这里我们可以看到除了ip地址之外的更多信息,
haproxy+keepalived负载均衡之主备切换
VIP: 192.168.1.100
Master: 192.168.1.238
Slave: 192.168.1.239
真实IP:
RIP1: 192.168.1.235
RIP2: 192.168.1.236
以下为安装步骤
第一步:安装haproxy
下载http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.18.tar.gz
#tar zxvf haproxy-1.4.18.tar.gz
#make TARGET=linux26
#make install
第二步:安装ipvs
根据ipvs官网介绍,不同版本内核适用的ipvs版本不一样。http://www.linuxvirtualserver.org/software/ipvs.html
2.6.18 适用于1.24的各个版本
ipvsadm-1.24-6.src.rpm (for kernel between 2.6.10 and 2.6.27.4) - December 10, 2005
ipvsadm-1.24-5.src.rpm (for 1.2.0 or later) - October 27, 2004
ipvsadm-1.24-4.src.rpm (for 1.1.8 or later) - January 10, 2004
ipvsadm-1.24-3.src.rpm (for 1.1.8 or later) - December 20, 2003
ipvsadm-1.24.tar.gz - December 10, 2005
安装之前,软连接系统内核目录
ln -s /usr/src/kernels/2.6.18-194.11.3.el5-i686/ /usr/src/linux
查看系统当前的内核版本:
uname -r
2.6.18-164.el5
有时你找不到这个内核的路径,系统安装后并没有kernerls的目录
解决方法:yum install kernel-devel
接下来在进行连接 编译 就ok了!
我们使用最新的 ipvsadm-1.24.tar.gz,下载安装。
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
第三步,安装keepalived
从http://www.keepalived.org上下载最新的keepalived-1.2.2.tar.gz。
tar zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure
make
make install
安装完毕。配置
(1):
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/sbin/keepalived /usr/sbin/
service keepalived start
如果安装时的编译参数为: ./configure --prefix=/usr/local/keepalived
则操作步骤如下:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
service keepalived start
以下为详细的配置文件
二、haproxy
(1)、haproxy配置文件 haproxy.cfg
global
daemon
chroot /usr/local/haproxy
maxconn 256
user haproxy
group haproxy
log-send-hostname xiaokk.com
log-tag my_xiaokk
nbproc 1
pidfile /var/run/haproxy.pid
log 127.0.0.1 local0 info
defaults
maxconn 256
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
timeout check 2000
retries 3
option httpclose
option httplog
option dontlognull
option forwardfor
option redispatch
option abortonclose
frontend http-www
bind 192.168.1.100:80
acl ha_policy hdr_reg(host) -i ^(www.test-haproxy.com|test-haproxy.com|demo.test-haproxy.com|www.hellobaby.com)
acl ha_baby hdr_dom(host) -i hellobaby.com
use_backend ha_www if ha_policy
use_backend ha_www if ha_baby
log 127.0.0.1 local0 info
listen admin_status
bind 192.168.1.100:1080
mode http
log 127.0.0.1 local0 info
stats uri /admin?status
stats refresh 30s
stats realm Haproxy/ Admin/ Center
stats auth admin:admin
stats hide-version
backend ha_www
mode http
balance source
cookie SERVERID
option httpchk HEAD /index.html
server w1 192.168.1.235:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1
server w2 192.168.1.236:85 cookie 1 check inter 1500 rise 3 fall 3 weight 2
(2)、haproxy启却脚本 haproxy.sh
#!/bin/sh
#
# chkconfig: - 85 15
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly /
# suited for high availability environments.
#
# processname: haproxy
# config: /usr/local/haproxy/conf/haproxy.cfg
# pidfile: /var/run/haproyx.pid
#
# Source function library.
if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up
[ ${NETWORKING} = "no" ] exit 0
[ -f /usr/local/haproxy/conf/haproxy.cfg ] || exit 1
RETVAL=0
# start Haproxy
start() {
/usr/local/haproxy/sbin/haproxy -c -q -f /usr/local/haproxy/conf/haproxy.cfg
if [ $? -ne 0 ]; then
echo "Errors found in configuration file."
return 1
fi
echo -n "Starting Haproxy: "
daemon /usr/local/haproxy/sbin/haproxy -D -f /usr/local/haproxy/conf/haproxy.cfg -p /var/run/haproxy.pid
RETVAL=$?
echo
[ $RETVAL -eq 0 ] touch /var/lock/subsys/haproxy
return $RETVAL
}
# stop Haproxy
stop() {
echo -n "Shutting down Haproxy: "
killproc haproxy -USR1
RETVAL=$?
echo
[ $RETVAL -eq 0 ] rm -f /var/lock/subsys/haproxy
[ $RETVAL -eq 0 ] rm -f /var/run/haproxy.pid
return $RETVAL
}
# restart Haproxy
restart() {
/usr/local/haproxy/sbin/haproxy -c -q -f /usr/local/haproxy/conf/haproxy.cfg
if [ $? -ne 0 ]; then
echo "ERR found in configuration file, check it with 'haproxy check'."
return 1
fi
stop
start
}
# check haproxy
check() {
/usr/local/haproxy/sbin/haproxy -c -q -V -f /usr/local/haproxy/conf/haproxy.cfg
}
# rsstatus
rhstatus() {
status haproxy
}
# condrestart
condrestart() {
[ -e /var/lock/subsys/haproxy ] restart || :
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
restart
;;
condrestart)
condrestart
;;
status)
rhstatus
;;
check)
check
;;
*)
echo $"Usage: haproxy {start|stop|restart|reload|condrestart|status|check}"
RETVAL
esac
exit $RETVAL
三、keepalived配置文件
Master的配置文件:
! Configuration File for keepalived
global_defs {
router_id LVS_1
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
priority 99
advert_int 1
virtual_router_id 50
garp_master_delay 1
interface eth0
authentication {
auth_type PASS
auth_pass Kxiaokk345Pix
}
track_interface {
eth0
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/mailnotify.py master"
notify_backup "/etc/keepalived/mailnotify.py backup"
notify_fault "/etc/keepalived/mailnotify.py fault"
}
Slave的配置文件
! Configuration File for keepalived
global_defs {
router_id LVS_2
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP
priority 96
advert_int 1
virtual_router_id 50
garp_master_delay 1
interface eth0
authentication {
auth_type PASS
auth_pass Kxiaokk345Pix
}
track_interface {
eth0
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/mailnotify.py master"
notify_backup "/etc/keepalived/mailnotify.py backup"
notify_fault "/etc/keepalived/mailnotify.py fault"
}
###### --- haproxy存活状态检测脚本
#!/bin/bash
#
# desc: check haproxy service
#
A=`ip address show eth0 | grep 192.168.1.100 | wc -l`
B=`ps -C haproxy --no-heading | wc -l`
if [ $A -eq 1 ]; then
if [ $B -eq 0 ]; then
/usr/local/haproxy/haproxy.sh start
sleep 3
fi
fi
######----
主备切换时邮件提醒程序(此程序源自litus,有小改动,调试通过)
#!/usr/bin/python
#coding: utf-8
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.Header import Header
import sys
import smtplib
#-------------------------------
# file: mailnotify.py
# desc: send notify email
#
#-------------------------------
strFrom = 'toplover@sina.com'
strTo = 'toplover@126.com'
smtp_server = 'smtp.sina.com'
smtp_user = 'toplover'
smtp_pass = 'xxx***xxx'
if sys.argv[1] != "master" and sys.argv[1] != "backup" and sys.argv[1] != "fault":
sys.exit()
else:
notify_type = sys.argv[1]
mail_title = "[crt] Haproxy-notify-info"
mail_body_plain = notify_type + 'alive,please check it now'
mail_body_html = 'bfont color=red' + notify_type + 'alive,please check it now'
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = Header(mail_title,'utf-8')
msgRoot['From'] = strFrom
msgRoot['To'] = strTo
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
msgText = MIMEText(mail_body_plain, 'plain', 'utf-8')
msgAlternative.attach(msgText)
msgText = MIMEText(mail_body_html, 'html', 'utf-8')
msgAlternative.attach(msgText)
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(smtp_user,smtp_pass)
smtp.sendmail(strFrom, strTo, msgRoot.as_string())
smtp.quit()
到此完成了简单的haproxy+keepalived负载均衡主从热备功能。
不明之处请参阅haproxy官方cofiguration.txt文件及keepalived官方文档。